From b317cbf558f0ec8985eb23d96a9f9610f7a15387 Mon Sep 17 00:00:00 2001 From: dongzhihong Date: Mon, 4 Sep 2017 23:21:50 -0700 Subject: [PATCH 001/193] fix typo, rewrite graph --- .../images/multigpu_allreduce.graffle | Bin 0 -> 5294 bytes .../framework/images/multigpu_allreduce.png | Bin 0 -> 114947 bytes paddle/framework/multigpu.md | 60 ++++++++++++++++++ 3 files changed, 60 insertions(+) create mode 100644 paddle/framework/images/multigpu_allreduce.graffle create mode 100644 paddle/framework/images/multigpu_allreduce.png create mode 100644 paddle/framework/multigpu.md diff --git a/paddle/framework/images/multigpu_allreduce.graffle b/paddle/framework/images/multigpu_allreduce.graffle new file mode 100644 index 0000000000000000000000000000000000000000..2659baf8ada1c7ed09cda326fbb6e56dacb8fdcb GIT binary patch literal 5294 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 AUH||9 literal 0 HcmV?d00001 diff --git a/paddle/framework/images/multigpu_allreduce.png b/paddle/framework/images/multigpu_allreduce.png new file mode 100644 index 0000000000000000000000000000000000000000..7741bb37f47e10f13f92c732cbbe9d31f7762be4 GIT binary patch literal 114947 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 aAClWSZV)j(d6|O)|7oe|V#`&mL;fGq_pbl| literal 0 HcmV?d00001 diff --git a/paddle/framework/multigpu.md b/paddle/framework/multigpu.md new file mode 100644 index 0000000000..61ff1ba204 --- /dev/null +++ b/paddle/framework/multigpu.md @@ -0,0 +1,60 @@ +# Design Doc: Multi-GPU support in Operation Graph + +## Abstract + +This Design Doc refers to the multi-GPU feature in paddle. We propose an approach to support multi-GPU both on a single machine and multiple machines. Every device only run sub-graphs which our framework issued. We use `Broadcast`, `Allreduce` operators to join different device sub-graph to the whole graph. + + + +## Motivation + +Paddle supports training with multiple CPUs and GPUs, refer to different physical devices. We need to support multi-GPU training in parallel for acceleration, in detail, there are two aspects. + +- GPU Data Parallelism + + Suppose to we have `n`GPUs, every GPU has `1/n`part of training data, and store a complete model in GPU memory. + +- GPU Model Parallelism + + every GPU have part of a complete model in GPU memory. + +At the beginning of training, the framework needs to issue the same sub-graph to every GPU in Data Parallelism, or different sub-graph in Model Parallelism. + +During training, we need the operations of peer to peer copy between different GPUs, aggregating gradients/parameters from GPUs, and broadcasting parameters to GPUs. Every GPU only need to run the sub-graph with correct place information. + +Besides, it needs interfaces to synchronize model update with each other, and issue/merge model from different GPU Cards. + +## Implementation + +As mentioned above, we summarise that several kinds of operators are needed. Currently, we need to issue parameters to different GPUs, named it with Broadcast operator. And also synchronize parameters between GPUs, called it with AllReduce. + +### Graph Converter + +To be compatible with parameter server design doc, the graph converter converts the user defined operation graph into sub-graphs to be executed on different devices. + +1. The user-defined operator graph will be partitioned into sub-graph. + +2. Control operators between GPUs will be inserted into the graph. + + *Broadcast, AllReduce in a single machine. And Broadcast, AllReduce, Send, Recv in multiple machines* + + + +After convert, the graph as shows + + + +Operators are added to the sub-graphs. Every GPU assigned a role of `rank0`, `rank1` etc. + +- **Broadcast**. Broadcast operator distribute initialized parameter to all the GPUs from the GPU who owns it. e.g. from`rank0` GPU. +- **Allreduce**. Allreduce operator synchronizes parameters/gradients between GPUs. AllReduce implemented in the Ring-Based communicating method, avoid of the bottle neck in a single GPU. + +These two operators need the Multi-GPU context support. + +Need to notice that Allreduce operator force GPUs synchronized at that point. Every device only need runs sub-graph in a loop style forever, the whole training process in asynchronous or synchronous mode depends on the Allreduce point in the graph. + +### Benefits + +- can easily move the optimize sub-graph to parameter server, multi-GPU feature can be compatible with distributed support design. +- easily plug-in with NCCL2 library. +- GPU Model parallelism becomes easier to implement. we only need to replace different GPU's sub-graph with different part of the whole graph. From dbaaa4979b7cef401a28491906b4954acc9f9b3b Mon Sep 17 00:00:00 2001 From: dongzhihong Date: Mon, 4 Sep 2017 23:33:25 -0700 Subject: [PATCH 002/193] fix typo, rewrite graph --- paddle/framework/multigpu.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/paddle/framework/multigpu.md b/paddle/framework/multigpu.md index 61ff1ba204..c8501725f5 100644 --- a/paddle/framework/multigpu.md +++ b/paddle/framework/multigpu.md @@ -53,6 +53,10 @@ These two operators need the Multi-GPU context support. Need to notice that Allreduce operator force GPUs synchronized at that point. Every device only need runs sub-graph in a loop style forever, the whole training process in asynchronous or synchronous mode depends on the Allreduce point in the graph. +For the simplest implement, when each GPU compute the gradient of `W`, followed with a `AllReduce` operator, accumulate the `dW` to full batch of data, then run the optimize process individually and apply the gradient to its `W`. + +In fact, in the way of every GPU optimized full batch of data, wasted (n-1) GPU compute resources. We will enhance it in the next stage. + ### Benefits - can easily move the optimize sub-graph to parameter server, multi-GPU feature can be compatible with distributed support design. From c11718550b959aeeba28d0f7cd35d6a9f2f872ed Mon Sep 17 00:00:00 2001 From: dongzhihong Date: Tue, 5 Sep 2017 09:57:16 -0700 Subject: [PATCH 003/193] rewrite graph --- .../images/multigpu_allreduce.graffle | Bin 5294 -> 5704 bytes .../framework/images/multigpu_allreduce.png | Bin 114947 -> 118413 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/paddle/framework/images/multigpu_allreduce.graffle b/paddle/framework/images/multigpu_allreduce.graffle index 2659baf8ada1c7ed09cda326fbb6e56dacb8fdcb..588f79feb9a3f996b6d6208e556d61f0a9602aa5 100644 GIT binary patch literal 5704 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 literal 5294 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 AUH||9 diff --git a/paddle/framework/images/multigpu_allreduce.png b/paddle/framework/images/multigpu_allreduce.png index 7741bb37f47e10f13f92c732cbbe9d31f7762be4..52d3eacd55834880d09f4efbee804b5c567a57fd 100644 GIT binary patch delta 87925 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 z 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 Date: Tue, 5 Sep 2017 10:08:56 -0700 Subject: [PATCH 004/193] rewrite graph --- .../images/multigpu_allreduce.graffle | Bin 5704 -> 5489 bytes .../framework/images/multigpu_allreduce.png | Bin 118413 -> 110982 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/paddle/framework/images/multigpu_allreduce.graffle b/paddle/framework/images/multigpu_allreduce.graffle index 588f79feb9a3f996b6d6208e556d61f0a9602aa5..cb5bc420ceafe8ba4c87694d44ee4e5e4ad06779 100644 GIT binary patch literal 5489 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 literal 5704 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 diff --git a/paddle/framework/images/multigpu_allreduce.png b/paddle/framework/images/multigpu_allreduce.png index 52d3eacd55834880d09f4efbee804b5c567a57fd..87a1b3e8f6dd4a713ec9df9f0037d1da04e9178a 100644 GIT binary patch delta 81600 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

Q5N*J=DxH{kqcyns9Z4R` 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 Dcuj(D delta 89144 zcmZVmcRbbaA3u&C931-`n~dYw86kU*VEGmCTNL9D8SH7b=dC5y>89lTpY@ zR%J(#-=)|4^Z9+hx9>mn$J05_=kb3E6gVMXc9!q-@uPkML2{yx_ce?C)=J(Hy3e%DjZd1aPah?TM zZv!8`vUpt{!;{`3TPdOShKuURRgCHN3VWvsIXT zE32Mse=*atAb5|AgKl{xO)lE;)+6!VEOig|T+!6tYGV7$|E^FuKdq}P75YSADHawP zB?-;aq9u@|qB~(h5Q2Z8Y|704_uT)_U$rRYQx|jF6m>OKLO49l(~psoHa1izj#hrB zvjK@r)AwVhFbC^oWNKDw`0oNHOjsle>GglEfWZjELy^dTzc`^d`SY#nceFLfnRg$b zY&jGsSvcjh;gBlYv`ucx1e^*8lP zHTe>rj9&gfU-<9t;8KK`zbD_Gh*-A$`Jqq?^U;5VIXh&UwRv&7dZFR|=klP;BjW$+ zt5Z|e7jm*BI9`0}nfCnu7Tv!k+eR1K_a(Yw;=hBB!Npn!d}Y{8>z=sINYl5Gm( z*XUeD-v8GV*f0)KdkHHf%93z=kGJiT_L#%W zw1xZub&}lrWODU1yz>%!sPMMA*9T$x&&7IrrD*W^v09763O|LdTmA37wd;vZarf_u zWmvsrAd>0!zeiM4m4Px|v7W1UHGXL)cYUxx1+&l^koEpqY%KD)oroq+F`(8XokHn< zwcQL?B~|@h$DJs+PJ9&U=>c_Ukl;!q~vbEO}ykA_{1 zaFJbRCfzW;SgEjNgeqyM_}EMHx>0B$k?d|ahVH5Yc)NUj3%n?iyhv@8HL0 zzrOGr$!}v8aewd$6XDqs4PceY*eZt|1xZe=Enzg?AZ4(GUBq4RT#2y8B`!QNe(F zIgYTm z^q6aMpRLW6d9aoz5p?A4O^<6X=Ufk;LVPYR#9a$fLkhy&KR0}@c>YwK^SUQ0TtRWK zpF8MBvoq_yl-tzlPt19)selSG0p@?V&Wz}n#AXOM>|Q zInHDcIT%|T6-@`l5UK=QT#uc%Q(v9*B!72AY0Z{*ERLnh6wNMPS{8goc5$!C398b>Na zK7}TQ6IXiV{{3h|`}GsCz9=+|2es3~bk}!l>N}1*F-y*8EtyNh^p(ZKE-D#Zxj>Au znm;4dSADUY?nW>Gci&MXL>9>b06q$Q8xKH%M+q(q(Yz! zqgUi1#7KoZ$G44R_;YI2QWBvABJktG>ARrAU&|X7Q|sPv2iV*4v#o_Ooec4B8=Z0z z!U+3)|8|gaBIz;5?<5q?F@Qr}JG22lg}fV+d~oZ91#x$>V9rC2nEQZ0Pzt1*d67`2O7pax?tKub z8sMD+JK@nnz;ly|o8&raf|U@54Rtu4IgC#~$Nf|N#;693<45_g>BieD>Be-+_@%Ds zu8I)MTvTVuS}$HgQ-j6Pm4^$~L^uW7M+*Sg2Ji3dkf(v0f@1{!G~)7*VZQ3ON1vpo ztu$2Q$IGqihW{KHc)M>*3{T!Jn&IeM&IagTAtU%NlaHlBDwZXx2H2O|I5yC})!_MG#ZT z;j>``$I}oPFo6c@!0wX@x?+UdFwgx#xT_g5Aj-``>i$DHo={YPx~S7fG*BS@$$n!R~z zIDBs5EAm8EuJPxi2QloqS+U_v*0F#})QmjddevA378#TgqD&w*@w8shc#=l(B`Ub|a({BP`Qesn{7lLbN>}GtW>{s>;bC|BTd>{#avB+@&573NY<~1)3cOM! zz6}~mytsRv(~t>k7k1ddm#S8Dqd``6oWCGA{6UJ2%2iC?9n(WSJplqnU&xiV<7H4o z?&AdTW37eoLBx%Z1V~X6IyiS)yecnQLGjDY3tD_N`}Lnydb#9aZcPiQuAbdqk4@jx z$YAj%E<7UTaC+stjk4m=jQtGVcRvE;h^C<>&=xdqbTDh**< zv(Gnc&ko|}1&`&w2%{f&d(#@FP-}2Y!U)BI<_pzJf!@TWU|-((At%8Gfv7^Rq18-E zh*ae|IR1>NoDW*4k>7!i68Qd@%dR6c)nraV2$3d{iZeaj72i@X)pSaj#=I-Us+!>%Ws!lD_MZ>0u{oA;%KNI!9;VwEhnek<>t4fcs%wnUj$0;{=D-z@=S zNzv7^yK3!$PlwW%SvqM-QU=A>E%f*l!5!CPkJyQBLdTr~v-|H@kS zb*9EXrN=M;kk#^=Wx6RhDyj`%SxD6qo&$I;e?OK+!!BR1kI9wZ92l+Cj<-GWPkC7f zx;S&!=Ch?yav?4)xDG4fI>e&ULw{J9dD@h;z4FI81oozsKcz-5w?344L~%c!+M2pX z)%NalJ4=VtEW0)}J@@T7L2bb}vV0Fu?!F8MH~{j%8OCwF|~7#*^&61C#RB%eu#> zyV{QZ%wuB!1V6oYi=LPT`od6qg)hNDM6QpLyH^KC54hVQY#Y3v#yM|_*;~3mhX7fv z(JuHrulOmYiqi7ySf02f_F@#95Ii3rZ&}T%wshJ_aRtdGzdv}DML6CzMiW(xQlZn@ zgb@y)+c9GV_@_)lN9PI5dSe9JZ+|T?Gx9q7JY|Iwv4;v0h^L-dMD@SciBpFfmpt>d zLY3?QGayD58*;fuS_<{!T!%{;ky&nyh(gMBk{q7@;Q577x6mt4&fh7BME4l~1OzQ` zv*I~VthG0Pq^Bq#@GLMmZ%0bee%T7&Zm0yNa{Z=i_Y_#=zW_9xY=6$y@sqrJW5`Ir z4xF@R(592*)|iFg<;Xl}^O%=^*&e^2n+Rccy$RO%LT-dI$+OPUv4@gG!1>8gBC&L5 z0>Ak(J*%zX!brNSCS#t(#I!v{s3O9*0mg-fY7m$wpIoCp77!CJ)=yodHLq?JuMa5SbfMepQ{zUu#Qp=^O* zG;yE}kH8CFNFac4I|*GbQL-Ke`n1IiCpz&Ao~k}UoMJZZ0Q72BA6?gbr*jpn=@eP6 z6K|`}X+ZG5J2Bq(KYONOY8!!<(3JXy@#mk@{pVZ-I&pKb z!sO_DqqE^kx^&zI2Y*iP?$QDYRcv#u-tQ^rBeS?le>E84K3hS!1COeGs7AF zCMx`J`OroHGZ5+1iK%C(>aaa>v%z`v@Lx7{NkNuIA z6=pr^^A+c`?5ob+(p-u#XF3Cc<*#tjPQC`d22H-i9HyZr2|!5Ppai^DDJ$P@wFL)M zlPRc;i~4Z}(#mahXTy@YXb5I9Q~>BX-l<{OH_TyUW!ME>hV(Ry>|E%Fem zFe=?tXg4g@%zHDgzQ41E@4I|V@7iGY%FJfT!Nikm(r2r29S?tmk#aCgIKaFn>v^T< zJ567jjXl%9w2HR!v@xr9F-qgpNAq4HZy3jcyO>FUgo$V+vRw<7@tIwf#dH_J_RCFL zEVyUDMxFB+`B-%)mxmHs)ysS|z+d2d^A@w(JNU(04@4p5LudLleIYe8VQbKBo4FIV zaPcA8#ZaR7602Dgq}t%rE6cuk7LB9=%wM@M{)~t0^(CB-kHfqa0kJvBv>}z5^CTj8 z8X;YbIRid4;8Oct7%UaHon{Lld=2-5M%73+ZZs6pqcG_`9iuf93GQp-SgK3Ma{?0q zwZ7GN-#rGJr0MH>NrPM(9!Hg*t^2;ip-;3ts|tYGA!7V&Q0doP+KX`0uiH(q#>fd4 zxmQ5QL}P&g!j7bR=at-jgl*ry5aF$hE;B7JH#s80G1Q?$D&yoO^ZA||ND3YaUn^e4 ztdHMKEmSFo`9LL1GjB9kf*TzfP8IcvTh3uNI*cn3wB_@Xd?-I^ZUT*B>td4+xG~!F z6qtfQ?U8vsDOT4GXu);CKPNDY7XvYp6?i9bqwIZR{`-Io>VF#>M^12>zPqGufw+Ys zCI8%`SZUSlU9P1gU5)?Tey1j1bzt{k;>KOyF-_(!Q(%&L((V1{iZ&zK<$eLCBV%C# z^*O$l7qFJ?Aj!zC`lINH0tq)TUrA`JO~=LWGy_b&Bd9keAIMls_ZE11WQ3Lc0csV2 z=V!lSg0z_h={>GG4VpE1a$!WnP?yQcOD35v{EznacE;?kXfmylr%Lnn9@z}bA|1?( zvw*j}#;>X`MeY@phodgXJ~AwQq}Hws6`mka1S+o}c74F`jH~>Y|b-!_*@9~61 zLJFK4HWLOw#v~Cyj7jnRyLXpkoJO)}=iXR0dTc8{nj16WTKxOxXOitCP+-Tux2iA6 zh+)29&d=7zN_L-jJ%yEti#}BNUZ3V=1?%`Hm0hABYuUoD97slED+yz~I`3S7mG#>| z9x)O8>rT!-X2$1NP0pIG+fxd$CU$aVFkY-75rNP{NTmM?z28z4Q=nMY@e^pbA!Sp> zeD-Biytf#+L#*&NkXn*T+GJQGi~t+#tqGF#GUtT`uWnvr6^>w`; z6fmU><(6c>eSj-)FZK}gcYprTm$0K0Z4No_)qVhw0pCBpo^N^7NECcuoT(G61JV^{ zUX@l8ch?@1&EV%@NUnb z<t3-T<$}=arTs=?oR<>{fuGL*2;as{fDU(EvwukpN?`&;qzqW@Hc}3Mn*!w!u_82ETEOj)0RXNs5|PNlW3-K`g75k$=tDP@ zSjJ2Kg&$;Ui-5{-fXxl`q>IeE7T|2*5ZoS3OC_QL^k3YLGnqySeeIYBo2^yq^z>h-_2$qJ^!6WJhZr=^zB@ic9yZQ7`OVvHD zbys{*wByz6>8&cOS%^hMa{rG2Ad1%2BNXW$&jXj5v6;cZx!gABU_DIv$$SGYwv*Jt z;(|P?A&CiA_a4o8X~)p=-h97}Y2^`N9g8EOW@DBQ%I?LdzP#$2T&8wWOfjIK@xovU zekM|f-kACM?)+(hOnT~MD07}J4^m5@T$j5U4#Ff+hd}}Uro-+SI$-TtU+t$-=Y4k5 zz@!j}J(2*?`Zw2~2)iz{%DtZfo38bAgp=e{n#D5;n=Z)%3I*hpC zY)eoA%?jPx+aX6!D~{#e(tLgIWB+hWH4AAB&@h=ow?)%?%Mkzg$DYQ&c<0IQ^mWM1 zv1B(X7_MH2YB=R!@5}k$%*CmYKS!^n+9Y!4rH2>0%llLYlif&|(bS7iQryEa zcaek}T)s#~N&&+wg!^lf8o~ni+{3`vm#acng6G;6r?OpuDGd2}H~#k32T|7QdMMhO z8aL9J&*0sFBxR+$7Q`u$3n`KqfeS(hEL@7P77!=p0fPx_b>Ps{wgS{dU(T0#VEuTm zjHT~_UbBpP2ZmXt-31Js$@|RTVE%=pix^li5KJzxV%TztTw7!l z-*@p8-I@o7H!7LCe)s9#14gu}6?j@C&8jA8GO5d+4n25U0dkXD^)b5?OP7UiRhAal znf*~UiTpS+Sz)a4JUm3&2@Qok0K^%frKdc%3{^#x#!nsAe^m&|D+01i>#m5QQ9ia& z$q;z~tXCpsRjAlrS0?yMwQE40gsW~}P-sASZm4q=!l7sj6Ifu4(jU-6(u7|EHd13$ zh`0AXqiqilr3UTH&20Yh{*X+TF#F@(cC!)((1U~Q?ae)soN1h+W$5TfmIVX1rk_r-69t`+ga2~i^C&`ib*G7o*f zfW1Oq{-i(V&iS`Ww5XN?n3N$8T6cRhZd;o-xX%vd%3QH(@;us}E%*6;v?jzR>8f@C zHeuxmB=hpzqil{q(zxT6SmR z@ERX{S*W}v^j#n>71+}x32bt-+=Zv|vq1j?b)}nF=T_B>U98}_{CKB>G)dt{)2YS( z4LdtEAy-F$mb_hUtu*J9;P%RS(!nT+=_MvzR1z4O>PLLyr zX%!QVVv5P57GU)IZ6c2zYCz(c$Crn5q=a18#DGEHdN^eXfNuxTYZBJ69_N^Z|SDHL%5QY=6BGM9)p+|xL~a}JgkA90zuL#XaIbR zh(Fs**8WSa`@?BpXE6MMH~;GgjxZ$K255B>5th#3@unqaHFh9|@{YG1Xb&CKL2G8K zUc1NwUHdg}aDQ+0smQVOo73s&??7+-1IPAJ<@Q#&IWX+7Z2S8qEC{^NqGa2yjs zsx+|9WBh}6Q;Rfy0zVaawvm1g8{=glwkxNOB%}IAlc4HglT>(md8>U%qP78s*P?rP zUzc^z_Y4cQDq@2BV1-ckqxtgjP?AQ2=tY(D4(vX-S^myPYZwvTw%?mVa|ivtM?ifP z4Vk^Z#}LDeHc4j?68vwgl0td#QCG=bd+`7~HuYuZeLsjau8V1@NBnDfVHYZ#f=M2N za%BVgGbx)Vt-%f3&@Q>^}_afMujA-@kQEE|8YIOi2{-6z-SB=G|_ zIq)P~0c-+Rs7XRXyUyk_DDE5b`F$#I&6+& zCR48!twZv>m@w?B65rm1SjF+@u-I=x8+%)B@gP^D)aE}`7(WMm_Z+bOmA)kYLZYYb z<+cU>%VffeL(E1+7ybh@teZQOSYWvGG*^{J49hNV2mK5CSb3|9nK8xu)2|RfD76*B zql69C0jV`63?1_=HD9v709ky70SF0@xMPtkoR!PJcsg0 zGJ=~>=X4s#u9d{|x_OXH8})NVv+V&{*sXJOs;Z{}1YMsPYTG35O|GXK8;m8^%EI1& z!HR2)5#k5~XE4Epru$$Uk;McggS}+wf0GS+=+Jh?JRxfN^+Lr0nSG47BBI|^jRcEI zus!*aDPTlcl$sq+{?Qf{nkxJ;C~6B#azxLD)$_t4!vG)9aq`?k5!nGl5eUd=f`)oq zX<*oib^DZ_pI!{e`~=PvYc0<>ii(sszx2_UkYCx(Pd7d{KKPx0{`>fA#_g)6m&3OBGR;(7s2^Xx&K`%D0gf(+8#a%5_8tJy z?>Fnn6nDZfrFY>4788kiE%a*E0betPu}4bd^ys=CsT~U@S$g3o(bPxF7Qg$TKg>9f zokg89}4mPv6PW z075C{8;IsLe%2tp_>%>>B{82{Y2I51fje&`pWOrSynHt#%ke2)b_O#W@D-jbo4Bf9 zQ#XA$`s35LV&hJ z5w3rEhj~^G>&JfwD)v{6+tC{xc*jOzuW1A3DgPB?*zxY!Rn&nc7K}du5tR4+jbm{0b}4apd!6lKd)P@#tV^24 z@nT0r4P1{(Ywd`aX+RCKn_MET0C@5tf}w2b%6PG)s^sr$o?8I2?37Co`iQh}t+zhk zhPBzeps7I(Jr}z2^|W=%XOEVzn+^WE%g4`Z?xX7Ts^o8Cp2DH9_2e9T!WYFr;qyj5 zvNeW_!NOwb_&sK8djOMV?kZl8{a!zTM{|Eu(yDeY2=T+MgwvJ*N&z-q2=2bFaW7Y> z91-hlkN~o1H^bd!z<2{pz770{&3bisI8A`#&w1uU!x;$z1@;ObS`=f4@R1s`U#d1_ z7XvR~gKGUH#ZvtS$PO4j&3TfJz7V24z!|V8YPU$VSM@6g)2y4Jq5j2D)DqYsevp{O z!j(OXWH_!zu+5K^@1LPo#SENb6-tt9#5ZwoMXvevC9+#yEb$u5=H}TfxMeWNa2j`2 z*g$BQQ%w}uiC13I9&_g|)SP2Z*+I`ZjnCxXMeny4)YL7!V`gs;B_M(gIc2|aPazOj z?42JGp{(6e2O)40UTD|&?xtA`#I-FOQXY;ADx`_1c-uEIi>f#8 z>BIL+(vsG}#D$h8=_z)`*(cHyB};Pe{`zQ9H=I`tnt~@%637tIz!Uo{kOUYr85 z{V6c}4Lh3{jK<`?)D71*(|lb3G+|El&1b$J}qmB$yR@|C+6K6)qe zFKBEtOM93;Lpw;+dKd=b?d1j93mhF`b8|)uI1C-N+;>yVHVg@ZBuV0$7%qgvB`!s) zMCIQud+kqzZVw0i1W`r-h=X?d_H>u&yX5Gaxt4iIazfQWy1U1lX{CDfi&)Mf;`{xYZ##K(Vy=CvUjHC(*c+LK>WATipQCjwL_3| z8O+Pd=Rl5Vz69@6Y4mP&1twNg7T9RBv@id3Av~U|Gq)44|7PGGXU7>X48_0D_#^K; zoEOU=3hPQ5GHNO)!Ih%pi;^ zauJ&FNI({SkhWXbwpFkgY|$JbCBWgl;Vi%ss4da7S?~^Idg7z;R}_*j1}BT-M3-j^ z>2=RkVK$~alPVaUANMB9!`c&n2_$dEHSyz!Q^eoybW)(j79G3mkHBkH0Tv&T(M=u4 zC%Q4-`4p-Pul?`G6;BZ)H~8#k`dESIDP& z*F-+ZgiWc+`pj{s#JYh6q^j?+=wd)2*a=1NUDEm3Zg?Eb}g3dn1ht`^0ItT7zO zN@%BG7zHDgRJCOb#kt_mp#HtdmD_c@G@UM-5g(=Re`?>bjb=BM{r)n(HHg`vXhoz| z%C*A^D(|-~3sU-Lj6Q=_qLJSEaJ;2OcLQxcl=K!_b6XQu+jWhBLDNuN=%&RW3Lj&0 z{{9^-9){`-kn*wA_=CP@Gdt}N9Ff{FOlFTU+m2zgp8+!}tG1Mv>L&(&)tmv z%5sR|@}}Agyxd0%2@LI@bVB{Mj+sH&rG=kf>BLS}f71or8~>7?l|68E(-6%moaYb6eWGk0c>Iu*RZrK=^D zFbuKvjizQ7(*$=+kBx#nI6K&wn7vzs?Rv_pM$;nP?Wgt`^rSCe0=Go8Swf%uh!v`` z!Dt?26mtG5JiA#SYUMhH@z=l%{?>>K&tj7vM159yjWZgBaXtTajzdU|1r#G3A8LFa zz+O5rXmThq)U@e#l9_WVld6L+mh>;TzjI0vncR$l_{7xZy}uRp;A*t!@Mg;6m37C_ zLbY->FvO*7*9|*Lw_UnnEU8l`X~5(%KKEpHySDFZ^7a#E-;P3jSFbN7_D?2ORBQWjwlImK!@L%#)ADfJ+K3%_p}7u+WLijrWG}C6^Ae|68=s_^e z;vR;$#4uC%M|QjzI6HAAqSEj3O2j#R9%y=XRQ?d%SR1g~e!__9U^gPlf*MfbAY3=`^c*1#W6< zW252$1+4~GnG&E*2vTkStGXGCG5oA9&_7+RX_)+M`}w{FLD&KdJ{lC;loIk z=BqiUAFSWA7#^7km$-Mc==%-CKeOK-_`nj1tN_;Ea4wD|g-$YY#pP2jP8w^ZajLtH zX)1hRmmYcjb1$-8-d%qVbtJUT6?n9LO_3FqTInVH8$?f})NHsus(Y5oaU{eIHcCsD z@e?c`V9!`|+B`puJ1iGl_C}B?UHyhZVc~@q1hzol*n*ivFX`2?c1n(t2rzsixIUdD zdTg@9bTNBP8MmWrIKVWe2d2gYF~>{MF%Nq-iZ6VWpJJ}bb&Ygb4PG~`gPtmh@g_|( z`lGGsq!kTtt=UqEkHqiA2$~rXz*NwYh&88I)m4>xk#_jtP2$Gs5zN##4<3$4P z(a;*sON82xu)>raG+dQjCsbTg@%-MeFDkI8s2kiA;tgNU+w5nqFe0ber;vS6)`DO{ ze8o~&e`5dM4*lUehFYA_wu{+Ni>`xBO&-n*Cr|Wp*!E8*Kdrg9U%AtlIz-X66t;7i zUSj2_%A#+zS=-BUxNhOWfP*|(262E~uw5y(9(KyY^o)g-xw}^9fCc@=rZp?lWDyT& zQ$SK!31LH90;^Q#%jrM*!pS-TbF5JRv+v1_a;TsMra4TvSra`CJcxBKsP-%SRj2sB z6_;c`)|vM`piV>S`6tH*zu#Y#e4nHM*h6m(4N$)dzY=2nqJ;$ zv*8z{_f3Q8nOOo>mi0+G)g*Ua#Fae>)C5<`-KGbq>t#A|-c)YB zsxV`K_!tQJ>}zl4CC_1M##vE&R!MB3%%A2Ts0~%A&P{Yu7OK{E_?GeeI#eiuM1f}N zZSU<{)#wgkA~#BuE%(*VJK{o7Ck(Y0BWSy5`g8g~&d%YeAAsrKwxe{Yu_GBPjV0~MO_5%Q+OpmZ5RxA~qa zRoow2A7{Nk?(OvGCM}AvRU+?8a+$>IWJTJy3` z?_gK{XddM;yLQ#O0!j^aYtpNi(_QLXcHU2}n5wE0p+`5RYB;g+>w#o1932V7_xQ3NGCUU>=UaT# z8#&OD-^z(*ihFc5j%f3!_0qLZ5wK6PBq%Oat4VyT21&2Wh2zDa4=-%!@gr08)nQ_wz5--j&f-_Y?VbMY%ysN~Jb%j^bQ5Pz7VA+8RD||ME&~ zwYZ|1K(f5UOcrvtM=(Z(2aOI0HRx8d@(J%e?LOy+QsRG>|yI%<0KLsIk4 zL2=duk8fWhv_)}MAs8L-sGl<7cNx6*znAU$q<5n@ndGZ^9761l#Q~VFp)D~f;8sc{ z#)a{~CY(R*%=Tca$;(9fIVI@ocE_WoGimqa?Z0+wPmy_if716*&FZpnE|QFj+|SG_ zr6}NCKP>BZ`DpCqy>bUA1JhJf|DRznM1WsFr!WS@+t81rv`Ir@3+G24BRWq#VyKZS za}oue$4rM;B^*uT2U{**pP`|H=0|GwsTNSenVHo2Qs>ap!#C)~jp= zTI+B_tkHyVI(91Z6$OFEOl#C0Uu=E9eM7VmU~!?OlRrebeIeAZWhLQ!44fZLcpE?9 zep5UX>Y$2gqIKnv#too6^$G%oo0Mos4fD43@mSiofG^)CX*;^=6!Pq{`)tWHsc925_kaif?}@>+7)3*4-GCR z+EM)sW;?qG$HZ`6MMVv%`+_+p_unaS(5YfNM6AqYO?qiPdT1U2xz;5OqJ_2{RxA?Zf)hVwis+t(9GNde>qdIr`Gv2pd9r*x zO`2f&>k=7mXXYi8AemXDq1Xj9E~yTZCo+`0n{6rlnTDH<|KZ2m`!RMDmr`7=Fky0i zwV(S^5ooo>G&85{!4YC67HGWUloFLpVTA@!06gZwgL}4<(}ApAfu2KE^!d>ZEjOdR z)n&Q8$}Jm3n~xOzuMLZYm*Rcb-;t`mi8hu#c?H*IJpNZ2fpsM?UXPS@h@z_Wby5g7 z+cOYS_iBsz{j9Sp7qzIziR@y)Scdm49Va>Q`(#eV%}Wfkv&dRiH>niHGdJu?SNuClZsdZ0dr-Ja8s@kNs^0BcJ(krIGrnex^Xxh z>8w^clq;2z=w4f({H3n7z%lE`CyvO{G%e2-#Ro+vf-{X@wU<=e7OJz7QEY$>uTw+C{dN&}2*_x@V(`>iMWgr8@*9E=? zhu~A)M+A@{J2SSDBOY?I++T;&+|y z*?xiEDr$US9--&&eP)vw_q47ZITgiCM6msoizL-Ih>qf$0mcFr3E{k6=UrU%vy(o` zy(w%azD6SG3M|n;-#Jp;-SiYuwo5FoxelSwIT3&L%Dj$G)YV*0SDhr*8cs@=#B+o);})-noB7U^k~}ad6iT>+@8*sl7uvNgTJ1;CH0-@Uo4Pyb@_}G@I2? zcfyVQ1%jeF;3cYC#QmO~t#jUI1tB3v8Y=INy|}@(m6Wdx+}x|w4hH%yyefB~S(~^c z*j_YpP9*+}&<+{n=_TJ9Q&W;+MwoY&r%Ta+Q6FX~edO@!sf1&!`ASqy5~ zxogcXyNj#17#vMntt@nw3o_O#H6KZ1Imqc|T8#+;NyH%=J543d7F|s1UbFw0&ipb6 zC73#+UT)S4%7;qY3<0qa4-z|~0by6siR1Ajenz6za3o_c2+xq)7w5tDArnRz;*h8r z;xBgN$4%-5sv>dq>lkd@ah%ogJs#aDA}6L-VB9j zwx!(a5TtGv%j`A;^EiXdk3V2~2WfzL>MqY&~5vt83?xP;~1jgP7Z&T{HC(vm-l z&%l7FB3Af;YYMS^s3K32d5Yv6(nT@N&WG_+F=N>o+Cvmx_@1L=w(mI;Eb;;U=7wR& zYcy{irKr3gbN!qEvoPU)nJ%t~7t*I`gF*uLHn%iZF&Ae=3(m|8@69ePy$j_<^wOI# z6n&=rq;7S1F)NeDkyK>y`riHdH&UV!vD=Lr(bNuY*PD2qFYD^Lr%t6|g^yGquQM$Sd3CDJ&KB3BT^pfBd8ft$Lu@w5T}OW)16!bA-y)*a(yUuh9aDs;j7&jH9b^% zjc}jvd#ATFkslrS<~+No&<#_Vp!pZKuSg&-f{3CKx)oLjT~6;9@s7X^7gQk0&@l4 zdkAbslt#Iw%Pw&qP@E%#B$$)0OeWavm*H(O!Wp!U0@Kj`8x}nB5E&$PLmt9M;_Y*E zeh~(6P^&esW&HMjX(HBmV^R=%pUkf|tbup4ujfV*bh4{c!0?#e^pHn4F6-;eaG~5T z(F^5=qaw(@m`((C+i6v{O9MmhDz5ePH-0;fHgyAE;{p6Ox=-|6x51cBvVvZY-uV_Vq6iuQZFO5 z{uGu`%g47TYWFKnGe2?2?`7$F=A9Fu|ogwgpxHRtDVS5Rl{6O zn1?c69D8xdLBFPNV3k$XKykMlxU29l1YH}0?|A^*tFb$+K7S(o~2 z(Wri$3n#`flhGH&zNh2UE4O%k`HAohgXN+)#U!vnRJg+_neHVg6*CoQ@15CPV%J;= zY#4Co`NLP~q%^R9gF(1mr%+}LvvSi|2r8M$m=8i&tq;~d2~v6;Ia0m&<{3SazF_|! zbIldJepbJJ%;&m{qTDd^Jj~NKJ0{(D+BH>bLEPmyw(c6FBp$8 zUpffm+YLC7{oGDmg?07oz&6*u=c?~MKN&+{+-f(&^~shp_r1lG+tC~tI2jE5aG7AOh6g%j#@AY6ga0r0pBIDP3c6w#J|+fH*NaKW6gHq`iHcRnQQ!b8(sfQmJ$;WW z2z31Tl2)B?vd|!KE{4&3Xp|gdW&x-BWVrlx;QvR{d&g7#|Ns9S2gi1dWAD93WM&>5 zA$zZ5Co(cpih6{|9<~>QJ$Uic-|lP`}KCc{{@dh zT>+Tbtf{=?T?*ZZTlZb@QCY|0%|`+w)J2@taQ8`Q~P zSdcT_PRvP&`nf+-g2y;vBdsUg12C=UBGv@tvfIZX`@-9pdiR#2n68NdPX)s2Nm4Ej zaW<$O9CMs-F_A|lzOmPU2m)FI2V8}IHBsmdL&$w{BQ+7qes!;X8#Z_Yq5w|<0Iz~E zn|1H59;k7wgnXY`rz+O=h+5jz83{F^e#*&%S3$1&FpihfUCdW{`X>J;tJIxCmnCW| zFDj{a^1N0B(14E53|eKQrXwClhP=`K9fLuV_DQuKuVz^aDqn672$@=}t-^Xy$JK!E$-z z%qBYXyqNk3XgPowJpWm@AAN&A<~fh1a;zrS*Kq9zX8TW6Xlx0u034J45yl%y+W8qk za#1ey2UW9^YKd+Luk59o)Buvt-c;TdA0__dA6Se5RCI{s%}gM_ z6aOfvzBf6e>!qdQK~BJgQu1WKJz2}Ay9xF0)}49)ERyW@px9uAg!7gO3-b_MivOFH z?_<>5+3T1OwvWG<`Yt}ebgK6aTvATlzn*>iW3Qyr82@dm6J7Z10EKdG@f(ZIrS2!U zmUZGp-^aC$${3bwusUto-@J(_=##pJ$l1arCH61GeMSphky?M9vex&FkrDt*1mhPXGcLKl**j32#;kYlY zo659Ocy;jVqC4RT#GMObc9DKN;aUP|_uV+Y7h%%Y8X94f{mHYG`%Tw)UQNv~E}>FZ zN}VNT=BvfQ&!-@Bz$Y(ReonjF6#>aU{Rq%|#@hp!8-OTT;geh?Ox0~NC)_vQrA85n z&WT)p#^29H6?{)^WB*_1Wff)M5)?hM`wtEx*HO_pgx;QU0}u4x2VQjY^ifYeEx~I_ z=!j=wW}^N3(XSD|;sC%f1LI6TO=k$FYTozW0m(0-C)7@CjI+3dO3-zxuo>Kcj(-Y> zZ84cXKiMy-v~INxCX-C|9W88d@!wylT?SwIV@&r^rf{$F!k3pvKFL2*q6MVog7x#H z;>?>h5)j~yM3N-UUU^hGQ^ZyX8x`NLH7p}o_dfSfeP0#0`ot~q`@_cf`UAPTNlRduqH(9esSF1J-jorVmC@tfCy7aqyc z8j0qEg<5w)F;<&3N=zr1c$J+u{MGw`qdFxri~F+A(o$?mXwA>Xf3m7RF|;%%(P$ zWXNrt6M3Y?$)W3|bWR>0s`Ry>2rk?Qox`f>-QIsU$36*&Y+Mf$F|*Hy)xD#$;9{lr zO_+boqLV_8*=wBTRuj1cN5YnZ&MWw z5K;3&pONX-_V{jUZaJ2RcLB&july^;)I}CrF?zeEXq@09gRBpGgCKUwnQ|%|6)kPV zM@lcwK4WZTNy!fl2k&Z&S`uvyg4+(aTLvpVOxOoo`R(6z>*;Q9;NKqW?e9U5@^``C zVHP`NTWYTX-opzE`{G?nuFflu!=lL{%$ORNk} z)LAre8XAN^yh@s}EcDvUAfWn<8lwJ+LnJ~kM>;d~pR-eu+B_aoqwBae|6f(&s~cV$ zP`jhDjdx&y(`q0c@$02ipNOKJ9Oj&7U9TBkFO0?|K|)>u4Db`gF5VgUw!?x_nNI8( z0GH2;Bgq^8bnTE!>U8x^GZ~W?!?J#g$~{IAEOL{N7H>B z#rj1`>r^|WxnH~;+p*h=dB8?Bp!dFtUQd{kNbD8glXatL&uHef^;QORj7RP9jRr`q zzq|N5c-b`RzZA(t0AoeomJfjCGWB7kuL%l&g#Y^g4Fi#~gZ;H7KmPDBWlez0p*9XU z6RADYYY>ZHmH%E0AUB%k5-;Wdm>&)d^|5>Qdzw)K-587x*IyM`AOg~n?NhD~Ut|9L z^~|61WEI%Lkm#T%YEz=DVfo^R_W#j(ofx)Ns_cbP%W&l|nm}#^-%V92f21`hq-Ic+ z9ToZvj7+@&6+IhuIKyPV!mh;yPOE-`S%JIW&y8)AmvAfP!-Q=+X*wS4B`47Y#{(@n%&UAJJL zUK*E_SyIojp^7T|@ROQ5ygxb$$;Qn?SU24fvyk@)GXKW5s}+<)3qF}ya4MXJBD+>k z%Y`mpgc3l-kYCLGYLnn>^ig^_NofT8@^UbrB{PIL{vZ5ChCm=>5Q&Zye+x?Du4kA( zzs3>HIV~#hQUgLC{Y|mDJlZ;Oe}l$ciU6VZs4THX+v zZp*)&Jo?2aKs9>!+i0N`DQDmVp!f>V>F;Du6%n?+=8eHOSv>}k4ez}lA*bLTfc<1? z%BI%~5d85=d}GTyBb=0`qbsy-KA2=f>fYY8^YnS@Q1(UxEAEDkYtn9kfK+OS_V7;` z_1l#*1u}(TKs|IUdNL9aoGO#XKGSJPi+`s+7uxZVW=1<-6|VBW2Y8b3p9%I{q11qg z3{D>3_9c)>gx#L~V=us#AAyp1XA#Y+U-IIow{W4>9|2lLf<2J|Tu43dL|1+;=D=$iJ; z(Om*I&8SxFD$4uBMBOTil+I1+cXhp}g%3yoxFviYtPdOSVi`6BVVSb3^+@c$Qq~zM zB1!ha3Zh~UMbl%>tG3H5Sq**C5DUH36F{Bqqla9p73 z2>g4eWg)`urd(8)awo+@-j4IPdPaYNfD$*-)fAnTa3xfo#f#%=Njt?@Ry*I1Phz`Z zjgLW;@^Xv{{OyL_w`%o_GZ}Rkx6{L!EG7RjkoRzoQz;iFyG(THu=+zj$h?#`%H;#Y zSutA{2`PwD50oWKw=I#U`+p!0q?gYA^75gtbRRJ|xW364QooEQmFA2wDL850BoDzZ z?cFqCFz^Ret4UX%Hg47AmH3l>DP-ZO#0VwQl`N!6w{v)>A{rcqIBok3fKMa58HQLo zizQzKb&ze1Ni}exa87ptz8#Lof%FM>U_ML7QMt?P4qqRj#FyVhRYrqry9B2@d{W-; zV?=}B+5AC&xH*G1_|h{T08CMX!{8p5HJctzOl+VqIXF{wXy!`6ydVLCe;rL{r$QzU z(tJM;7a#A<^f62Y-F*AmlAE7o{j7R8R|@b)Vj;EE_HP`f_+S&Yw-1YEE_K+2Jdqoxa(J~8u>hIXvQW91h>4D(3SSrY7DyvapNi1h!TCYkq+br zsPWWc#!1ej8^P3v@uWXvOmKWUY%HUUm+mGxyJxUbk{^Q>FX@|gpuo6XkZq&a8fnF< zZs~DE*wLW-g-tB4c{OpZif_~EBoyoU zwRgq5FgaN>8u7apl3jj|SpJ>D#az}|RbLC!m6j{NOi6-<)!!Y4LQ&kDcT<)7d>tQo z8r>&5qkKU0sKSBby_Q~5Gt3n(TVuFG8)1?5UXw!xm-%nK$lc>RKbfqmjd+R&zL1_# zexx^h0NTNMtRez)oVxW~;{xm5k%*qS>YR~BA{hBF3v^1IG4w2|Af@hE)%LuecXu96 zHnOO?rF6Lb^w$#x5^wI;_=w|-d-Bzw{eDmGYae*;bp<%iLwjqT-W*V69QNOKhg;F% z?~sz`foCFOSPJdWv?=pYm4h=g7;v^}jgTnRgHUS|kzbcjt9{O8Iiit?tJ`Bf{4g1F z=a+@TAjSt*OthR>bmQkntLqv~Vy3?#3}RSd@^=3c^oxKG>ZWy&{xFPxk^gJ=VQlas z_zE?aAOqr>vEiHcBfLYG*$vU#OtI?JwEZkCwXY>IkJ8uW4{alf%jjjxdyo9)3Lr*g zNx;zMre-P`Q8!94IG!ysK@jJQNt{=iOmnfg<{ei04ctb5D5G?6YPRQ}%d8B4S@sggw1oN);gz{Q)1kfA&D2;Aj+qLBG z@ zZ**tAo+Mw^ms7BAk94pe(-XK;1I(-ORZ5HF*^uWhv$*XBNZ)V|$b>D8NL5R994}5u zBuj!ia=kNczsenAgc*KGgwBp{=07fsKd1`&rx|^ueB8)qjBcNfI7C8yf_(iSg9ku7 z`+7YB{>5u@DAhKY#x>RJ&$#GC5YiWNhNUI+NaT9=vSH9K+7e@7M)1Zz(*jB(26t8o z25q`D>V^bPWtp81;PUYl#E7!iPwanJB$n69J3g;;okcrr_3BrO(6Cxi$^G~)=j06M z5V)w5yHl!G{CF-X8Xs+QoT|k`9P3*;>clhO(hu&$foD!*DV*c zcl+HaG8%<3shm?Hq-POiM0l|hdElji_1Rv`biC=moip+N(|6!|>B{#8JOo#OO~Jzi z9)A3(yvHhSSuiFz(f@6MW1}T_O2Z}(XCV->Q)!eAYNgMmU?SSFR>ll}lnBmBvm~6) zc;P5-2gNt+X3SOW!dtdYH02t5-*7E!t`>z6n{n!sml3ZJ@ zUM(mwv{{3`NBL3t?R%mc(%Rzsvg=U){81XC3Q|uIAA55nyP+!v z89H(!3Iy&H;4FzXmtL4U63LhL$d-4gF?)TN<4i2|OZ)cpDF@1tViOS)v@V}@Q(nQ$ zL-hn!l|hBo<8c0uW&}|bH}+p!Zc8O^Uf4}oT3^?UcuH`v;{>!5DGGOh=O}x?7C1Vw z0c2*NU|>=X4S68ea33OzvHy2EK%uk=xj9;kb$m_mhZTll#XbN1VuI%x?-sZ$dWO-U z680cmK3e0w+1Nevqw+LqG;?x^QtG)Fxi2xfNW2W$>=dGS(}ncyGm|&04I7R>HexKz z-Pz<9=Ze|aIKylQfVZbw)8YeY;hUj7jaF92`sIAqKuB?(8>1DemlN&s94B9tlS z8au_mT|LLyII?k9|3c%Pza<+{Tk6*9Q3j%~#cQ`1MYnTbYsmPFIxL5Z@6O&y-Tn?* zFQ|an5p?)}53SDiu&PutAgre=uP)$Qt`XQ1SAt`T;vy{t`bJ!XHaCVDfQktg-zC(; z@eDm1qN}gPgnfP4#eSRlUS7%XegRHLaqU z^77sW3!WI-IB`d-d+vz@kHnWLj3oTQROWj*a+oo^r*);J?~6{ZlDf|c+2S=W8dE|P zqp4k;_N`Q_=+TXlgHpDt_6?75^GPeddmjzbpm1EvUluPj(JUpyQ>ab4fEo_`cQ;T( z?csn(h7VCM^aTnt%F_SvwueW92Siq00Hv9k^?Qb7dH9x(VN``5N~1EnG898ni2sjl z!!I`Hf4>iWpjOj(H&N?owdY%1=-?YT^6RGDzU!sl>;$JO%0(4GHougeE_gSV?%rq1gL$&rSZ(B*4S; zw0s{3r4$UvC4C;Z6|}F%#JyvQ#n(MEo*;YcY9-GBBdz$#x4h-zM1n+X9eza?g(1yB zxistW>Ya-wwFi8D@}SG?D_6|*_QZ4ZuinTzoKxDPT2H`~!GnmKj2Rx^uGwPlp@&W-w%gbR-cF{2(Uvg9{bKSy&&7l!rcd;1;ZlILhtbeQlD z*N-yT2l(nMGk-)R%?dV$l15K}JM-D)_Hz~p&7j|qf%4P@m;Wk|H1w+C;B|sg7B?;# z`BtD#0{u8QjHUhu(k?}W_N$q~Mi|+|7G4ihDo%4d^}lJr*y{um|8?G0{%;jTHmBp!f(Ldq%_(8L z@iT%N!|{>QyFpKY4odfh;_|wQs-ihKcknU2cj+Q<5P{HB$6F6%Xv9(N_KQXHcU>)O z4JK=r8wO$Q;kiUJ^^QZtQNrX5vd@|X9vdYOqbyc!sXwF^62bY;z4`#UbUhCS<3!$$ zM+0e;mt3;eTu+YXDoCD?Dg+!LcVa=dE(9dXpp|`p645@_4exmRkkKi0V`UFNVg3Wk zP5LjIMV0x$NAQ&7Cwfve6lSOis=aF*WAOo_U8 z*YWLI!c@un;`L7h8)3}3E#!Z$ZZ1jpn_NHg{bY)r0ke}%XG|GhZ{qw)PzVroY<+ir zOScX(QrJ)H_DpX1&DhJQE50KFewu#vDHfvtI}I$W#IZKbZ$hqHnSbC_|5IZ#sB6(8GG|Jo(a=E3U z4;ZZo@fGHD2}C)(9lHm(<->x`-j_W#!-1+RVtL^3TUf{N4NBE95OmeDQZFClHfs%z z3wxYcGXpIz-5n$!{xpjG?$(&81guAcp%_hr7vq^Oi_m~VaR-P4^?x3l!kGvMj*VfV z2G6h$OMT;MefNZ#kN83zEFN+ruVY`r{GL5C+C|7d_o+^h;T{3@hkf}n+R=pHnq}!g70+FhI-A_AamjZ!fjJd7NWLFiM~?Mq9H!qFT#tEYDkDrk z9n05}kjEaiPPHVR590zYz5{5K-kZ+fBf~~?mEsxTJX*Cy|4A9`0{Rc;E>zDgkOOP} zS=WrcUp4rD?t)NVFFI!zRhpZWW7}XO$x4d_frDa}m=rE-!r(hs;OvT8tV#oTbSF2$ z3O0VOkFPP-GB&VF^cRrf^>IGyqvqfh$bz`vdMcZ#Fv0%Q{OptcisuDO+SSoJcHb)o_jon0B<8^>I!+?iO({)QzYIvvm%(Yj@WV}@ zUZBqizRewJ9Y)@{p=8GO3qYX+8Y$Y!1&=VWGt1@L2LLJnH+kk7*I$Al_!t=X4;1Gs zdW`TlaWsdkl6xEAE#05lJ8rQEibwUnLj$VrkP8vw-L$1PT+as#=Jr@YTbwU zOqEf7m<1ajUQ{T(Ry$HoyZQpQdeCDeLJSfHi*UCUqJIn;8l0T~jG_RM%^lb{z=?Cl zlLpmxqSIxHZJ)1IUO5KIenNxq>`ZZDTF4Y)#7chwt^y4Sy+As?Gk@(+_y3;Ws;+aA zZwI=D>%SrTIT49(n25Kof?5arY+(G4&`kS95?RmSPB#~113N8Q2GU_`HW%pW_-4={ z{Wk6LJ}`_-AgV?m44Z}tSlmiJ>Lzln<}0RXsQd1v`k8Rqhf90+LkvPb3-ySo;@dL` z&Yd4wR(+X=U|mAmhcbcrtMUwXVWco8YtcWMv{~nM$IElfvPNmmrTxd7I5UKxjI@=4 zEr&CYd)4}?X_&64*cL`pf5q)1m_X|YS2J@ndgnYw<@)#L=RKJa;4sAdqrTGk$W*+I zS&k$;S2m@p!3U&r9j&*7PojqU&QTf0q)zc+DJk%8uD~v$)j9H9CMoDQ9~DpOW8)E# zh8@Tk45_F>=qi$6)^<*$StR0)V~XX8@WED%j~%M(ACEka4wWQV*YcJz(nq%Zi)g-Z zd-vSZcn8n0EoI=rtQK2R+7XzKC#s{$pX51E-geqD?7SxoISMjJXozbd!d==2A@vm2 zJD!f?`E=P&J=fMhb>;a!o)w{BQ({)7XYx0~Ojph653>E{J8JUi0S%uoRFR^xp~V>& zK(s?v+JQ2X5LP?1tJKXce+%TH)B*UyjKJ1j-0|;TD7z0o*BNYO`*(X|71lYzQeHbC z&6ku_F~^)q3>XDJH)37p!lQUF=F4dXL+JnwFuX0 zZ}rhj+_M_4D@A?g^u#Y@w;uN0%|PGl0WVUe!+g8fK@ zF2E$=h_vbuP$qgE0P?v{M^9)m;%dS;8)C?Lcx_2!^c42fb62ne=1uiP zAuTx1K9AG5^SMF?L-)&p_xxLwgX57Sx6<6?{RD&v=VXcAY^5W!z`i^Ml#-`OF)yd) zwosFJgejar!1Bb(1{Fl|sIl2&aXRh-ja%ihSQpJD=~OyAsS6PgI4~(tkj*I}>|Bc= zIsNJL$S{BOCSDdUE4=#N2HWmi(2I^QLrZ=gq)eN9BT$RkU;eBN9B-F*>UNFmBm2n3 zx_GyqKtFJFGmh+2?sK2hh2mW^Ip#OWd<2k&+PLGh4DB({OEbhn&xCDqtcK(;u0ygd zMdGQ*_3pDYwkEC!dUR-UxDwZg@ktX(q&y(_;&@-&Z?mjmB>#RDA7iAJ=j(7hLPn|h zaMaMBu!k6zVy(nFU2=%9EOx?0ijH+~vv&Gvrt2$xSKLy$Q<@1jf})rgoU%kW9!=J6 zt!D`qUi^pkh~!c(;a_+awAcs&_giBy^pbwR!1SxYFdVL+l*(<3hR7Dqj$UG_{0I*9 z7#hnDSYi}2%0Fy2*eqG}?TrLHTu7rCJ^M-`8h{&|xP}|tqI&E> zHRlft(oge8e$sfbDeMc#nS;-5CxE~)o|t-T_bx;(ZlM0o z$DN0tnr9Ru1ZuB0vZAA>Go|h`L!eZlJGpL4MGRU`82fH!@`+1%Snj0dTIE^g?;{V2 ze%7f*FP&2VExI0rhEFq|3~XbDAnx$)=KHgyU}w;vyziyt8RU&MaPs>&u2KEv9aaG8 z5iAYn*GKwp@Fc7@0RmD9Q6^WGow{G~CwX zz9%=C-hOM))ybV0m+hY5R{exAlUw!(%RHwTzob{%0L`o$gX<IhYMyKx4!D|Xo*%H4quyb{ObO3)@8^1> z+Tz~0dr`89Yb7RQ7KvIlqTnKuMeGXlg48@C*uHTM?gw~AmJJ#bGE8D;_tRE5UQM0o zIUn3zDYf~)Ww63o1rHQ1_Z*oPGS9EfEE^6>X*d#E8(OI?A&>od^D^-rQ$F6LdSmum+Tc!8J9k$1P6V!UPcYOV-_Iem1fR* zrLtL7+lXoYMLu8Eyf{>-_WToQX*FvJ{rjap0A3&whPFPf4rq;1+9_oUmI{ibXU)- zg}7pJ{>>9-+fx5tpEuSYTFh~Q5~Vq5-u(giXXu#(9q}{))RbFGtic>+yX7_y6LG79 zB>Kd2uiva?7znr zR24(|deQ+F^bPIngUL@V^im9esLhZvW4z5@TWvS_O0m_(D+&Fn)>KIciR}sfDau1d zAZ8$C&c&*E8oL;yNM#kc1c_^soJ{qjnz4PoyQ#1QO&zFl6-{C}3zf_qnD`@!wfa1gl`eiLx4}t@_~FYp^Q!&&GF%HioJw%X2Bby0#5dKEntl zO-HQ1Nc=yEGjF=kNYe_XIsoWh-^6q*4;UEJds2|KN(1L?40y zpnoq%ypKUAKkbRv^B z1~y6A$nNrqlmf(RD`Flq_^5oBp8!;=u6wzed!pQrxqd}pPA!=RXul0+5f@l2CKkRo zar}E`XiSaqacpyXPT8zr_7g?(nkfGg(Ov)l=vQ>CWq`(cRRTQ4&ot9tEgn zJ2#hIumd8>vXvyN9pq8FnieD~DDA~{jmFqriThUl`(a00n6&f{U6viMm>?m-dJQ5F z`H(yqlV^cE?n4d)1Ld2~ds=rX?$z$$*o4EAhi{B0pSd^+W}xqY$HglSPRGohN?oEq z{nKz_dG8%U|HsPz+@hn9CL$0~g`qz2f4Frm)$T-Y5x{R+vJsKaV`f$9<| z_C_W|vlLsWPm-knbC7&Uc(Rp+G)d`Q&Bw5mS``3tb~WHfPeM6Gg-{>-2j9nhHH$F7 zvexlF7E$R1KP&9}+X1}$pzx>+OCh1+`v?tPMDZKfT1aSFH4l(06w~`;1x+udO+%b1 znQ|pFkM6>+(4`TKxA~`{YR^x;P&S{<9A-r2w2=nfGaI7aW!9~b`W>I&-+6oz2isxgf0nr(!IhXgna@k!0xkGBMq#NS1UHa$A*RR_XSQ5@~ zc2T0v$`Yd?zp1Ldf-=g!pWqS`Z@_yv$0%md9f!KIxQxT45##wA?ABNkukN2(bUWGf z%a`mW=C)D%Og++u(G+~JaQ33=+$o{yg=}W)X)HR2AUfCsrF;=0R8_OfLtdMzSVb4T~7H-l%1h%>JTT#oL*$%m3hiX zDvl%2pXmPj&ZewbU(T1*$AeR>ONsl5aet}S%X84H3^Jd1`g`)$`vQf>UJKUuI2?Xz z@B4w~w^RLl{!I+&MCC+TXkuFsH3wB0nhUDQKGv8RCFK2(IfYNhYH$_*dk6S<@C|F5 zp%(!r|HQMO_{jYI2+^K;h=IB-#ugRld8}N9=<*>C|JD>^NBK8{URU!L&*MgMdBOO@LY0=VjB~= zN;ZpLwVZeGGqYBgKxxDDTgID-c+!LVvN&-z4vd zq^cj1a*1p0CSHkT%B10Im1}hH>W9y9=IP~;j4X=J{N9O2J# z#^mbm8%qM0WcFi%I?Dg=NnQAM;t+u+9}wU6j4f#-|ZunmJ5Zeg?>jR~@ti5KMHm4{wfW95-Fqpt@o;$NZWF3Z>8f_{;G=m;)hSF-4U&yMY!jG11p#|Dy56z zp4(n?eB#i$(yOuP@4V-Ia|>`PTsF~laNc@{e`>$U-Z+C!Z(pY9tG8{u#^OQ@A=7bP z&@;;u-quv^Oiai&}?vTh!e^aEtP%XysZYJ6wZ(47-n zoCvT8&mWtThjO=PgHC24!a0WL3QXcUUS&}W4XRK@F*r=T9y0;gY9^IlB`Kb~R4Bt> zxr!Q+vJEgkG^}k|Kj!2KDS2x3L)Xe~?Y3*wN$C+_$lr3s9JFTxwHzJCyEw3GhyE*w zk2V)US$fqe?nJ$ISK>7`Wp039<+!M#dCXe;>Gr&+PJN{WpxD|T`29VeIDAVRcK5S2zyKHsmxIN zyJ7}SF(7aPgN<3h>2T$L{{gZljsnfXid$*9%?$&?Nun?9xeYfge2!85LyzI^@B^-& zdCo|UOMJR06G&1S#q4R>3%QYUZeeI*HUbwSsJdeN%A`6%O-xvq*qu<4ogkff))b)@ zw&4~z4E@QTGKDkY3NT3E{vb?wFz$sZ`M%5U+fT&DPMj<5ptkp{GG3WU&DVD@e?z8|4)|`nF>y}p;F4T$xePNvH@*kiu)?8^ zs$m)Hi43>ue-H1mFkuL9Yc`~+-bAp0?jaTG;A>b~YoCk-%nsQrg`>yfT0`9pV67xK z0r9J4#ZP@-jsRN2y&`DS>mWs+5|H?agWmp^||wpIlz8sivgCacXu+ z&L}r(K#fZI51)lQKXt1+?qD{#PD}T46^N03*wN?vm19!sxc-T#6Wn}$RqfI!Bx&Jf zbe19RUo?qhBabyO{~H2LS$zcBJyOkwtB+dRS&?liUSz!Ad2x!g zSut+kcD_VJ5K2(-T65gaCBBmEBw0Dprljv0pQebJW`zs&T}K@vRrWr$yedjgd>Q$s z@jJ^n1(}PYnjL7cqO52V4htl2SCrMlPAkNvybKu?JUwP)eUV$9MS(hf`tlVXuo;ms zo$_u!?D*%CkCEce3!czr%!s3TLUEBX876{)G#KnTF+&VrQ*Ap-VxMLYE(MA;O%mEc zqqKT+;#8147rga)oJul*E&N4XPeIO?$IGw|PCDB-^&QcvPgu)Ji1`FE+iQ>ctGhwB#9rsaxr>aV}Tq*;1t z5oNFq!uv&Flw=d2UJp<=Ils)mdiTIUT&8QJoWm zb4b--NR$`$H|#PuP^PqKFSkK+-FdV%ha$I0q|Uf%8o0N(4h)|)g{0r?p?LXcn?B|r zBz8c+xDt6~L|KYuh$zwlT@`UV?2rE){dKw2(aqR*HY_T_`%Bpt|f%m{pr(N|3xLOgVvfGxz|D=hm;0sX>%Hd)hXJJy; zsVY=obw)Gv^eqM++9=%CPGCNjkYexSY;e8lUb}ZPFjkSsmv(VS37aanU7o_DGgJD( z6g~QZygcMIY&e|pr$A^s^vl53>hUY@ukQ*dS1?7D_UJb0C+E)iHa;Po3=FL%d-%(5 zqZC3sX_qvq!V1cCfW{k@R;_#gmYt*{$ zxdwIE;%(8-iQcS9(5F$`jv&hzRCT^vcWgnlZcF>JFv>h|6VY|GI2eP`m<6YR6V{+KvjfHGob7yoxt$A|xBTA~ zQ{p6}rAFu9W*)r$?f3cjx8QFKzvbL0JdXb>P+sbJwqSSoF?K&JDQ9a2dL5Gy3!PXLbKk4O!9bCM&p!ND_eP3wvd$?0fb8H%kBgFfP@o|D}df z%jJq?&K9@GXdm*mwNayTA5Q^vawa2oKHH->@ z!pI+V_8}7QB|K`u(U8xwsXow1k_$Q8+R^r=z{1tJYc*PBDN0uU&q3VAC?_SKZ1&B) zv0{UnDkk7|KYP0Re>!cQ>}%#8Y2nJZ$uH6c{`PjJvg=jSUEmw#D0W1VbQJuivy+xD zx27QD7ge^U_fW)mG=1ZH9oH}4P3+>X?uun4bWfU-Mrt_r!=|MIihMw>iwjvnRyN>X}?6fRzr^x@x82FT+5$0Y3 zCVw=zU?*A1{PW+^hB{0CJ+Y)*y#ROe83HCs+8MRNG7C(>*ea~6;1+jnbYZ6Q0Ht_n z+=?`*W{`2toc16n0Zkq##+aDl2dWvY!`u`sfn9i&5n9o?mPFEmD2z?NemzSVK1PWv z$;2~K5jh+FtiA8ko+M)}fkgpu)u;PwRnt%shUgMqE9Oks&ofSeLJ(QcMiKdhmYi%u zRa{U4!{jI?^S%qydvyYYqC*NjXv_9%d!Ng~lMz#_aJ~C(3PL8gU z;m54XgtF`UlzTufu%2TmAI$q+{iIw}IF2h&x7zxI?7h^@V-2$MJ(hvSwZn}Qq>q&5osZByfZ zX`g;{7Q)kKhhY=PSsrTAH#7nrmpRxUvPvb$yYuPIc>+d?7i^*i1&x9yy8l(o@ zj~2D?-xK{rR{tHQilW3=21<*r2s^=;T?`c0rnkw67mK~eLplkH#RxYvD4`yPdvCdb zHDKJP8a?2WR_{qcT;i^^EcYRkp}M+m6^7Fsr-yB^P2pNBO1Y-@m3xVk_h9K~~;vKxn*8DRBPl zKV{`S-s|W1oB}6?##22e4a*RwVgjKTn4p&$35$EpM+i22^=HU~nmmzw66bm&=T1&@ z!;zEp?K`+J>X2^eF&Y${LX{sTA?0*RiCiE>QKF1D;@2HWQ zripCpszK`;8cWz^GqX#2kmH5lAwyU1kJ07{k7J*#1_^whc5#WO2(#8U5qsF4rF*gR z4uVg7JwdnIDUW(W9t}hL}X9Yd36$e#Kd+Em^y(&l;rPhf&`U z6hzd$7=DIbwM#(*7<9&p=H(xu@yak91%#69%OsC=m)>mERWD-OCjmr%%RvjIe)0S+ z&aexQIx}Uk+=eez{2AD4VCWr=p>F+A6K;{P!G03g!f(R*;rxC(uJ9GkQne$;hPp2C ztaeNqjOy#mi|wUn(9@d6-yBaf+i8EvuIOFwVJr}`?_=#bvta|&y$`Zq6E0v#$%5WE zUE&yoPc$GJj)&xX69<1JFTVsReu2NeDqA8-NvS%-Q*FRM?wZGObTiw5+F*t$7G2r0 zXYcFs^x1_3j*Lt%N5ei_8GGNyC~ry^bg-Q$%bZAIM&7gv>250LyCcM1)Q9}OAI}Z6 zFspu(S>3y^Uk&+v$aXf$@BEGYFy2I~G^zjIc#$vV+HUg)<@Pj{C65*x=BQ?XkUhikjJ4 zFAK8b=^;TRcQAmQIKGy;|jTlQoj>LU`j+@ zv-xp6|3G9r%kgDS?hh`3qwL{-D4kIS2P`^RznS&d^QbUN(FEExz{G_y#3vGMJmY_w zep*w`Na>84vW<9jW=b`PM9^|{r3q|s<28NS)GILARrQ)oh#!Bv^yTvMbbvz=(P%2E z`C%mLUj3fxuIecrD}4;Q*h2NeK8Awt&dm~_1sIx*L!)ri>~%}MPSC2CxR=`beSfSn z!46lKd==ZM4bfs-!@y{r3A=Up)XdXb%6DX3EbK;fa$xZq7RN-|c_y{+E-{tF`IZX0 zIy20J32s&*1Yv5(QOBrPLgYkO{2Sl1zjjJM+Q~r~VMG<=b&|B@AMX)hHXafUM!r~y z-}*FpTuG+=9IwhLq2C7`+!J)>c<#8QE9un#LvxPUSskh{cqVmDOLkw=X+_IsblYFe z{GL{O)Y!>{ayX6XM`u&6W~vOb>c30=7Qd@3*QhhtE(a!Cb5b4ta*=<9sf5{tot^_k z4jCW2{la8q^!p=TCCD`v16*C2>~@9n0TvP&(Id~wYxu`LBh#f;IFa+S|5{2JacfTFB*(1%X|48+f8U-g&@D-Q%oyKWkABMj!JNzk zzD~OTyX+B#fnmLVLZWIi&#f04W+@HtOxG2SD+Uomo$zaU|2TRcjD&JF;*s5B=;%av zUgSez4|JooI81ZZi<2oQPu!tc*jd>3SBF4xpJv?tooJGuol*13hYzT7nF0o0MvPA$ z?Bsu`kQXx}^?cCE0gOBlw!wjSD&&04X`VJ?e|fmW*Y0fCT&$m!;3|tNZC#z`bJIXX zg*Gfv_FFPz@AdWYF#(zJ8iM)%oO$?a5-3VkGUL$_ca501zl&=c#*$dG$_Od#@?`L` znkbd~3_QkLXXZu@QiG;YVyLde=@{h?WT#k0^piPRwD1eI3}&e#>&sgR2rwJm?qNTW zu6J~O4%wz$NxBKn^W+pUEwB}QUQzX8bG7{b9CitZItycF+g-K-{Qd&Kh;x8u!%waD zGWyX-N7a#^W0KG=*yF=K3ZsmtSii&LzJ}n|l^!*S+P|kO)x6NXvlQgx8AaECB=^Yv zRAk6tVSIRZ`BhN0A(et8fn0WP_kN;9^tN@Jm5BW%-m!=QHTea&^OqA9m41g@`mm%Wc01etZwMIV?S;*TfTw z*q3b6(UTH-eCsJwX%xz%|8#h2N1e-VHw0_v(BJZo9J|_8@E-+4*KY~t`Ss%mzGms1 z&|=%(%CO56j^ejl_H!%kDND~Tru^I_#2vhP%}^LP*n@5nF^1mw3VKq1wTAy)77<3u z;5$%#0~6MeHB+pe!+UT-#KEIt*Rfq%JqpH&Q0&oXfBsHoN>EH zzr_$57ER90{1V_1OjGcTr_>dwri?j$`Yz?D|F$fx{^zQj)g8S) z;&Qz8cP~C=RC4aWy!#E};na~V#9l`hWLw?;DA|9KR?2ZYzdkCrFv&=XDWd%_ce*~X zd~`uUxhus+rk`kSZ=i4W5C^Xpye#Ks<%!nTy`VtdI9rQ)w2LC^rzB``k z{{5fh$T8v^dpnN3ciDUIy|O7gTPVE|G9sH)viBZE5eZ2u*;G~kF5NjXF@KB{ z=C8cKst83G)`R_~jQ26_CyK$=e~As0)z?1A+SE1Ix)A%@m~rKY z=m=Cc>4kXFM`4b(kG9S%dKscqDT*seffi|+dFZrr%VQIkQ5>!R0R?YkS4`pcryKV) zD~$=C8|snv@yGR;p%`s`_A{^QS2G%fMa9(>je3|}UieVdwNY2}%;pLHb8gl%N__k| zyItHZbH0rb^XMj5YgBIK?SfK2E6?2g6}~+v$B#e4FrMV6%I)#?@ zGE7eWEyRF~UsQRW>!IB-=~Yh+KSO27obIBU|)foy12LVao&;y%VyF>Oou5_?!H8TlA)Brv)7Y9ke6nuu&Zny{mv}fCC{ur z`*PjM$@=0TjcGUd)8+L@8qeqDUc1(S(-D}N^0PEk2)7BU&oo5WQYBu$q|Zftp6YvU z3>B3&V7PONG;SuvQrCr0#+J3GJn~MTBIrQQXW+-Mn zjbjDG!bUz*mHt+Wm1N3G^dp84I@aKh3bpQ@L;~b)ruo&7+S( z&tf}MK7)Wy_)q!0>>1Ph#M;0?!c@Ig6_G;B)fMH^N?l1hq>w(ej0yP8sTz~h&Q&R@ z%E-4q1-R!hg?*>b<75dP4!`ay4AZIXUA+XX9N`mGdeZ0}A)pQGi2oI>ur0jQ)N{z3 zL4qq_te{hS^C1lCmC7%91VlwLB9Z3WY*OWl3bB=qB9rf)*ZyA^L5Cjk@lQ$+K#%u6 zyQy-grgq|F(tHKf)7Vbhxmow1ljWiS*L{5CVKbHJBfoR5>&#Q@%QXt*5}Wi;I%RmA z6zO27Nj>$!4pQ3${$-|wd@xeV*2VX{3gDH<(3Ms6&F0Z~=A5>pH?eYVYdU2*MiCEk z$_$mPJi7-EwB*T2%Sb1>dXJH-pPxQ2!oIegc0{W?&wW}lq<1~F+IDK30pFo#^xDaP z=NQT~?JUik3D(|(Q1rgrxzqChXtXb|MIx*PIT6kR;Yan>4%LRZJf54}CP)9j4;aBn zBi3q{*?s=nJk`%KzoDr0Lao<3f7hmpORuxh=$9h~t9%HdQJo3mw)NN*anu}$@dqyc zi8Fj_QYb30zts^s^GEg7Nyin3R+ok}LIDR6gZRF)RF$SWk?}xMYH5fNiM;ST%MzH| z`MeDCjsd+EIrNpPxY6P;OfPHp%nGCKlRN?Ho*ZctT3PAQR$Gl~*rhixd7t}v(sC6T|slXHml^Y3OLqfU5_ zU4eiXWBy#KljFPyn>1~BTUf4jeetB!&S%==1wnVF6motWrs{UG9BcdoHDVOxq6*A; zb8rSeCJ645ldcj-j7U?wt94Vpa?tdB1;4W^b+5qKFHkR!Ap~Z%?eB)pR48`dgon&- zj#=n=b6c8E`f9Sf{O8Qp3S9BYLQl>ouu_cAE?Q*%R{ zy3Ux{<75}gKzZQPc2NB%cB|Mo-03V@J@$a#g>2dAldNR`twH(*kb181U+17$0AnsK zfjF;%o(kYpzV|Lqe^nOP{&3v0deabX&pc&fbgZf=crHxc)H=;5f%V894jkDY z>j`iYXXBmrYQ=Awt%OCZ@!RegH=gNpeRHguCofjyrrZS}0Y)=zT+Ng4gwMZ-L4GHK zen5uJ�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 From 1e5302c9a20ce62486c6490accd5387f57c7330e Mon Sep 17 00:00:00 2001 From: dongzhihong Date: Wed, 13 Sep 2017 13:40:14 -0700 Subject: [PATCH 005/193] "redraw the graph" --- paddle/framework/multigpu.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/paddle/framework/multigpu.md b/paddle/framework/multigpu.md index c8501725f5..1c843326ee 100644 --- a/paddle/framework/multigpu.md +++ b/paddle/framework/multigpu.md @@ -30,13 +30,13 @@ As mentioned above, we summarise that several kinds of operators are needed. Cur ### Graph Converter -To be compatible with parameter server design doc, the graph converter converts the user defined operation graph into sub-graphs to be executed on different devices. +To be compatible with [parameter server design doc](https://github.com/PaddlePaddle/Paddle/blob/develop/doc/design/ops/dist_train.md), the graph converter converts the user defined operation graph into sub-graphs to be executed on different devices. 1. The user-defined operator graph will be partitioned into sub-graph. 2. Control operators between GPUs will be inserted into the graph. - *Broadcast, AllReduce in a single machine. And Broadcast, AllReduce, Send, Recv in multiple machines* + *Broadcast, AllReduce in a single machine. And Broadcast, AllReduce, [Send, Recv](https://github.com/PaddlePaddle/Paddle/blob/develop/doc/design/ops/dist_train.md#graph-converter) in multiple machines* @@ -53,12 +53,12 @@ These two operators need the Multi-GPU context support. Need to notice that Allreduce operator force GPUs synchronized at that point. Every device only need runs sub-graph in a loop style forever, the whole training process in asynchronous or synchronous mode depends on the Allreduce point in the graph. -For the simplest implement, when each GPU compute the gradient of `W`, followed with a `AllReduce` operator, accumulate the `dW` to full batch of data, then run the optimize process individually and apply the gradient to its `W`. +As it shown in the picture, when each GPU compute the gradient of `W`, followed with a `AllReduce` operator, accumulate the `dW` to full batch of data, then run the optimize process individually and apply the gradient to its `W`. In fact, in the way of every GPU optimized full batch of data, wasted (n-1) GPU compute resources. We will enhance it in the next stage. ### Benefits - can easily move the optimize sub-graph to parameter server, multi-GPU feature can be compatible with distributed support design. -- easily plug-in with NCCL2 library. +- easily plug-in with [NCCL2](https://developer.nvidia.com/nccl) library. - GPU Model parallelism becomes easier to implement. we only need to replace different GPU's sub-graph with different part of the whole graph. From e0a8b5915dd45d8c732a28d09d1026e78e41e341 Mon Sep 17 00:00:00 2001 From: dongzhihong Date: Wed, 13 Sep 2017 13:40:39 -0700 Subject: [PATCH 006/193] "redo the graph" --- .../images/multigpu_before_convert.graffle | Bin 0 -> 3056 bytes .../images/multigpu_before_convert.png | Bin 0 -> 33557 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 paddle/framework/images/multigpu_before_convert.graffle create mode 100644 paddle/framework/images/multigpu_before_convert.png diff --git a/paddle/framework/images/multigpu_before_convert.graffle b/paddle/framework/images/multigpu_before_convert.graffle new file mode 100644 index 0000000000000000000000000000000000000000..6c35ab1b21fb76ceae82d3693ed0d085b5bc0855 GIT binary patch literal 3056 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 literal 0 HcmV?d00001 diff --git a/paddle/framework/images/multigpu_before_convert.png b/paddle/framework/images/multigpu_before_convert.png new file mode 100644 index 0000000000000000000000000000000000000000..9c8f7711165d80a2fa3911280fdee91855a401b1 GIT binary patch literal 33557 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%0D};r5zEcM|Y>GjFVW0fo!v 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⁣oG^-x}cKWt7wDs|h&g%{-Ui_Yw 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 literal 0 HcmV?d00001 From 85e6906f0b1b301bd4218b2534e05c2f8961fd79 Mon Sep 17 00:00:00 2001 From: ranqiu Date: Tue, 28 Nov 2017 10:19:59 +0800 Subject: [PATCH 007/193] Refine the doc of layers.py --- .../paddle/trainer_config_helpers/layers.py | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/python/paddle/trainer_config_helpers/layers.py b/python/paddle/trainer_config_helpers/layers.py index b0f21bdb46..4bd94861af 100644 --- a/python/paddle/trainer_config_helpers/layers.py +++ b/python/paddle/trainer_config_helpers/layers.py @@ -2986,7 +2986,7 @@ def spp_layer(input, Reference: `Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition - https://arxiv.org/abs/1406.4729`_ + `_ The example usage is: @@ -3088,7 +3088,7 @@ def img_cmrnorm_layer(input, Reference: `ImageNet Classification with Deep Convolutional Neural Networks - http://www.cs.toronto.edu/~fritz/absps/imagenet.pdf`_ + `_ The example usage is: @@ -3156,7 +3156,7 @@ def batch_norm_layer(input, Reference: `Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift - http://arxiv.org/abs/1502.03167`_ + `_ The example usage is: @@ -5414,9 +5414,9 @@ def maxout_layer(input, groups, num_channels=None, name=None, layer_attr=None): Reference: `Maxout Networks - http://www.jmlr.org/proceedings/papers/v28/goodfellow13.pdf`_ + `_ `Multi-digit Number Recognition from Street View Imagery using Deep Convolutional Neural Networks - https://arxiv.org/pdf/1312.6082v4.pdf`_ + `_ .. math:: y_{si+j} = \max_k x_{gsi + sk + j} @@ -5483,7 +5483,7 @@ def ctc_layer(input, Reference: `Connectionist Temporal Classification: Labelling Unsegmented Sequence Data with Recurrent Neural Networks - http://machinelearning.wustl.edu/mlpapers/paper_files/icml2006_GravesFGS06.pdf`_ + `_ Note: Considering the 'blank' label needed by CTC, you need to use (num_classes + 1) @@ -5557,7 +5557,7 @@ def warp_ctc_layer(input, Reference: `Connectionist Temporal Classification: Labelling Unsegmented Sequence Data with Recurrent Neural Networks - http://machinelearning.wustl.edu/mlpapers/paper_files/icml2006_GravesFGS06.pdf`_ + `_ Note: - Let num_classes represents the category number. Considering the 'blank' @@ -5778,7 +5778,7 @@ def nce_layer(input, Reference: `A fast and simple algorithm for training neural probabilistic language - models. https://www.cs.toronto.edu/~amnih/papers/ncelm.pdf`_ + models. `_ The example usage is: @@ -5894,7 +5894,7 @@ def rank_cost(left, Reference: `Learning to Rank using Gradient Descent - http://research.microsoft.com/en-us/um/people/cburges/papers/ICML_ranking.pdf`_ + `_ .. math:: @@ -6430,7 +6430,7 @@ def smooth_l1_cost(input, label, name=None, coeff=1.0, layer_attr=None): Reference: `Fast R-CNN - https://arxiv.org/pdf/1504.08083v2.pdf`_ + `_ The example usage is: @@ -6637,7 +6637,7 @@ def prelu_layer(input, Reference: `Delving Deep into Rectifiers: Surpassing Human-Level Performance on - ImageNet Classification http://arxiv.org/pdf/1502.01852v1.pdf`_ + ImageNet Classification `_ .. math:: z_i &\\quad if \\quad z_i > 0 \\\\ @@ -6734,7 +6734,7 @@ def gated_unit_layer(input, Reference: `Language Modeling with Gated Convolutional Networks - https://arxiv.org/abs/1612.08083`_ + `_ .. math:: y=\\text{act}(X \cdot W + b)\otimes \sigma(X \cdot V + c) From fac96456c241a1a34975453d1db0b8418446fe2c Mon Sep 17 00:00:00 2001 From: xzl Date: Fri, 1 Dec 2017 20:41:34 +0800 Subject: [PATCH 008/193] add prelu neon impl --- paddle/math/Matrix.cpp | 23 +++++++++++++++++++- paddle/math/NEONFunctions.cpp | 40 +++++++++++++++++++++++++++++++++++ paddle/math/NEONFunctions.h | 1 + 3 files changed, 63 insertions(+), 1 deletion(-) diff --git a/paddle/math/Matrix.cpp b/paddle/math/Matrix.cpp index 88e9180690..be87a4c296 100644 --- a/paddle/math/Matrix.cpp +++ b/paddle/math/Matrix.cpp @@ -28,6 +28,7 @@ limitations under the License. */ #include "hl_top_k.h" #include "paddle/utils/Logging.h" +#include "NEONFunctions.h" #include "paddle/function/GemmFunctor.h" #include "paddle/utils/ThreadLocal.h" @@ -4157,16 +4158,36 @@ void CpuMatrix::print(std::ostream& os) const { void CpuMatrix::paramReluForward(Matrix& data, Matrix& W) { real* input = data.getData(); real* w = W.getData(); + real* output = data_; size_t numElements = data.getWidth(); size_t numSamples = data.getHeight(); size_t paraSize = W.getHeight() * W.getWidth(); CHECK(!(numElements % paraSize)); // this check from ParameterReluLayer::init + size_t partial_sum = numElements / paraSize; + if (paraSize == numElements) { + for (size_t n = 0; n < numSamples * numElements; ++n) { + output[n] = input[n] > 0 ? input[n] : input[n] * w[n % numElements]; + } + return; + } + +#if defined(__ARM_NEON__) || defined(__ARM_NEON) + for (size_t n = 0; n < numSamples; ++n) { + for (size_t i = 0; i < paraSize; i++) { + neon::prelu( + input + i * partial_sum, w[i], output + i * partial_sum, partial_sum); + } + input = input + numElements; + output = output + numElements; + } +#else for (size_t n = 0, k = 0; n < numSamples; ++n) { for (size_t i = 0; i < numElements; ++i, ++k) { - data_[k] = input[k] > 0 ? input[k] : input[k] * w[i / partial_sum]; + output[k] = input[k] > 0 ? input[k] : input[k] * w[i / partial_sum]; } } +#endif } void CpuMatrix::paramReluBackwardW(Matrix& oGrad, Matrix& data) { diff --git a/paddle/math/NEONFunctions.cpp b/paddle/math/NEONFunctions.cpp index 3bf47901f1..0f83149422 100644 --- a/paddle/math/NEONFunctions.cpp +++ b/paddle/math/NEONFunctions.cpp @@ -49,6 +49,46 @@ void relu(const float* a, float* b, int len) { } } +// b[i] = a[i] > 0.0f ? a[i] : a[i] * w +void prelu(const float* a, float w, float* b, int len) { + int offset = len % 16; + float32x4_t ma0, ma1, ma2, ma3; + + float32x4_t zero = vdupq_n_f32(0.f); + float32x4_t vw = vdupq_n_f32(w); + + for (int k = 0; k < len / 16; k++, a += 16, b += 16) { + ma0 = vld1q_f32(a); + ma1 = vld1q_f32(a + 4); + ma2 = vld1q_f32(a + 8); + ma3 = vld1q_f32(a + 12); + + uint32x4_t flag0 = vcgtq_f32(ma0, zero); + uint32x4_t flag1 = vcgtq_f32(ma1, zero); + uint32x4_t flag2 = vcgtq_f32(ma2, zero); + uint32x4_t flag3 = vcgtq_f32(ma3, zero); + + float32x4_t mul0 = vmulq_f32(ma0, vw); + float32x4_t mul1 = vmulq_f32(ma1, vw); + float32x4_t mul2 = vmulq_f32(ma2, vw); + float32x4_t mul3 = vmulq_f32(ma3, vw); + + ma0 = vbslq_f32(flag0, ma0, mul0); + ma1 = vbslq_f32(flag1, ma1, mul1); + ma2 = vbslq_f32(flag2, ma2, mul2); + ma3 = vbslq_f32(flag3, ma3, mul3); + + vst1q_f32(b, ma0); + vst1q_f32(b + 4, ma1); + vst1q_f32(b + 8, ma2); + vst1q_f32(b + 12, ma3); + } + + for (int i = 0; i < offset; i++) { + b[i] = a[i] > 0.0f ? a[i] : a[i] * w; + } +} + } // namespace neon } // namespace paddle diff --git a/paddle/math/NEONFunctions.h b/paddle/math/NEONFunctions.h index 69085e3335..d67b2f47a8 100644 --- a/paddle/math/NEONFunctions.h +++ b/paddle/math/NEONFunctions.h @@ -18,6 +18,7 @@ namespace paddle { namespace neon { void relu(const float* a, float* b, int len); +void prelu(const float* a, float w, float* b, int len); } // namespace neon } // namespace paddle From 5c057f95529656e379ef404a2e388e1be3e88de1 Mon Sep 17 00:00:00 2001 From: sweetsky0901 Date: Sun, 3 Dec 2017 14:40:33 +0800 Subject: [PATCH 009/193] add spp op only can test ok --- paddle/operators/spp_op.cc | 98 +++++++++++++ paddle/operators/spp_op.h | 148 ++++++++++++++++++++ python/paddle/v2/fluid/tests/test_spp_op.py | 48 +++++++ 3 files changed, 294 insertions(+) create mode 100644 paddle/operators/spp_op.cc create mode 100644 paddle/operators/spp_op.h create mode 100644 python/paddle/v2/fluid/tests/test_spp_op.py diff --git a/paddle/operators/spp_op.cc b/paddle/operators/spp_op.cc new file mode 100644 index 0000000000..62fc2112a8 --- /dev/null +++ b/paddle/operators/spp_op.cc @@ -0,0 +1,98 @@ +/* Copyright (c) 2016 PaddlePaddle Authors. All Rights Reserve. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +Indicesou 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/operators/spp_op.h" +namespace paddle { +namespace operators { + +class SppOpMaker : public framework::OpProtoAndCheckerMaker { + public: + SppOpMaker(framework::OpProto* proto, framework::OpAttrChecker* op_checker) + : OpProtoAndCheckerMaker(proto, op_checker) { + AddInput( + "X", + "(Tensor) The input tensor of spp operator. " + "The format of input tensor is NCHW. Where N is batch size, C is the " + "number of channels, H and W is the height and width of feature."); + AddOutput("Out", + "(Tensor) The output tensor of spp operator." + "N * M." + "M = C * H * W"); + AddAttr("pyramid_height", ">= 1"); + AddComment(R"DOC( + "Input shape: $(N, C_{in}, H_{in}, W_{in})$ + Output shape: $(H_{out}, W_{out})$ + Where + $$ + H_{out} = (H_{in}−1) * strides[0] − 2 * paddings[0] + ksize[0] \\ + W_{out} = (W_{in}−1) * strides[1] − 2 * paddings[1] + ksize[1] + $$ + )DOC"); + } +}; + +int OutputSize(int pyramid_level, int input_size) { + int bins = std::pow(2, pyramid_level); + int ksize = std::ceil(input_size / static_cast(bins)); + int padding = (ksize * bins - input_size + 1) / 2; + int output_size = (input_size - ksize + 2 * padding) / ksize + 1; + // output_size = bins + return output_size; +} + +class SppOp : public framework::OperatorWithKernel { + public: + using framework::OperatorWithKernel::OperatorWithKernel; + void InferShape(framework::InferShapeContext* ctx) const override { + PADDLE_ENFORCE(ctx->HasInput("X"), + "Input(X) of SppOp" + "should not be null."); + PADDLE_ENFORCE(ctx->HasOutput("Out"), + "Output(Out) of SppOp should not be null."); + auto in_x_dims = ctx->GetInputDim("X"); + int pyramid_height = ctx->Attrs().Get("pyramid_height"); + PADDLE_ENFORCE(in_x_dims.size() == 4, + "Spping intput must be of 4-dimensional."); + int outlen = 0; + for (int p = 0; p < pyramid_height; ++p) { + int outh = OutputSize(p, in_x_dims[2]); + int outw = OutputSize(p, in_x_dims[3]); + int p_level_outlen = outh * outw * in_x_dims[1]; + outlen += p_level_outlen; + } + std::vector output_shape({in_x_dims[0], outlen}); + ctx->SetOutputDim("Out", framework::make_ddim(output_shape)); + } +}; + +class SppOpGrad : public framework::OperatorWithKernel { + public: + using framework::OperatorWithKernel::OperatorWithKernel; + void InferShape(framework::InferShapeContext* ctx) const override { + PADDLE_ENFORCE(ctx->HasInput("X"), "Input(X) must not be null."); + PADDLE_ENFORCE(ctx->HasOutput(framework::GradVarName("X")), + "Input(X@GRAD) should not be null."); + ctx->SetOutputDim(framework::GradVarName("X"), ctx->GetInputDim("X")); + } +}; +} // namespace operators +} // namespace paddle + +namespace ops = paddle::operators; +REGISTER_OP(spp, ops::SppOp, ops::SppOpMaker, spp_grad, ops::SppOpGrad); +REGISTER_OP_CPU_KERNEL(spp, ops::SppKernel, + ops::SppKernel); +REGISTER_OP_CPU_KERNEL(spp_grad, + ops::SppGradKernel, + ops::SppGradKernel); diff --git a/paddle/operators/spp_op.h b/paddle/operators/spp_op.h new file mode 100644 index 0000000000..2a2824bb31 --- /dev/null +++ b/paddle/operators/spp_op.h @@ -0,0 +1,148 @@ +/* Copyright (c) 2016 PaddlePaddle Authors. All Rights Reserve. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +Indicesou 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 "paddle/framework/op_registry.h" +#include "paddle/operators/math/math_function.h" +#include "paddle/operators/math/pooling.h" +#include "paddle/operators/strided_memcpy.h" + +namespace paddle { +namespace operators { +template +class SppKernel : public framework::OpKernel { + public: + void Compute(const framework::ExecutionContext& context) const override { + const framework::Tensor* in_x = context.Input("X"); + auto* out = context.Output("Out"); + int pyramid_height = context.template Attr("pyramid_height"); + out->mutable_data(context.GetPlace()); + auto out_stride = framework::stride(out->dims()); + int input_h = in_x->dims()[2]; + int input_w = in_x->dims()[3]; + size_t output_offset = 0; + for (int p = 0; p < pyramid_height; ++p) { + int bins = std::pow(2, p); + int ksize_h = std::ceil(input_h / static_cast(bins)); + int ksize_w = std::ceil(input_w / static_cast(bins)); + int padding_h = (ksize_h * bins - input_h + 1) / 2; + int padding_w = (ksize_w * bins - input_w + 1) / 2; + std::vector ksize({ksize_h, ksize_w}); + std::vector strides({ksize_h, ksize_w}); + std::vector paddings({padding_h, padding_w}); + // pooling output shape + std::vector output_shape_vec({in_x->dims()[0], in_x->dims()[1]}); + output_shape_vec.push_back((input_h - ksize_h + 2 * padding_h) / ksize_h + + 1); + output_shape_vec.push_back((input_w - ksize_w + 2 * padding_w) / ksize_w + + 1); + framework::DDim output_shape(framework::make_ddim(output_shape_vec)); + // flatten pooling output shape + int output_flatten_w = in_x->dims()[1] * bins * bins; + std::vector output_flatten_shape_vec( + {in_x->dims()[0], output_flatten_w}); + framework::DDim output_flatten_shape( + framework::make_ddim(output_flatten_shape_vec)); + framework::Tensor out_level; + framework::Tensor out_flatten_level; + out_level.mutable_data(output_shape, context.GetPlace()); + // pooling + math::Pool2dFunctor, T> pool_forward; + math::MaxPool max_process; + pool_forward(context.device_context(), *in_x, ksize, strides, paddings, + max_process, &out_level); + out_flatten_level.ShareDataWith(out_level); + out_flatten_level.Resize(output_flatten_shape); + auto in_stride = framework::stride(out_flatten_level.dims()); + const T* src_data = out_flatten_level.data(); + StridedMemcpy(context.device_context(), src_data, in_stride, + out_flatten_level.dims(), out_stride, + out->data() + output_offset); + output_offset += out_flatten_level.dims()[1] * in_stride[1]; + } + } +}; +template +class SppGradKernel : public framework::OpKernel { + public: + void Compute(const framework::ExecutionContext& context) const override { + const framework::Tensor* in_x = context.Input("X"); + const framework::Tensor* out = context.Input("Out"); + const framework::Tensor* out_grad = + context.Input(framework::GradVarName("Out")); + framework::Tensor* in_x_grad = + context.Output(framework::GradVarName("X")); + auto& device_ctx = context.device_context(); + math::SetConstant zero; + in_x_grad->mutable_data(context.GetPlace()); + zero(device_ctx, in_x_grad, static_cast(0)); + int pyramid_height = context.template Attr("pyramid_height"); + auto outgrad_stride = framework::stride(out_grad->dims()); + auto out_stride = framework::stride(out->dims()); + int input_h = in_x->dims()[2]; + int input_w = in_x->dims()[3]; + size_t out_offset = 0; + for (int p = 0; p < pyramid_height; ++p) { + int bins = std::pow(2, p); + int ksize_h = std::ceil(input_h / static_cast(bins)); + int ksize_w = std::ceil(input_w / static_cast(bins)); + int padding_h = (ksize_h * bins - input_h + 1) / 2; + int padding_w = (ksize_w * bins - input_w + 1) / 2; + std::vector ksize({ksize_h, ksize_w}); + std::vector strides({ksize_h, ksize_w}); + std::vector paddings({padding_h, padding_w}); + // split outgrad and get flatten + std::vector out_shape_vec({in_x->dims()[0], in_x->dims()[1]}); + out_shape_vec.push_back((input_h - ksize_h + 2 * padding_h) / ksize_h + + 1); + out_shape_vec.push_back((input_w - ksize_w + 2 * padding_w) / ksize_w + + 1); + framework::DDim out_shape(framework::make_ddim(out_shape_vec)); + int out_flatten_w = in_x->dims()[1] * bins * bins; + std::vector out_flatten_shape_vec( + {in_x->dims()[0], out_flatten_w}); + framework::DDim out_flatten_shape( + framework::make_ddim(out_flatten_shape_vec)); + framework::Tensor out_level; + framework::Tensor outgrad_level; + framework::Tensor out_flatten_level; + framework::Tensor outgrad_flatten_level; + out_flatten_level.mutable_data(out_flatten_shape, context.GetPlace()); + outgrad_flatten_level.mutable_data(out_flatten_shape, + context.GetPlace()); + + auto flatten_stride = framework::stride(out_flatten_level.dims()); + // memcpy + StridedMemcpy(context.device_context(), out->data() + out_offset, + out_stride, out_flatten_level.dims(), flatten_stride, + out_flatten_level.data()); + + StridedMemcpy(context.device_context(), + out_grad->data() + out_offset, outgrad_stride, + outgrad_flatten_level.dims(), flatten_stride, + outgrad_flatten_level.data()); + out_offset += out_flatten_level.dims()[1] * out_stride[1]; + // flatten backward + out_level.ShareDataWith(out_flatten_level); + out_level.Resize(out_shape); + outgrad_level.ShareDataWith(outgrad_flatten_level); + outgrad_level.Resize(out_shape); + math::MaxPool2dGradFunctor pool2d_backward; + pool2d_backward(context.device_context(), *in_x, *&out_level, + *&outgrad_level, ksize, strides, paddings, in_x_grad); + } + } +}; +} // namespace operators +} // namespace paddle diff --git a/python/paddle/v2/fluid/tests/test_spp_op.py b/python/paddle/v2/fluid/tests/test_spp_op.py new file mode 100644 index 0000000000..806d5e7736 --- /dev/null +++ b/python/paddle/v2/fluid/tests/test_spp_op.py @@ -0,0 +1,48 @@ +import unittest +import numpy as np +from op_test import OpTest +from test_pool2d_op import max_pool2D_forward_naive + + +class TestSppOp(OpTest): + def setUp(self): + self.op_type = "spp" + self.init_test_case() + input = np.random.random(self.shape).astype("float32") + nsize, csize, hsize, wsize = input.shape + out_level_flatten = [] + for i in xrange(self.pyramid_height): + bins = np.power(2, i) + ksize = [0, 0] + padding = [0, 0] + ksize[0] = np.ceil(hsize / bins.astype("double")).astype("int32") + padding[0] = ((ksize[0] * bins - hsize + 1) / 2).astype("int32") + + ksize[1] = np.ceil(wsize / bins.astype("double")).astype("int32") + padding[1] = ((ksize[1] * bins - wsize + 1) / 2).astype("int32") + out_level = max_pool2D_forward_naive(input, ksize, ksize, padding) + out_level_flatten.append( + out_level.reshape(nsize, bins * bins * csize)) + if i == 0: + output = out_level_flatten[i] + else: + output = np.concatenate((output, out_level_flatten[i]), 1) + # output = np.concatenate(out_level_flatten.tolist(), 0); + self.inputs = {'X': input.astype('float32'), } + self.attrs = {'pyramid_height': self.pyramid_height} + + self.outputs = {'Out': output.astype('float32')} + + def test_check_output(self): + self.check_output() + + def test_check_grad(self): + self.check_grad(['X'], 'Out') + + def init_test_case(self): + self.shape = [1, 1, 2, 2] + self.pyramid_height = 2 + + +if __name__ == '__main__': + unittest.main() From 531e7b6fa694e7c15ca3831704097946162248fe Mon Sep 17 00:00:00 2001 From: sweetsky0901 Date: Sun, 3 Dec 2017 17:26:43 +0800 Subject: [PATCH 010/193] gpu test ok --- paddle/operators/spp_op.cc | 28 +++------- paddle/operators/spp_op.cu.cc | 22 ++++++++ paddle/operators/spp_op.h | 61 +++++++++++---------- python/paddle/v2/fluid/tests/test_spp_op.py | 6 +- 4 files changed, 64 insertions(+), 53 deletions(-) create mode 100644 paddle/operators/spp_op.cu.cc diff --git a/paddle/operators/spp_op.cc b/paddle/operators/spp_op.cc index 62fc2112a8..ff607c5769 100644 --- a/paddle/operators/spp_op.cc +++ b/paddle/operators/spp_op.cc @@ -29,28 +29,22 @@ class SppOpMaker : public framework::OpProtoAndCheckerMaker { "(Tensor) The output tensor of spp operator." "N * M." "M = C * H * W"); - AddAttr("pyramid_height", ">= 1"); + AddAttr("pyramid_height", "int"); AddComment(R"DOC( - "Input shape: $(N, C_{in}, H_{in}, W_{in})$ + "Does spatial pyramid pooling on the input image by taking the max, + etc. within regions so that the result vector of different sized + images are of the same size + Input shape: $(N, C_{in}, H_{in}, W_{in})$ Output shape: $(H_{out}, W_{out})$ Where $$ - H_{out} = (H_{in}−1) * strides[0] − 2 * paddings[0] + ksize[0] \\ - W_{out} = (W_{in}−1) * strides[1] − 2 * paddings[1] + ksize[1] + H_{out} = N \\ + W_{out} = ((std::pow(4, pyramid_height) - 1) / (4 - 1)) * C_{in} $$ )DOC"); } }; -int OutputSize(int pyramid_level, int input_size) { - int bins = std::pow(2, pyramid_level); - int ksize = std::ceil(input_size / static_cast(bins)); - int padding = (ksize * bins - input_size + 1) / 2; - int output_size = (input_size - ksize + 2 * padding) / ksize + 1; - // output_size = bins - return output_size; -} - class SppOp : public framework::OperatorWithKernel { public: using framework::OperatorWithKernel::OperatorWithKernel; @@ -64,13 +58,7 @@ class SppOp : public framework::OperatorWithKernel { int pyramid_height = ctx->Attrs().Get("pyramid_height"); PADDLE_ENFORCE(in_x_dims.size() == 4, "Spping intput must be of 4-dimensional."); - int outlen = 0; - for (int p = 0; p < pyramid_height; ++p) { - int outh = OutputSize(p, in_x_dims[2]); - int outw = OutputSize(p, in_x_dims[3]); - int p_level_outlen = outh * outw * in_x_dims[1]; - outlen += p_level_outlen; - } + int outlen = ((std::pow(4, pyramid_height) - 1) / (4 - 1)) * in_x_dims[1]; std::vector output_shape({in_x_dims[0], outlen}); ctx->SetOutputDim("Out", framework::make_ddim(output_shape)); } diff --git a/paddle/operators/spp_op.cu.cc b/paddle/operators/spp_op.cu.cc new file mode 100644 index 0000000000..a7057907ce --- /dev/null +++ b/paddle/operators/spp_op.cu.cc @@ -0,0 +1,22 @@ +/* Copyright (c) 2016 PaddlePaddle Authors. All Rights Reserve. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +Indicesou 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/operators/spp_op.h" + +namespace ops = paddle::operators; +REGISTER_OP_GPU_KERNEL(spp, ops::SppKernel, + ops::SppKernel); +REGISTER_OP_GPU_KERNEL(spp_grad, + ops::SppGradKernel, + ops::SppGradKernel); diff --git a/paddle/operators/spp_op.h b/paddle/operators/spp_op.h index 2a2824bb31..7a385352a0 100644 --- a/paddle/operators/spp_op.h +++ b/paddle/operators/spp_op.h @@ -42,34 +42,36 @@ class SppKernel : public framework::OpKernel { std::vector strides({ksize_h, ksize_w}); std::vector paddings({padding_h, padding_w}); // pooling output shape + framework::Tensor out_level; std::vector output_shape_vec({in_x->dims()[0], in_x->dims()[1]}); output_shape_vec.push_back((input_h - ksize_h + 2 * padding_h) / ksize_h + 1); output_shape_vec.push_back((input_w - ksize_w + 2 * padding_w) / ksize_w + 1); framework::DDim output_shape(framework::make_ddim(output_shape_vec)); - // flatten pooling output shape - int output_flatten_w = in_x->dims()[1] * bins * bins; - std::vector output_flatten_shape_vec( - {in_x->dims()[0], output_flatten_w}); - framework::DDim output_flatten_shape( - framework::make_ddim(output_flatten_shape_vec)); - framework::Tensor out_level; - framework::Tensor out_flatten_level; out_level.mutable_data(output_shape, context.GetPlace()); // pooling math::Pool2dFunctor, T> pool_forward; math::MaxPool max_process; pool_forward(context.device_context(), *in_x, ksize, strides, paddings, max_process, &out_level); + // flatten pooling output shape + framework::Tensor out_flatten_level; + int output_flatten_w = in_x->dims()[1] * bins * bins; + std::vector output_flatten_shape_vec( + {in_x->dims()[0], output_flatten_w}); + framework::DDim output_flatten_shape( + framework::make_ddim(output_flatten_shape_vec)); out_flatten_level.ShareDataWith(out_level); out_flatten_level.Resize(output_flatten_shape); - auto in_stride = framework::stride(out_flatten_level.dims()); - const T* src_data = out_flatten_level.data(); - StridedMemcpy(context.device_context(), src_data, in_stride, - out_flatten_level.dims(), out_stride, - out->data() + output_offset); - output_offset += out_flatten_level.dims()[1] * in_stride[1]; + // concat + auto out_flatten_level_stride = + framework::stride(out_flatten_level.dims()); + StridedMemcpy(context.device_context(), out_flatten_level.data(), + out_flatten_level_stride, out_flatten_level.dims(), + out_stride, out->data() + output_offset); + output_offset += + out_flatten_level.dims()[1] * out_flatten_level_stride[1]; } } }; @@ -83,12 +85,11 @@ class SppGradKernel : public framework::OpKernel { context.Input(framework::GradVarName("Out")); framework::Tensor* in_x_grad = context.Output(framework::GradVarName("X")); + int pyramid_height = context.template Attr("pyramid_height"); auto& device_ctx = context.device_context(); math::SetConstant zero; in_x_grad->mutable_data(context.GetPlace()); zero(device_ctx, in_x_grad, static_cast(0)); - int pyramid_height = context.template Attr("pyramid_height"); - auto outgrad_stride = framework::stride(out_grad->dims()); auto out_stride = framework::stride(out->dims()); int input_h = in_x->dims()[2]; int input_w = in_x->dims()[3]; @@ -102,26 +103,17 @@ class SppGradKernel : public framework::OpKernel { std::vector ksize({ksize_h, ksize_w}); std::vector strides({ksize_h, ksize_w}); std::vector paddings({padding_h, padding_w}); - // split outgrad and get flatten - std::vector out_shape_vec({in_x->dims()[0], in_x->dims()[1]}); - out_shape_vec.push_back((input_h - ksize_h + 2 * padding_h) / ksize_h + - 1); - out_shape_vec.push_back((input_w - ksize_w + 2 * padding_w) / ksize_w + - 1); - framework::DDim out_shape(framework::make_ddim(out_shape_vec)); + // split out and outgrad ... to flatten + framework::Tensor out_flatten_level; + framework::Tensor outgrad_flatten_level; int out_flatten_w = in_x->dims()[1] * bins * bins; std::vector out_flatten_shape_vec( {in_x->dims()[0], out_flatten_w}); framework::DDim out_flatten_shape( framework::make_ddim(out_flatten_shape_vec)); - framework::Tensor out_level; - framework::Tensor outgrad_level; - framework::Tensor out_flatten_level; - framework::Tensor outgrad_flatten_level; out_flatten_level.mutable_data(out_flatten_shape, context.GetPlace()); outgrad_flatten_level.mutable_data(out_flatten_shape, context.GetPlace()); - auto flatten_stride = framework::stride(out_flatten_level.dims()); // memcpy StridedMemcpy(context.device_context(), out->data() + out_offset, @@ -129,15 +121,24 @@ class SppGradKernel : public framework::OpKernel { out_flatten_level.data()); StridedMemcpy(context.device_context(), - out_grad->data() + out_offset, outgrad_stride, + out_grad->data() + out_offset, out_stride, outgrad_flatten_level.dims(), flatten_stride, outgrad_flatten_level.data()); out_offset += out_flatten_level.dims()[1] * out_stride[1]; - // flatten backward + // flatten backward to nchw + framework::Tensor out_level; + framework::Tensor outgrad_level; + std::vector out_shape_vec({in_x->dims()[0], in_x->dims()[1]}); + out_shape_vec.push_back((input_h - ksize_h + 2 * padding_h) / ksize_h + + 1); + out_shape_vec.push_back((input_w - ksize_w + 2 * padding_w) / ksize_w + + 1); + framework::DDim out_shape(framework::make_ddim(out_shape_vec)); out_level.ShareDataWith(out_flatten_level); out_level.Resize(out_shape); outgrad_level.ShareDataWith(outgrad_flatten_level); outgrad_level.Resize(out_shape); + // pooling backward math::MaxPool2dGradFunctor pool2d_backward; pool2d_backward(context.device_context(), *in_x, *&out_level, *&outgrad_level, ksize, strides, paddings, in_x_grad); diff --git a/python/paddle/v2/fluid/tests/test_spp_op.py b/python/paddle/v2/fluid/tests/test_spp_op.py index 806d5e7736..89b12e885c 100644 --- a/python/paddle/v2/fluid/tests/test_spp_op.py +++ b/python/paddle/v2/fluid/tests/test_spp_op.py @@ -37,11 +37,11 @@ class TestSppOp(OpTest): self.check_output() def test_check_grad(self): - self.check_grad(['X'], 'Out') + self.check_grad(['X'], 'Out', max_relative_error=0.05) def init_test_case(self): - self.shape = [1, 1, 2, 2] - self.pyramid_height = 2 + self.shape = [3, 2, 4, 4] + self.pyramid_height = 3 if __name__ == '__main__': From 8368e55be93ea6d2912e3ebebb35e284c5428a28 Mon Sep 17 00:00:00 2001 From: sweetsky0901 Date: Mon, 4 Dec 2017 11:19:16 +0800 Subject: [PATCH 011/193] modify some doc --- paddle/operators/spp_op.cc | 4 +- paddle/operators/spp_op.h | 47 +++++++++++---------- python/paddle/v2/fluid/tests/test_spp_op.py | 19 ++++++--- 3 files changed, 38 insertions(+), 32 deletions(-) diff --git a/paddle/operators/spp_op.cc b/paddle/operators/spp_op.cc index ff607c5769..026b35de1e 100644 --- a/paddle/operators/spp_op.cc +++ b/paddle/operators/spp_op.cc @@ -29,7 +29,7 @@ class SppOpMaker : public framework::OpProtoAndCheckerMaker { "(Tensor) The output tensor of spp operator." "N * M." "M = C * H * W"); - AddAttr("pyramid_height", "int"); + AddAttr("pyramid_height", "int", "multi level pooling"); AddComment(R"DOC( "Does spatial pyramid pooling on the input image by taking the max, etc. within regions so that the result vector of different sized @@ -39,7 +39,7 @@ class SppOpMaker : public framework::OpProtoAndCheckerMaker { Where $$ H_{out} = N \\ - W_{out} = ((std::pow(4, pyramid_height) - 1) / (4 - 1)) * C_{in} + W_{out} = (((4^pyramid_height) - 1) / (4 - 1))$ * C_{in} $$ )DOC"); } diff --git a/paddle/operators/spp_op.h b/paddle/operators/spp_op.h index 7a385352a0..0f2c43ee65 100644 --- a/paddle/operators/spp_op.h +++ b/paddle/operators/spp_op.h @@ -34,27 +34,27 @@ class SppKernel : public framework::OpKernel { size_t output_offset = 0; for (int p = 0; p < pyramid_height; ++p) { int bins = std::pow(2, p); - int ksize_h = std::ceil(input_h / static_cast(bins)); - int ksize_w = std::ceil(input_w / static_cast(bins)); - int padding_h = (ksize_h * bins - input_h + 1) / 2; - int padding_w = (ksize_w * bins - input_w + 1) / 2; - std::vector ksize({ksize_h, ksize_w}); - std::vector strides({ksize_h, ksize_w}); + int kernel_size_h = std::ceil(input_h / static_cast(bins)); + int kernel_size_w = std::ceil(input_w / static_cast(bins)); + int padding_h = (kernel_size_h * bins - input_h + 1) / 2; + int padding_w = (kernel_size_w * bins - input_w + 1) / 2; + std::vector kernel_size({kernel_size_h, kernel_size_w}); + std::vector strides({kernel_size_h, kernel_size_w}); std::vector paddings({padding_h, padding_w}); // pooling output shape framework::Tensor out_level; std::vector output_shape_vec({in_x->dims()[0], in_x->dims()[1]}); - output_shape_vec.push_back((input_h - ksize_h + 2 * padding_h) / ksize_h + - 1); - output_shape_vec.push_back((input_w - ksize_w + 2 * padding_w) / ksize_w + - 1); + output_shape_vec.push_back( + (input_h - kernel_size_h + 2 * padding_h) / kernel_size_h + 1); + output_shape_vec.push_back( + (input_w - kernel_size_w + 2 * padding_w) / kernel_size_w + 1); framework::DDim output_shape(framework::make_ddim(output_shape_vec)); out_level.mutable_data(output_shape, context.GetPlace()); // pooling math::Pool2dFunctor, T> pool_forward; math::MaxPool max_process; - pool_forward(context.device_context(), *in_x, ksize, strides, paddings, - max_process, &out_level); + pool_forward(context.device_context(), *in_x, kernel_size, strides, + paddings, max_process, &out_level); // flatten pooling output shape framework::Tensor out_flatten_level; int output_flatten_w = in_x->dims()[1] * bins * bins; @@ -96,12 +96,12 @@ class SppGradKernel : public framework::OpKernel { size_t out_offset = 0; for (int p = 0; p < pyramid_height; ++p) { int bins = std::pow(2, p); - int ksize_h = std::ceil(input_h / static_cast(bins)); - int ksize_w = std::ceil(input_w / static_cast(bins)); - int padding_h = (ksize_h * bins - input_h + 1) / 2; - int padding_w = (ksize_w * bins - input_w + 1) / 2; - std::vector ksize({ksize_h, ksize_w}); - std::vector strides({ksize_h, ksize_w}); + int kernel_size_h = std::ceil(input_h / static_cast(bins)); + int kernel_size_w = std::ceil(input_w / static_cast(bins)); + int padding_h = (kernel_size_h * bins - input_h + 1) / 2; + int padding_w = (kernel_size_w * bins - input_w + 1) / 2; + std::vector kernel_size({kernel_size_h, kernel_size_w}); + std::vector strides({kernel_size_h, kernel_size_w}); std::vector paddings({padding_h, padding_w}); // split out and outgrad ... to flatten framework::Tensor out_flatten_level; @@ -129,10 +129,10 @@ class SppGradKernel : public framework::OpKernel { framework::Tensor out_level; framework::Tensor outgrad_level; std::vector out_shape_vec({in_x->dims()[0], in_x->dims()[1]}); - out_shape_vec.push_back((input_h - ksize_h + 2 * padding_h) / ksize_h + - 1); - out_shape_vec.push_back((input_w - ksize_w + 2 * padding_w) / ksize_w + - 1); + out_shape_vec.push_back( + (input_h - kernel_size_h + 2 * padding_h) / kernel_size_h + 1); + out_shape_vec.push_back( + (input_w - kernel_size_w + 2 * padding_w) / kernel_size_w + 1); framework::DDim out_shape(framework::make_ddim(out_shape_vec)); out_level.ShareDataWith(out_flatten_level); out_level.Resize(out_shape); @@ -141,7 +141,8 @@ class SppGradKernel : public framework::OpKernel { // pooling backward math::MaxPool2dGradFunctor pool2d_backward; pool2d_backward(context.device_context(), *in_x, *&out_level, - *&outgrad_level, ksize, strides, paddings, in_x_grad); + *&outgrad_level, kernel_size, strides, paddings, + in_x_grad); } } }; diff --git a/python/paddle/v2/fluid/tests/test_spp_op.py b/python/paddle/v2/fluid/tests/test_spp_op.py index 89b12e885c..b57f4a795d 100644 --- a/python/paddle/v2/fluid/tests/test_spp_op.py +++ b/python/paddle/v2/fluid/tests/test_spp_op.py @@ -13,14 +13,19 @@ class TestSppOp(OpTest): out_level_flatten = [] for i in xrange(self.pyramid_height): bins = np.power(2, i) - ksize = [0, 0] + kernel_size = [0, 0] padding = [0, 0] - ksize[0] = np.ceil(hsize / bins.astype("double")).astype("int32") - padding[0] = ((ksize[0] * bins - hsize + 1) / 2).astype("int32") - - ksize[1] = np.ceil(wsize / bins.astype("double")).astype("int32") - padding[1] = ((ksize[1] * bins - wsize + 1) / 2).astype("int32") - out_level = max_pool2D_forward_naive(input, ksize, ksize, padding) + kernel_size[0] = np.ceil(hsize / + bins.astype("double")).astype("int32") + padding[0] = ( + (kernel_size[0] * bins - hsize + 1) / 2).astype("int32") + + kernel_size[1] = np.ceil(wsize / + bins.astype("double")).astype("int32") + padding[1] = ( + (kernel_size[1] * bins - wsize + 1) / 2).astype("int32") + out_level = max_pool2D_forward_naive(input, kernel_size, + kernel_size, padding) out_level_flatten.append( out_level.reshape(nsize, bins * bins * csize)) if i == 0: From 141a323c3410f9d65b75cd546af69715735db23a Mon Sep 17 00:00:00 2001 From: sweetsky0901 Date: Mon, 4 Dec 2017 11:43:14 +0800 Subject: [PATCH 012/193] fix a bug --- paddle/operators/spp_op.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/paddle/operators/spp_op.cc b/paddle/operators/spp_op.cc index 026b35de1e..5e51e73ecc 100644 --- a/paddle/operators/spp_op.cc +++ b/paddle/operators/spp_op.cc @@ -29,7 +29,7 @@ class SppOpMaker : public framework::OpProtoAndCheckerMaker { "(Tensor) The output tensor of spp operator." "N * M." "M = C * H * W"); - AddAttr("pyramid_height", "int", "multi level pooling"); + AddAttr("pyramid_height", "(int), multi level pooling"); AddComment(R"DOC( "Does spatial pyramid pooling on the input image by taking the max, etc. within regions so that the result vector of different sized From ee0d365a3a21ab8881ad88b252a5d117b87bc726 Mon Sep 17 00:00:00 2001 From: tensor-tang Date: Tue, 5 Dec 2017 11:36:08 +0800 Subject: [PATCH 013/193] add inference benchmark data --- benchmark/IntelOptimizedPaddle.md | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/benchmark/IntelOptimizedPaddle.md b/benchmark/IntelOptimizedPaddle.md index 16c2390fd3..c275aeb5cb 100644 --- a/benchmark/IntelOptimizedPaddle.md +++ b/benchmark/IntelOptimizedPaddle.md @@ -23,6 +23,8 @@ On each machine, we will test and compare the performance of training on single ## Benchmark Model ### Server + +#### Training Test on batch size 64, 128, 256 on Intel(R) Xeon(R) Gold 6148 CPU @ 2.40GHz Input image size - 3 * 224 * 224, Time: images/second @@ -62,6 +64,34 @@ TBD chart on batch size 128 TBD +#### Inference +Test on batch size 1, 2, 4, 8, 16 on Intel(R) Xeon(R) Gold 6148 CPU @ 2.40GHz +- VGG-19 + +| BatchSize | 1 | 2 | 4 | 8 | 16 | +|-----------|-------|-------|-------|-------|-------| +| OpenBLAS | 0.36 | 0.48 | 0.56 | 0.50 | 0.43 | +| MKLML | 5.41 | 9.52 | 14.71 | 20.46 | 29.35 | +| MKL-DNN | 65.52 | 89.94 | 83.92 | 94.77 | 95.78 | + +- ResNet-50 + +| BatchSize | 1 | 2 | 4 | 8 | 16 | +|-----------|-------|--------|--------|--------|--------| +| OpenBLAS | 0.29 | 0.43 | 0.71 | 0.85 | 0.71 | +| MKLML | 6.26 | 11.88 | 21.37 | 39.67 | 59.01 | +| MKL-DNN | 90.27 | 134.03 | 136.03 | 153.66 | 211.22 | + + +- GoogLeNet + +| BatchSize | 1 | 2 | 4 | 8 | 16 | +|-----------|--------|--------|--------|--------|--------| +| OpenBLAS | 12.47 | 12.36 | 12.25 | 12.13 | 12.08 | +| MKLML | 22.50 | 43.90 | 81.22 | 132.92 | 199.69 | +| MKL-DNN | 221.69 | 341.33 | 428.09 | 528.24 | 624.18 | + + ### Laptop TBD ### Desktop From e670453518ff1743e764dd98c0daecaa2539e862 Mon Sep 17 00:00:00 2001 From: tensor-tang Date: Fri, 17 Nov 2017 14:01:58 +0800 Subject: [PATCH 014/193] add script to check the cpu env --- paddle/scripts/check_env.sh | 141 ++++++++++++++++++++++++++++++++++++ 1 file changed, 141 insertions(+) create mode 100755 paddle/scripts/check_env.sh diff --git a/paddle/scripts/check_env.sh b/paddle/scripts/check_env.sh new file mode 100755 index 0000000000..557e3f208f --- /dev/null +++ b/paddle/scripts/check_env.sh @@ -0,0 +1,141 @@ +#!/bin/bash + +if [ "`uname -s`" != "Linux" ]; then + echo "Current scenario only support in Linux yet!" + exit 0 +fi + +echo "========================= Hardware Information =========================" +sockets=`grep 'physical id' /proc/cpuinfo | sort -u | wc -l` +cores_per_socket=`grep 'core id' /proc/cpuinfo | sort -u | wc -l` +ht=`lscpu |grep "per core" |awk -F':' '{print $2}'|xargs` +physical_cores=$((sockets * cores_per_socket)) +virtual_cores=`grep 'processor' /proc/cpuinfo | sort -u | wc -l` +numa_nodes=`lscpu |grep "NUMA node(s)"|awk -F':' '{print $2}'|xargs` +echo "CPU Name : `lscpu |grep \"name\" |awk -F':' '{print $2}'|xargs`" +echo "CPU Family : `lscpu |grep \"CPU family\" |awk -F':' '{print $2}'|xargs`" +echo "Socket Number : $sockets" +echo "Cores Per Socket : $cores_per_socket" +echo "Total Physical Cores : $physical_cores" +echo "Total Virtual Cores : $virtual_cores" +if [ $ht -eq 1 ]; then + echo "Hyper Threading : OFF" + if [ $physical_cores -ne $virtual_cores ]; then + echo "Error: HT logical error" + fi +else + echo "Hyper Threading : ON" + if [ $physical_cores -ge $virtual_cores ]; then + echo "Error: HT logical error" + fi +fi +echo "NUMA Nodes : $numa_nodes" +if [ $numa_nodes -lt $sockets ]; then + echo "Warning: NUMA node is not enough for the best performance,\ + at least $sockets" +fi + +echo "-------------------------- Memory Information --------------------------" +echo "DIMMs max slots : `dmidecode | grep "Bank Locator" | wc -l`" +# dmidecode support start from 2.11 +num_dimms_installed=`dmidecode | grep "Memory Device Mapped" | wc -l` +num_clock_configed=`dmidecode | grep -i "Configured Clock Speed" |grep -i "Hz" |wc -l` +echo "Installed DIMM number : $num_dimms_installed" +if [ $num_dimms_installed -ne $num_clock_configed ]; then + echo "Error: installed DIMMs do ont match configured clocks: $num_clock_configed" +fi +echo "Memory Size : `free -h |grep -i mem |awk -F' ' '{print $2}'|xargs`" +echo "Swap Memory Size : `free -h |grep -i swap |awk -F' ' '{print $2}'|xargs`" +echo "Total Memory Size : `free -th |grep -i total |tail -n 1| awk -F' ' '{print $2}'|xargs`" +echo "Max Memory Capacity : `dmidecode |grep -i \"maximum capacity\"|sort -u|awk -F':' '{print $2}'|xargs`" +# DIMMs fequency +clock_speeds=`dmidecode | grep -i "Configured Clock Speed" | grep -i "Hz" |sort -u | awk -F':' '{print $2}'|xargs` +echo "Configed Clock Speed : $clock_speeds" +num_clock_type=`dmidecode | grep -i "Configured Clock Speed" | grep -i "Hz" |sort -u | wc -l` +if [ $num_clock_type -ne 1 ]; then + echo "Warning: Have more than 1 speed type, all DIMMs should have same fequency: $clock_speeds" +fi + +echo "-------------------------- Turbo Information --------------------------" +scaling_drive=`cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_driver` +echo "Scaling Driver : $scaling_drive" +if [ $scaling_drive == "intel_pstate" ] && [ -e /sys/devices/system/cpu/intel_pstate/no_turbo ]; then + turbo=`cat /sys/devices/system/cpu/intel_pstate/no_turbo` + if [ $turbo -eq 1 ]; then + echo "Turbo Status : OFF" + else + echo "Turbo Status : ON" + fi +else + echo "Warning: Scaling driver is not intel_pstarte, maybe should enable it in BIOS" + echo "Turbo Status : Unknown" +fi +# cpu frequency +num_max_freq=`cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_max_freq| sort -u |wc -l` +num_min_freq=`cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_min_freq| sort -u |wc -l` +if [ $num_max_freq -ne 1 ]; then + echo "Error: the max_frequency of all CPU should be equal" +fi +if [ $num_min_freq -ne 1 ]; then + echo "Error: the min_frequency of all CPU should be equal" +fi +max_freq=`cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_max_freq| uniq|xargs` # kHz +max_freq=`awk 'BEGIN{printf "%.2f",('$max_freq' / 1000000)}'` # GHz +min_freq=`cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_min_freq| uniq|xargs` # kHz +min_freq=`awk 'BEGIN{printf "%.2f",('$min_freq' / 1000000)}'` # GHz +echo "CPU Max Frequency : $max_freq GHz" +echo "CPU Min Frequency : $min_freq GHz" +# cpu governor +num_governor=`cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor| sort -u |wc -l` +if [ $num_governor -ne 1 ]; then + echo "Error: the governor of all CPU should be the same" +fi +governor=`cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor| sort -u |uniq` +echo "CPU Freq Governor : $governor" + + +echo "========================= Software Information =========================" +echo "BIOS Release Date : `dmidecode | grep "Release Date"|awk -F ':' '{print $2}'|xargs`" +echo "OS Version : `cat /etc/redhat-release`" +echo "Kernel Release Version : `uname -r`" +echo "Kernel Patch Version : `uname -v`" +echo "GCC Version :`gcc --version | head -n 1|awk -F '\\\(GCC\\\)' '{print $2}'`" +echo "CMake Version :`cmake --version | head -n 1 | awk -F 'version' '{print $2}'`" +echo "------------------ Environment Variables Information -------------------" +kmp_affinity=`env | grep KMP_AFFINITY` +omp_dynamic=`env | grep OMP_DYNAMIC` +omp_nested=`env | grep OMP_NESTED` +omp_num_threads=`env | grep OMP_NUM_THREADS` +mkl_num_threads=`env | grep MKL_NUM_THREADS` +mkl_dynamic=`env | grep MKL_DYNAMIC` +if [ ! $kmp_affinity ]; then kmp_affinity="unset"; fi +if [ ! $omp_dynamic ]; then omp_dynamic="unset"; fi +if [ ! $omp_nested ]; then omp_nested="unset"; fi +if [ ! $omp_num_threads ]; then omp_num_threads="unset"; fi +if [ ! $mkl_num_threads ]; then mkl_num_threads="unset"; fi +if [ ! $mkl_dynamic ]; then mkl_dynamic="unset"; fi +echo "KMP_AFFINITY : $kmp_affinity" +echo "OMP_DYNAMIC : $omp_dynamic" +echo "OMP_NESTED : $omp_nested" +echo "OMP_NUM_THREADS : $omp_num_threads" +echo "MKL_NUM_THREADS : $mkl_num_threads" +echo "MKL_DYNAMIC : $mkl_dynamic" +# Check if any MKL related libraries have been installed in LD_LIBRARY_PATH +for path in `echo $LD_LIBRARY_PATH | awk -F ':' '{for(i=1;i<=NF;++i)print $i}'`; do + mkldnn_found=`find $path -name "libmkldnn.so"` + if [ "$mkldnn_found" ]; then + echo "Found MKL-DNN : $mkldnn_found" + fi + mklml_found=`find $path -name "libmklml_intel.so"` + if [ "$mklml_found" ]; then + echo "Found MKLML : $mklml_found" + fi + iomp_found=`find $path -name "libiomp5.so"` + if [ "$iomp_found" ]; then + echo "Found IOMP : $iomp_found" + fi +done + +# dump all details for fully check +lscpu > lscpu.dump +dmidecode > dmidecode.dump From 62c00e00ebbd0e5605877abcdf995045757ff1b4 Mon Sep 17 00:00:00 2001 From: tensor-tang Date: Tue, 5 Dec 2017 22:14:50 +0800 Subject: [PATCH 015/193] add dimms locator info --- paddle/scripts/check_env.sh | 34 ++++++++++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/paddle/scripts/check_env.sh b/paddle/scripts/check_env.sh index 557e3f208f..03fb102705 100755 --- a/paddle/scripts/check_env.sh +++ b/paddle/scripts/check_env.sh @@ -36,13 +36,39 @@ if [ $numa_nodes -lt $sockets ]; then fi echo "-------------------------- Memory Information --------------------------" -echo "DIMMs max slots : `dmidecode | grep "Bank Locator" | wc -l`" # dmidecode support start from 2.11 -num_dimms_installed=`dmidecode | grep "Memory Device Mapped" | wc -l` -num_clock_configed=`dmidecode | grep -i "Configured Clock Speed" |grep -i "Hz" |wc -l` +max_dimms=0 +num_dimms_installed=0 +for dimm_id in `dmidecode |grep Locator|sort -u | awk -F ':' '{print $2}'`; do + num_refered=`dmidecode |grep -c "$dimm_id"` + # the acutal dimm id should be refered only once + if [ $num_refered -eq 1 ]; then + num_unknown=`dmidecode | awk '/'$dimm_id'/ {s=1}; {if (s==1) {a[NR]=$0}}; + /Manufacturer/ {s=0; for (i in a) print a[i]; delete a}' |grep -ic unknown` + if [ $num_unknown -eq 0 ]; then + dimms_installed="$dimms_installed \n $dimm_id" + ((num_dimms_installed++)) + else + dimms_uninstalled="$dimms_uninstalled \n $dimm_id" + fi + ((max_dimms++)) + fi +done echo "Installed DIMM number : $num_dimms_installed" +num_dimms_mapped=`dmidecode | grep "Memory Device Mapped" | wc -l` +if [ $num_dimms_installed -ne $num_dimms_mapped ]; then + echo "Error: The installed DIMMs number does ont match the mapped memory device: $num_dimms_mapped" +fi +num_clock_configed=`dmidecode | grep -i "Configured Clock Speed" |grep -ic "Hz"` if [ $num_dimms_installed -ne $num_clock_configed ]; then - echo "Error: installed DIMMs do ont match configured clocks: $num_clock_configed" + echo "Error: The installed DIMMs number does ont match configured clocks: $num_clock_configed" +fi +echo -e "Installed DIMMs Locator: $dimms_installed" +echo -e "Not installed DIMMs : $dimms_uninstalled" +max_dimm_slots=`dmidecode | grep -c "Bank Locator"` +echo "DIMMs max slots : $max_dimm_slots" +if [ $max_dimms -ne $max_dimm_slots ]; then + echo "Error: The max dimm slots do not match the max dimms: $max_dimms" fi echo "Memory Size : `free -h |grep -i mem |awk -F' ' '{print $2}'|xargs`" echo "Swap Memory Size : `free -h |grep -i swap |awk -F' ' '{print $2}'|xargs`" From 8dacb4050b49be79e830acb570f562790bdd8538 Mon Sep 17 00:00:00 2001 From: Yancey1989 Date: Thu, 7 Dec 2017 14:19:52 +0800 Subject: [PATCH 016/193] install dmidecode in product docker image --- paddle/scripts/docker/build.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/paddle/scripts/docker/build.sh b/paddle/scripts/docker/build.sh index 0f889e6853..3c6ec6faba 100644 --- a/paddle/scripts/docker/build.sh +++ b/paddle/scripts/docker/build.sh @@ -175,7 +175,7 @@ EOF # run paddle version to install python packages first RUN apt-get update &&\ ${NCCL_DEPS}\ - apt-get install -y wget python-pip && pip install -U pip && \ + apt-get install -y wget python-pip dmidecode && pip install -U pip && \ pip install /*.whl; apt-get install -f -y && \ apt-get clean -y && \ rm -f /*.whl && \ From f291abfc53055c0233aefbb62d4e6e5fca69e2da Mon Sep 17 00:00:00 2001 From: Yu Yang Date: Thu, 7 Dec 2017 15:35:03 +0800 Subject: [PATCH 017/193] Add HasCUDNN to detect if CUDNN is installed or not (#6349) * Add HasCUDNN to detect if CUDNN is installed or not * Fix CI --- paddle/platform/dynload/cudnn.cc | 18 +++++++++- paddle/platform/dynload/cudnn.h | 3 ++ paddle/platform/dynload/dynamic_loader.cc | 41 +++++++++++++---------- 3 files changed, 43 insertions(+), 19 deletions(-) diff --git a/paddle/platform/dynload/cudnn.cc b/paddle/platform/dynload/cudnn.cc index 761d9edd87..76ec82e108 100644 --- a/paddle/platform/dynload/cudnn.cc +++ b/paddle/platform/dynload/cudnn.cc @@ -12,7 +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 "paddle/platform/dynload/cudnn.h" +#include "paddle/platform/enforce.h" namespace paddle { namespace platform { @@ -41,6 +42,21 @@ CUDNN_DNN_ROUTINE_EACH_R5(DEFINE_WRAP); CUDNN_DNN_ROUTINE_EACH_R7(DEFINE_WRAP); #endif +#ifdef PADDLE_USE_DSO +bool HasCUDNN() { + std::call_once(cudnn_dso_flag, GetCudnnDsoHandle, &cudnn_dso_handle); + return cudnn_dso_handle != nullptr; +} + +void EnforceCUDNNLoaded(const char* fn_name) { + PADDLE_ENFORCE(cudnn_dso_handle != nullptr, + "Cannot load cudnn shared library. Cannot invoke method %s", + fn_name); +} +#else +bool HasCUDNN() { return true; } +#endif + } // namespace dynload } // namespace platform } // namespace paddle diff --git a/paddle/platform/dynload/cudnn.h b/paddle/platform/dynload/cudnn.h index 61caac5450..8c937b37d7 100644 --- a/paddle/platform/dynload/cudnn.h +++ b/paddle/platform/dynload/cudnn.h @@ -25,9 +25,11 @@ namespace dynload { extern std::once_flag cudnn_dso_flag; extern void* cudnn_dso_handle; +extern bool HasCUDNN(); #ifdef PADDLE_USE_DSO +extern void EnforceCUDNNLoaded(const char* fn_name); #define DECLARE_DYNAMIC_LOAD_CUDNN_WRAP(__name) \ struct DynLoad__##__name { \ template \ @@ -36,6 +38,7 @@ extern void* cudnn_dso_handle; std::call_once(cudnn_dso_flag, \ paddle::platform::dynload::GetCudnnDsoHandle, \ &cudnn_dso_handle); \ + EnforceCUDNNLoaded(#__name); \ void* p_##__name = dlsym(cudnn_dso_handle, #__name); \ return reinterpret_cast(p_##__name)(args...); \ } \ diff --git a/paddle/platform/dynload/dynamic_loader.cc b/paddle/platform/dynload/dynamic_loader.cc index 6feba42c0d..7a82d06a0a 100644 --- a/paddle/platform/dynload/dynamic_loader.cc +++ b/paddle/platform/dynload/dynamic_loader.cc @@ -78,12 +78,11 @@ static inline void GetDsoHandleFromDefaultPath(std::string& dso_path, *dso_handle = dlopen(dso_path.c_str(), dynload_flags); if (nullptr == *dso_handle) { if (dso_path == "libcudnn.dylib") { - PADDLE_ENFORCE(true, - "Note: [Recommend] copy cudnn into /usr/local/cuda/ \n " - "For instance, sudo tar -xzf " - "cudnn-7.5-osx-x64-v5.0-ga.tgz -C /usr/local \n sudo " - "chmod a+r /usr/local/cuda/include/cudnn.h " - "/usr/local/cuda/lib/libcudnn*"); + LOG(WARNING) << "Note: [Recommend] copy cudnn into /usr/local/cuda/ \n " + "For instance, sudo tar -xzf " + "cudnn-7.5-osx-x64-v5.0-ga.tgz -C /usr/local \n sudo " + "chmod a+r /usr/local/cuda/include/cudnn.h " + "/usr/local/cuda/lib/libcudnn*"; } } } @@ -92,7 +91,8 @@ static inline void GetDsoHandleFromDefaultPath(std::string& dso_path, static inline void GetDsoHandleFromSearchPath(const std::string& search_root, const std::string& dso_name, - void** dso_handle) { + void** dso_handle, + bool throw_on_error = true) { int dynload_flags = RTLD_LAZY | RTLD_LOCAL; *dso_handle = nullptr; @@ -111,15 +111,19 @@ static inline void GetDsoHandleFromSearchPath(const std::string& search_root, GetDsoHandleFromDefaultPath(dlPath, dso_handle, dynload_flags); } } - PADDLE_ENFORCE(nullptr != *dso_handle, - "Failed to find dynamic library: %s ( %s ) \n Please specify " - "its path correctly using following ways: \n Method. set " - "environment variable LD_LIBRARY_PATH on Linux or " - "DYLD_LIBRARY_PATH on Mac OS. \n For instance, issue command: " - "export LD_LIBRARY_PATH=... \n Note: After Mac OS 10.11, " - "using the DYLD_LIBRARY_PATH is impossible unless System " - "Integrity Protection (SIP) is disabled.", - dlPath, dlerror()); + auto error_msg = + "Failed to find dynamic library: %s ( %s ) \n Please specify " + "its path correctly using following ways: \n Method. set " + "environment variable LD_LIBRARY_PATH on Linux or " + "DYLD_LIBRARY_PATH on Mac OS. \n For instance, issue command: " + "export LD_LIBRARY_PATH=... \n Note: After Mac OS 10.11, " + "using the DYLD_LIBRARY_PATH is impossible unless System " + "Integrity Protection (SIP) is disabled."; + if (throw_on_error) { + PADDLE_ENFORCE(nullptr != *dso_handle, error_msg, dlPath, dlerror()); + } else if (nullptr == *dso_handle) { + LOG(WARNING) << string::Sprintf(error_msg, dlPath, dlerror()); + } } void GetCublasDsoHandle(void** dso_handle) { @@ -132,9 +136,10 @@ void GetCublasDsoHandle(void** dso_handle) { void GetCudnnDsoHandle(void** dso_handle) { #if defined(__APPLE__) || defined(__OSX__) - GetDsoHandleFromSearchPath(FLAGS_cudnn_dir, "libcudnn.dylib", dso_handle); + GetDsoHandleFromSearchPath(FLAGS_cudnn_dir, "libcudnn.dylib", dso_handle, + false); #else - GetDsoHandleFromSearchPath(FLAGS_cudnn_dir, "libcudnn.so", dso_handle); + GetDsoHandleFromSearchPath(FLAGS_cudnn_dir, "libcudnn.so", dso_handle, false); #endif } From 6b9567e0ac6bef93676dabc18a7b9b4463a95d40 Mon Sep 17 00:00:00 2001 From: Yang Yu Date: Thu, 7 Dec 2017 15:44:22 +0800 Subject: [PATCH 018/193] Remove DeviceContext::Finish --- paddle/platform/device_context.cc | 4 ---- paddle/platform/device_context.h | 5 ----- 2 files changed, 9 deletions(-) diff --git a/paddle/platform/device_context.cc b/paddle/platform/device_context.cc index 7afcdfce93..ae4f0bf896 100644 --- a/paddle/platform/device_context.cc +++ b/paddle/platform/device_context.cc @@ -122,10 +122,6 @@ Place CUDADeviceContext::GetPlace() const { return place_; } void CUDADeviceContext::Wait() const { PADDLE_ENFORCE(cudaStreamSynchronize(stream_)); -} - -void CUDADeviceContext::Finish() const { - Wait(); PADDLE_ENFORCE(cudaGetLastError()); } diff --git a/paddle/platform/device_context.h b/paddle/platform/device_context.h index 526d089e35..ef5f19214d 100644 --- a/paddle/platform/device_context.h +++ b/paddle/platform/device_context.h @@ -46,8 +46,6 @@ class DeviceContext { DeviceType* GetEigenDevice() const; virtual void Wait() const {} - - virtual void Finish() const {} }; class CPUDeviceContext : public DeviceContext { @@ -79,9 +77,6 @@ class CUDADeviceContext : public DeviceContext { /*! \brief Wait for all operations completion in the stream. */ void Wait() const override; - /*! \brief Check potential errors for the cuda kernel calls. */ - void Finish() const override; - /*! \brief Return place in the device context. */ Place GetPlace() const override; From 2f07e6cc2467b1d44b769804f2aff8854032bd51 Mon Sep 17 00:00:00 2001 From: Luo Tao Date: Thu, 7 Dec 2017 16:17:19 +0800 Subject: [PATCH 019/193] add graph in IntelOptimizedReadme --- benchmark/IntelOptimizedPaddle.md | 33 +++++++++---------------- benchmark/figs/googlenet-cpu-train.png | Bin 0 -> 18254 bytes benchmark/figs/resnet-cpu-train.png | Bin 0 -> 20243 bytes benchmark/figs/vgg-cpu-train.png | Bin 0 -> 18336 bytes 4 files changed, 11 insertions(+), 22 deletions(-) create mode 100644 benchmark/figs/googlenet-cpu-train.png create mode 100644 benchmark/figs/resnet-cpu-train.png create mode 100644 benchmark/figs/vgg-cpu-train.png diff --git a/benchmark/IntelOptimizedPaddle.md b/benchmark/IntelOptimizedPaddle.md index 16c2390fd3..26930a7637 100644 --- a/benchmark/IntelOptimizedPaddle.md +++ b/benchmark/IntelOptimizedPaddle.md @@ -2,21 +2,17 @@ Machine: -- Server - - Intel(R) Xeon(R) Gold 6148 CPU @ 2.40GHz, 2 Sockets, 20 Cores per socket -- Laptop - - DELL XPS15-9560-R1745: i7-7700HQ 8G 256GSSD - - i5 MacBook Pro (Retina, 13-inch, Early 2015) -- Desktop - - i7-6700k +- Server: Intel(R) Xeon(R) Gold 6148 CPU @ 2.40GHz, 2 Sockets, 20 Cores per socket +- Laptop: TBD System: CentOS release 6.3 (Final), Docker 1.12.1. -PaddlePaddle: paddlepaddle/paddle:latest (for MKLML and MKL-DNN), paddlepaddle/paddle:latest-openblas (for OpenBLAS) -- MKL-DNN tag v0.11 -- MKLML 2018.0.1.20171007 -- OpenBLAS v0.2.20 -(TODO: will rerun after 0.11.0) +PaddlePaddle: (TODO: will rerun after 0.11.0) +- paddlepaddle/paddle:latest (for MKLML and MKL-DNN) + - MKL-DNN tag v0.11 + - MKLML 2018.0.1.20171007 +- paddlepaddle/paddle:latest-openblas (for OpenBLAS) + - OpenBLAS v0.2.20 On each machine, we will test and compare the performance of training on single node using MKL-DNN / MKLML / OpenBLAS respectively. @@ -35,9 +31,7 @@ Input image size - 3 * 224 * 224, Time: images/second | MKLML | 12.12 | 13.70 | 16.18 | | MKL-DNN | 28.46 | 29.83 | 30.44 | - -chart on batch size 128 -TBD + - ResNet-50 @@ -47,9 +41,7 @@ TBD | MKLML | 32.52 | 31.89 | 33.12 | | MKL-DNN | 81.69 | 82.35 | 84.08 | - -chart on batch size 128 -TBD + - GoogLeNet @@ -59,10 +51,7 @@ TBD | MKLML | 128.46| 137.89| 158.63 | | MKL-DNN     | 250.46| 264.83| 269.50 | -chart on batch size 128 -TBD + ### Laptop TBD -### Desktop -TBD diff --git a/benchmark/figs/googlenet-cpu-train.png b/benchmark/figs/googlenet-cpu-train.png new file mode 100644 index 0000000000000000000000000000000000000000..c3f67faf096fe9b45dd815f294b41679dc7c9e54 GIT binary patch literal 18254 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 lnuqV?{%77{~KUcujl{( literal 0 HcmV?d00001 diff --git a/benchmark/figs/resnet-cpu-train.png b/benchmark/figs/resnet-cpu-train.png new file mode 100644 index 0000000000000000000000000000000000000000..b96ecd5ff940c0d000613b1ed1f11fb16796cf47 GIT binary patch literal 20243 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 lkO1}p1*qU{{u{0P1OJZ literal 0 HcmV?d00001 diff --git a/benchmark/figs/vgg-cpu-train.png b/benchmark/figs/vgg-cpu-train.png new file mode 100644 index 0000000000000000000000000000000000000000..f830ca6a87d10b72a5113636dd5686ab25a2e864 GIT binary patch literal 18336 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 Date: Thu, 7 Dec 2017 16:33:18 +0800 Subject: [PATCH 020/193] follow comments and add limited version of dmidecode --- paddle/scripts/check_env.sh | 105 +++++++++++++++++++++++++++++++++--- 1 file changed, 97 insertions(+), 8 deletions(-) diff --git a/paddle/scripts/check_env.sh b/paddle/scripts/check_env.sh index 03fb102705..564c1c09be 100755 --- a/paddle/scripts/check_env.sh +++ b/paddle/scripts/check_env.sh @@ -12,7 +12,7 @@ ht=`lscpu |grep "per core" |awk -F':' '{print $2}'|xargs` physical_cores=$((sockets * cores_per_socket)) virtual_cores=`grep 'processor' /proc/cpuinfo | sort -u | wc -l` numa_nodes=`lscpu |grep "NUMA node(s)"|awk -F':' '{print $2}'|xargs` -echo "CPU Name : `lscpu |grep \"name\" |awk -F':' '{print $2}'|xargs`" +echo "CPU Name : `cat /proc/cpuinfo |grep -i "model name" |uniq |awk -F ':' '{print $2}'|xargs`" echo "CPU Family : `lscpu |grep \"CPU family\" |awk -F':' '{print $2}'|xargs`" echo "Socket Number : $sockets" echo "Cores Per Socket : $cores_per_socket" @@ -37,14 +37,24 @@ fi echo "-------------------------- Memory Information --------------------------" # dmidecode support start from 2.11 +dmi_ver=`dmidecode --version|awk -F '.' '{print $1}'|xargs` +if [ $dmi_ver -lt 2 ]; then + echo "Error: dmidecode unknown or version is too old" + exit 0 +fi +if [ `dmidecode | grep -ic "Permission denied"` -ne 0 ]; then + echo "Error: need root to run dmidecode" + exit 0 +fi max_dimms=0 num_dimms_installed=0 for dimm_id in `dmidecode |grep Locator|sort -u | awk -F ':' '{print $2}'`; do - num_refered=`dmidecode |grep -c "$dimm_id"` - # the acutal dimm id should be refered only once + num_refered=`dmidecode |grep -wc "$dimm_id"` + # the actual dimm id should be refered only once if [ $num_refered -eq 1 ]; then - num_unknown=`dmidecode | awk '/'$dimm_id'/ {s=1}; {if (s==1) {a[NR]=$0}}; - /Manufacturer/ {s=0; for (i in a) print a[i]; delete a}' |grep -ic unknown` + num_unknown=`dmidecode | awk '/'$dimm_id'/ {s=1; f=0}; + /Unknown/ {f=1}; + /Manufacturer/ {if (s==1) {print f; exit 0;}};'` if [ $num_unknown -eq 0 ]; then dimms_installed="$dimms_installed \n $dimm_id" ((num_dimms_installed++)) @@ -70,9 +80,23 @@ echo "DIMMs max slots : $max_dimm_slots" if [ $max_dimms -ne $max_dimm_slots ]; then echo "Error: The max dimm slots do not match the max dimms: $max_dimms" fi -echo "Memory Size : `free -h |grep -i mem |awk -F' ' '{print $2}'|xargs`" -echo "Swap Memory Size : `free -h |grep -i swap |awk -F' ' '{print $2}'|xargs`" -echo "Total Memory Size : `free -th |grep -i total |tail -n 1| awk -F' ' '{print $2}'|xargs`" +free_ver_main=`free -V|awk -F ' ' '{print $NF}'|awk -F '.' '{print $1}'` +free_ver_sub=`free -V|awk -F ' ' '{print $NF}'|awk -F '.' '{print $2}'` +if [ $free_ver_main -lt 3 ] || [ $free_ver_sub -lt 3 ]; then + mem_sz=`free |grep -i mem |awk -F' ' '{print $2}'|xargs` + swap_sz=`free |grep -i swap |awk -F' ' '{print $2}'|xargs` + total_sz=`free -t |grep -i total |tail -n 1| awk -F' ' '{print $2}'|xargs` + mem_sz="`awk 'BEGIN{printf "%.1f\n",('$mem_sz'/1024/1024)}'` GB" + swap_sz="`awk 'BEGIN{printf "%.1f\n",('$swap_sz'/1024/1024)}'` GB" + total_sz="`awk 'BEGIN{printf "%.1f\n",('$total_sz'/1024/1024)}'` GB" +else + mem_sz=`free -h |grep -i mem |awk -F' ' '{print $2}'|xargs` + swap_sz=`free -h |grep -i swap |awk -F' ' '{print $2}'|xargs` + total_sz=`free -th |grep -i total |tail -n 1| awk -F' ' '{print $2}'|xargs` +fi +echo "Memory Size : $mem_sz" +echo "Swap Memory Size : $swap_sz" +echo "Total Memory Size : $total_sz" echo "Max Memory Capacity : `dmidecode |grep -i \"maximum capacity\"|sort -u|awk -F':' '{print $2}'|xargs`" # DIMMs fequency clock_speeds=`dmidecode | grep -i "Configured Clock Speed" | grep -i "Hz" |sort -u | awk -F':' '{print $2}'|xargs` @@ -165,3 +189,68 @@ done # dump all details for fully check lscpu > lscpu.dump dmidecode > dmidecode.dump + +# The expected result would be like: +# ========================= Hardware Information ========================= +# CPU Name : Intel(R) Xeon(R) Gold 6148M CPU @ 2.40GHz +# CPU Family : 6 +# Socket Number : 2 +# Cores Per Socket : 20 +# Total Physical Cores : 40 +# Total Virtual Cores : 40 +# Hyper Threading : OFF +# NUMA Nodes : 2 +# -------------------------- Memory Information -------------------------- +# Installed DIMM number : 12 +# Installed DIMMs Locator: +# CPU1_DIMM_A1 +# CPU1_DIMM_B1 +# CPU1_DIMM_C1 +# CPU1_DIMM_D1 +# CPU1_DIMM_E1 +# CPU1_DIMM_F1 +# CPU2_DIMM_A1 +# CPU2_DIMM_B1 +# CPU2_DIMM_C1 +# CPU2_DIMM_D1 +# CPU2_DIMM_E1 +# CPU2_DIMM_F1 +# Not installed DIMMs : +# CPU1_DIMM_A2 +# CPU1_DIMM_B2 +# CPU1_DIMM_C2 +# CPU1_DIMM_D2 +# CPU1_DIMM_E2 +# CPU1_DIMM_F2 +# CPU2_DIMM_A2 +# CPU2_DIMM_B2 +# CPU2_DIMM_C2 +# CPU2_DIMM_D2 +# CPU2_DIMM_E2 +# CPU2_DIMM_F2 +# DIMMs max slots : 24 +# Memory Size : 376G +# Swap Memory Size : 4.0G +# Total Memory Size : 380G +# Max Memory Capacity : 2304 GB +# Configed Clock Speed : 2666 MHz +# -------------------------- Turbo Information -------------------------- +# Scaling Driver : intel_pstate +# Turbo Status : ON +# CPU Max Frequency : 3.70 GHz +# CPU Min Frequency : 1.00 GHz +# CPU Freq Governor : performance +# ========================= Software Information ========================= +# BIOS Release Date : 03/10/2017 +# OS Version : CentOS Linux release 7.3.1611 (Core) +# Kernel Release Version : 3.10.0-514.el7.x86_64 +# Kernel Patch Version : #1 SMP Tue Nov 22 16:42:41 UTC 2016 +# GCC Version : 4.8.5 20150623 (Red Hat 4.8.5-11) +# CMake Version : 3.5.2 +# ------------------ Environment Variables Information ------------------- +# KMP_AFFINITY : unset +# OMP_DYNAMIC : unset +# OMP_NESTED : unset +# OMP_NUM_THREADS : unset +# MKL_NUM_THREADS : unset +# MKL_DYNAMIC : unset From 32cc0db1512bd1e7063ff0e3ae080602bb7849d2 Mon Sep 17 00:00:00 2001 From: tensor-tang Date: Thu, 7 Dec 2017 17:31:38 +0800 Subject: [PATCH 021/193] check if cmake has been installed --- paddle/scripts/check_env.sh | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/paddle/scripts/check_env.sh b/paddle/scripts/check_env.sh index 564c1c09be..af16b84ca8 100755 --- a/paddle/scripts/check_env.sh +++ b/paddle/scripts/check_env.sh @@ -150,7 +150,12 @@ echo "OS Version : `cat /etc/redhat-release`" echo "Kernel Release Version : `uname -r`" echo "Kernel Patch Version : `uname -v`" echo "GCC Version :`gcc --version | head -n 1|awk -F '\\\(GCC\\\)' '{print $2}'`" -echo "CMake Version :`cmake --version | head -n 1 | awk -F 'version' '{print $2}'`" +if command -v cmake >/dev/null 2>&1; then + cmake_ver=`cmake --version | head -n 1 | awk -F 'version' '{print $2}'` +else + cmake_ver=" Not installed" +fi +echo "CMake Version :$cmake_ver" echo "------------------ Environment Variables Information -------------------" kmp_affinity=`env | grep KMP_AFFINITY` omp_dynamic=`env | grep OMP_DYNAMIC` From 93a225563939c7b03fe296316e322363e7f2633f Mon Sep 17 00:00:00 2001 From: ying Date: Thu, 7 Dec 2017 17:52:13 +0800 Subject: [PATCH 022/193] add softsign into doc. --- doc/api/v2/config/activation.rst | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/doc/api/v2/config/activation.rst b/doc/api/v2/config/activation.rst index eca3ce03bc..5317e66b64 100644 --- a/doc/api/v2/config/activation.rst +++ b/doc/api/v2/config/activation.rst @@ -99,3 +99,10 @@ STanh .. automodule:: paddle.v2.activation :members: STanh :noindex: + +SoftSign +======== + +.. automodule:: paddle.v2.activation + :members: SoftSign + :noindex: From cfe6d694dd6e3cf77cf7000721aa71a8396ea988 Mon Sep 17 00:00:00 2001 From: Luo Tao Date: Thu, 7 Dec 2017 18:11:25 +0800 Subject: [PATCH 023/193] message cxx compiler version --- CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index c6c82b61e8..fa233939eb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -22,6 +22,7 @@ SET(CMAKE_C_FLAGS_RELWITHDEBINFO "-O3 -g -DNDEBUG") include(system) project(paddle CXX C Go) +MESSAGE(STATUS "CXX compiler version:" ${CMAKE_C_COMPILER_VERSION}) find_package(Sphinx) if(NOT CMAKE_CROSSCOMPILING) From 3a0a4586a3129bdc1100276236bc1cc50227fa8f Mon Sep 17 00:00:00 2001 From: QI JUN Date: Thu, 7 Dec 2017 20:24:36 +0800 Subject: [PATCH 024/193] refine GPU memory allocation policy (#6373) * fix gpu memory allocation policy * refine codes * fix code style * follow comments --- paddle/memory/detail/system_allocator.cc | 2 +- paddle/memory/memory.cc | 16 +++++++++------- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/paddle/memory/detail/system_allocator.cc b/paddle/memory/detail/system_allocator.cc index 6b4e46f56a..b543b767e8 100644 --- a/paddle/memory/detail/system_allocator.cc +++ b/paddle/memory/detail/system_allocator.cc @@ -83,7 +83,7 @@ void* GPUAllocator::Alloc(size_t& index, size_t size) { paddle::platform::GpuMemoryUsage(available, capacity); // Reserve memory for page tables, etc. - size_t reserving = capacity - paddle::platform::GpuMaxAllocSize(); + size_t reserving = 0.05 * capacity + paddle::platform::GpuMinChunkSize(); size_t usable = available > reserving ? available - reserving : 0; // If remaining size no less than expected size, using general diff --git a/paddle/memory/memory.cc b/paddle/memory/memory.cc index 95cfe2525e..9cafdfda75 100644 --- a/paddle/memory/memory.cc +++ b/paddle/memory/memory.cc @@ -64,19 +64,21 @@ BuddyAllocator* GetGPUBuddyAllocator(int gpu_id) { int gpu_num = platform::GetCUDADeviceCount(); as = new BuddyAllocator*[gpu_num]; for (int gpu = 0; gpu < gpu_num; gpu++) { - platform::SetDeviceId(gpu); - as[gpu] = new BuddyAllocator(new detail::GPUAllocator, - platform::GpuMinChunkSize(), - platform::GpuMaxChunkSize()); + as[gpu] = nullptr; } + } + platform::SetDeviceId(gpu_id); + if (!as[gpu_id]) { + as[gpu_id] = new BuddyAllocator(new detail::GPUAllocator, + platform::GpuMinChunkSize(), + platform::GpuMaxChunkSize()); VLOG(10) << "\n\nNOTE: each GPU device use " << FLAGS_fraction_of_gpu_memory_to_use * 100 << "% of GPU memory.\n" - << "You can set environment variable '" - << platform::kEnvFractionGpuMemoryToUse + << "You can set GFlags environment variable '" + << "FLAGS_fraction_of_gpu_memory_to_use" << "' to change the fraction of GPU usage.\n\n"; } - platform::SetDeviceId(gpu_id); return as[gpu_id]; } From 34b9294052a2589aeac5f68bce2658c0fa6afcf7 Mon Sep 17 00:00:00 2001 From: Luo Tao Date: Thu, 7 Dec 2017 20:50:07 +0800 Subject: [PATCH 025/193] add version and path for both CXX and C compiler --- CMakeLists.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index fa233939eb..b309ff37e5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -22,7 +22,8 @@ SET(CMAKE_C_FLAGS_RELWITHDEBINFO "-O3 -g -DNDEBUG") include(system) project(paddle CXX C Go) -MESSAGE(STATUS "CXX compiler version:" ${CMAKE_C_COMPILER_VERSION}) +message(STATUS "CXX compiler: " ${CMAKE_CXX_COMPILER} ", version: " ${CMAKE_CXX_COMPILER_VERSION}) +message(STATUS "C compiler: " ${CMAKE_C_COMPILER} ", version: " ${CMAKE_C_COMPILER_VERSION}) find_package(Sphinx) if(NOT CMAKE_CROSSCOMPILING) From 93563efa19248b0f68a428d5eebec1a5d3800d1a Mon Sep 17 00:00:00 2001 From: chengduoZH Date: Thu, 7 Dec 2017 20:41:30 +0800 Subject: [PATCH 026/193] fix doc --- .../paddle/trainer_config_helpers/layers.py | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/python/paddle/trainer_config_helpers/layers.py b/python/paddle/trainer_config_helpers/layers.py index 8c5cc25d6c..afd8a7579a 100644 --- a/python/paddle/trainer_config_helpers/layers.py +++ b/python/paddle/trainer_config_helpers/layers.py @@ -2722,14 +2722,14 @@ def img_pool_layer(input, .. math:: - w = 1 + int(ceil(input\_width + 2 * padding - pool\_size) / float(stride)) + w = 1 + int(ceil(input\_width + 2 * padding - pool\_size) / float(stride)) \\\\ h = 1 + int(ceil(input\_height + 2 * padding\_y - pool\_size\_y) / float(stride\_y)) - ceil_mode=False: .. math:: - w = 1 + int(floor(input\_width + 2 * padding - pool\_size) / float(stride)) + w = 1 + int(floor(input\_width + 2 * padding - pool\_size) / float(stride)) \\\\ h = 1 + int(floor(input\_height + 2 * padding\_y - pool\_size\_y) / float(stride\_y)) The example usage is: @@ -2863,17 +2863,17 @@ def img_pool3d_layer(input, .. math:: - w = 1 + int(ceil(input\_width + 2 * padding - pool\_size) / float(stride)) - h = 1 + int(ceil(input\_height + 2 * padding\_y - pool\_size\_y) / float(stride\_y)) + w = 1 + int(ceil(input\_width + 2 * padding - pool\_size) / float(stride)) \\\\ + h = 1 + int(ceil(input\_height + 2 * padding\_y - pool\_size\_y) / float(stride\_y)) \\\\ d = 1 + int(ceil(input\_depth + 2 * padding\_z - pool\_size\_z) / float(stride\_z)) - ceil_mode=False: .. math:: - w = 1 + int(floor(input\_width + 2 * padding - pool\_size) / float(stride)) - h = 1 + int(floor(input\_height + 2 * padding\_y - pool\_size\_y) / float(stride\_y)) - d = 1 + int(floor(input\_depth + 2 * padding\_z - pool\_size\_z) / float(stride\_z)) + w = 1 + int(floor(input\_width + 2 * padding - pool\_size) / float(stride)) \\\\ + h = 1 + int(floor(input\_height + 2 * padding\_y - pool\_size\_y) / float(stride\_y)) \\\\ + d = 1 + int(floor(input\_depth + 2 * padding\_z - pool\_size\_z) / float(stride\_z)) \\\\ The example usage is: @@ -5429,12 +5429,12 @@ def maxout_layer(input, groups, num_channels=None, name=None, layer_attr=None): https://arxiv.org/pdf/1312.6082v4.pdf`_ .. math:: - y_{si+j} = \max_k x_{gsi + sk + j} - g = groups - s = input.size / num_channels - 0 \le i < num_channels / groups - 0 \le j < s - 0 \le k < groups + y_{si+j} = \max_k x_{gsi + sk + j} \\\\ + g = groups \\\\ + s = input.size / num\_channels \\\\ + 0 \le i < num\_channels / groups \\\\ + 0 \le j < s \\\\ + 0 \le k < groups \\\\ The simple usage is: From 113c026d12e80dceda1592ec6f1940d0569f4000 Mon Sep 17 00:00:00 2001 From: Abhinav Arora Date: Thu, 7 Dec 2017 20:40:36 +0530 Subject: [PATCH 027/193] Swish activation operator (#6358) --- paddle/operators/activation_op.cc | 19 ++++++++++++ paddle/operators/activation_op.h | 30 +++++++++++++++++++ .../v2/fluid/tests/test_activation_op.py | 16 ++++++++++ 3 files changed, 65 insertions(+) diff --git a/paddle/operators/activation_op.cc b/paddle/operators/activation_op.cc index 83262f950e..7f3118f176 100644 --- a/paddle/operators/activation_op.cc +++ b/paddle/operators/activation_op.cc @@ -506,6 +506,22 @@ It is recommended to use the defaults for this activation. } }; +class SwishOpMaker : public framework::OpProtoAndCheckerMaker { + public: + SwishOpMaker(framework::OpProto *proto, framework::OpAttrChecker *op_checker) + : OpProtoAndCheckerMaker(proto, op_checker) { + AddInput("X", "Input of Swish operator"); + AddOutput("Y", "Output of Swish operator"); + AddAttr("beta", "Constant beta of swish operator").SetDefault(1.0f); + AddComment(R"DOC( +Swish Activation Operator. + +$$y = \frac{x}{1 + e^{- \beta x}}$$ + +)DOC"); + } +}; + } // namespace operators } // namespace paddle @@ -592,6 +608,9 @@ REGISTER_OP(thresholded_relu, ops::ActivationOp, ops::ThresholdedReluOpMaker, REGISTER_OP(hard_sigmoid, ops::ActivationOp, ops::HardSigmoidOpMaker, hard_sigmoid_grad, ops::ActivationOpGrad); +REGISTER_OP(swish, ops::ActivationOp, ops::SwishOpMaker, swish_grad, + ops::ActivationOpGrad); + #define REGISTER_ACTIVATION_CPU_KERNEL(act_type, functor, grad_functor) \ REGISTER_OP_CPU_KERNEL( \ act_type, \ diff --git a/paddle/operators/activation_op.h b/paddle/operators/activation_op.h index 8cd3bfbbd3..ac0e0a3b01 100644 --- a/paddle/operators/activation_op.h +++ b/paddle/operators/activation_op.h @@ -700,6 +700,35 @@ struct HardSigmoidGradFunctor : public BaseActivationFunctor { } }; +template +struct SwishFunctor : public BaseActivationFunctor { + float beta; + typename BaseActivationFunctor::AttrPair GetAttrs() { + return {{"beta", &beta}}; + } + + template + void operator()(Device d, X x, Y y) const { + y.device(d) = x / (static_cast(1) + (static_cast(-beta) * x).exp()); + } +}; + +template +struct SwishGradFunctor : public BaseActivationFunctor { + float beta; + typename BaseActivationFunctor::AttrPair GetAttrs() { + return {{"beta", &beta}}; + } + + template + void operator()(Device d, X x, Y y, dY dy, dX dx) const { + auto temp1 = static_cast(1) / + (static_cast(1) + (static_cast(-beta) * x).exp()); + auto temp2 = temp1 * (static_cast(1) - (beta * y)); + dx.device(d) = dy * ((beta * y) + temp2); + } +}; + } // namespace operators } // namespace paddle @@ -730,4 +759,5 @@ struct HardSigmoidGradFunctor : public BaseActivationFunctor { __macro(elu, ELUFunctor, ELUGradFunctor); \ __macro(hard_shrink, HardShrinkFunctor, HardShrinkGradFunctor); \ __macro(hard_sigmoid, HardSigmoidFunctor, HardSigmoidGradFunctor); \ + __macro(swish, SwishFunctor, SwishGradFunctor); \ __macro(thresholded_relu, ThresholdedReluFunctor, ThresholdedReluGradFunctor); diff --git a/python/paddle/v2/fluid/tests/test_activation_op.py b/python/paddle/v2/fluid/tests/test_activation_op.py index bd52bef260..b052374dc7 100644 --- a/python/paddle/v2/fluid/tests/test_activation_op.py +++ b/python/paddle/v2/fluid/tests/test_activation_op.py @@ -1,6 +1,7 @@ import unittest import numpy as np from op_test import OpTest +from scipy.special import expit class TestExp(OpTest): @@ -455,5 +456,20 @@ class TestHardSigmoid(OpTest): self.check_grad(['X'], 'Y', max_relative_error=0.002) +class TestSwish(OpTest): + def setUp(self): + self.op_type = "swish" + X = np.random.uniform(0.1, 1, [11, 17]).astype("float32") + self.inputs = {'X': X} + self.attrs = {'beta': 2.3} + self.outputs = {'Y': X * expit(self.attrs['beta'] * X)} + + def test_check_output(self): + self.check_output() + + def test_check_grad(self): + self.check_grad(['X'], 'Y', max_relative_error=0.008) + + if __name__ == "__main__": unittest.main() From 3b1529d2e56660aaaefc0e60413dbb7bacb8ff71 Mon Sep 17 00:00:00 2001 From: Luo Tao Date: Fri, 8 Dec 2017 10:51:21 +0800 Subject: [PATCH 028/193] add print_operators_doc in travis ci --- paddle/scripts/travis/build_doc.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/paddle/scripts/travis/build_doc.sh b/paddle/scripts/travis/build_doc.sh index 278485f788..ff0bac6a07 100755 --- a/paddle/scripts/travis/build_doc.sh +++ b/paddle/scripts/travis/build_doc.sh @@ -10,6 +10,8 @@ cmake .. -DCMAKE_BUILD_TYPE=Debug -DWITH_GPU=OFF -DWITH_MKL=OFF -DWITH_DOC=ON make -j `nproc` gen_proto_py make -j `nproc` paddle_python make -j `nproc` paddle_docs paddle_docs_cn +make -j `nproc` print_operators_doc +paddle/pybind/print_operators_doc > doc/en/html/operators.json # check websites for broken links # It will be failed now! From 3c84444795b71f77b26757c95a8162e56ea777b9 Mon Sep 17 00:00:00 2001 From: chengduoZH Date: Fri, 8 Dec 2017 11:30:09 +0800 Subject: [PATCH 029/193] follow comments --- .../paddle/trainer_config_helpers/layers.py | 34 ++++++++++--------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/python/paddle/trainer_config_helpers/layers.py b/python/paddle/trainer_config_helpers/layers.py index afd8a7579a..cd61dc84af 100644 --- a/python/paddle/trainer_config_helpers/layers.py +++ b/python/paddle/trainer_config_helpers/layers.py @@ -2722,15 +2722,15 @@ def img_pool_layer(input, .. math:: - w = 1 + int(ceil(input\_width + 2 * padding - pool\_size) / float(stride)) \\\\ - h = 1 + int(ceil(input\_height + 2 * padding\_y - pool\_size\_y) / float(stride\_y)) + w = 1 + \frac{ceil(input\_width + 2 * padding - pool\_size)}{stride} \\\\ + h = 1 + \frac{ceil(input\_height + 2 * padding\_y - pool\_size\_y)}{stride\_y} - ceil_mode=False: .. math:: - w = 1 + int(floor(input\_width + 2 * padding - pool\_size) / float(stride)) \\\\ - h = 1 + int(floor(input\_height + 2 * padding\_y - pool\_size\_y) / float(stride\_y)) + w = 1 + \frac{floor(input\_width + 2 * padding - pool\_size)}{stride} \\\\ + h = 1 + \frac{floor(input\_height + 2 * padding\_y - pool\_size\_y)}{stride\_y} The example usage is: @@ -2863,17 +2863,17 @@ def img_pool3d_layer(input, .. math:: - w = 1 + int(ceil(input\_width + 2 * padding - pool\_size) / float(stride)) \\\\ - h = 1 + int(ceil(input\_height + 2 * padding\_y - pool\_size\_y) / float(stride\_y)) \\\\ - d = 1 + int(ceil(input\_depth + 2 * padding\_z - pool\_size\_z) / float(stride\_z)) + w = 1 + \frac{ceil(input\_width + 2 * padding - pool\_size)}{stride} \\\\ + h = 1 + \frac{ceil(input\_height + 2 * padding\_y - pool\_size\_y)}{stride\_y} \\\\ + d = 1 + \frac{ceil(input\_depth + 2 * padding\_z - pool\_size\_z)}{stride\_z} - ceil_mode=False: .. math:: - w = 1 + int(floor(input\_width + 2 * padding - pool\_size) / float(stride)) \\\\ - h = 1 + int(floor(input\_height + 2 * padding\_y - pool\_size\_y) / float(stride\_y)) \\\\ - d = 1 + int(floor(input\_depth + 2 * padding\_z - pool\_size\_z) / float(stride\_z)) \\\\ + w = 1 + \frac{floor(input\_width + 2 * padding - pool\_size)}{stride} \\\\ + h = 1 + \frac{floor(input\_height + 2 * padding\_y - pool\_size\_y)}{stride\_y} \\\\ + d = 1 + \frac{floor(input\_depth + 2 * padding\_z - pool\_size\_z)}{stride\_z} \\\\ The example usage is: @@ -5428,13 +5428,15 @@ def maxout_layer(input, groups, num_channels=None, name=None, layer_attr=None): `Multi-digit Number Recognition from Street View Imagery using Deep Convolutional Neural Networks https://arxiv.org/pdf/1312.6082v4.pdf`_ + .. math:: - y_{si+j} = \max_k x_{gsi + sk + j} \\\\ - g = groups \\\\ - s = input.size / num\_channels \\\\ - 0 \le i < num\_channels / groups \\\\ - 0 \le j < s \\\\ - 0 \le k < groups \\\\ + out = \max_k (in[n, k, o_c , s]) \\\\ + out_{i * s + j} = \max_k in_{ k * o_{c} * s + i * s + j} \\\\ + s = \frac{input.size}{ num\_channels} \\\\ + o_{c} =\frac{num\_channels}{groups} \\\\ + 0 \le i < o_{c} \\\\ + 0 \le j < s \\\\ + 0 \le k < groups \\\\ The simple usage is: From 36fcc95cabdd74a9508f88666b51de8c29dc753f Mon Sep 17 00:00:00 2001 From: Qiao Longfei Date: Fri, 8 Dec 2017 13:11:11 +0800 Subject: [PATCH 030/193] Nmt decoder train (#6367) * init decoder_trainer * can run * fix lod * add sharelod to cross_entropy_grad_op * add avg_cost to fetch list * modify learning rate * can run * optimie code * add early exit * fix print * revert test_understand_sentiment_conv.py * add act to fc --- paddle/framework/op_desc.cc | 2 +- paddle/operators/concat_op.cc | 12 +- paddle/operators/cross_entropy_op.cc | 1 + python/paddle/v2/fluid/layers.py | 3 +- .../tests/book/test_machine_translation.py | 120 ++++++++++-------- 5 files changed, 80 insertions(+), 58 deletions(-) diff --git a/paddle/framework/op_desc.cc b/paddle/framework/op_desc.cc index 2281d93df9..cde3f1ac2e 100644 --- a/paddle/framework/op_desc.cc +++ b/paddle/framework/op_desc.cc @@ -59,7 +59,7 @@ class CompileTimeInferShapeContext : public InferShapeContext { auto *in_var = block_.FindVarRecursive(Inputs(in)[i]); auto *out_var = block_.FindVarRecursive(Outputs(out)[j]); if (in_var->GetType() != VarDesc::LOD_TENSOR) { - VLOG(3) << "input " << in << "is not LodTensor"; + VLOG(3) << "input " << in << " is not LodTensor"; return; } PADDLE_ENFORCE_EQ(in_var->GetType(), VarDesc::LOD_TENSOR, diff --git a/paddle/operators/concat_op.cc b/paddle/operators/concat_op.cc index 6134ac78b1..cf522d6921 100644 --- a/paddle/operators/concat_op.cc +++ b/paddle/operators/concat_op.cc @@ -41,14 +41,18 @@ class ConcatOp : public framework::OperatorWithKernel { for (size_t j = 0; j < in_zero_dims_size; j++) { if (j == axis) { out_dims[axis] += ins[i][j]; - continue; + } else { + PADDLE_ENFORCE_EQ(out_dims[j], ins[i][j], + "Input tensors should have the same " + "elements except the specify axis."); } - PADDLE_ENFORCE_EQ(out_dims[j], ins[i][j], - "Input tensors should have the same " - "elements except the specify axis."); } } + if (out_dims[axis] < 0) { + out_dims[axis] = -1; + } ctx->SetOutputDim("Out", out_dims); + ctx->ShareLoD("X", /*->*/ "Out"); } }; diff --git a/paddle/operators/cross_entropy_op.cc b/paddle/operators/cross_entropy_op.cc index 1e82742eaf..2b06012b69 100644 --- a/paddle/operators/cross_entropy_op.cc +++ b/paddle/operators/cross_entropy_op.cc @@ -95,6 +95,7 @@ class CrossEntropyGradientOp : public framework::OperatorWithKernel { "Input(Label) should be 1."); } ctx->SetOutputDim(framework::GradVarName("X"), x_dims); + ctx->ShareLoD("X", framework::GradVarName("X")); } protected: diff --git a/python/paddle/v2/fluid/layers.py b/python/paddle/v2/fluid/layers.py index fb444f2d86..b4426bad14 100644 --- a/python/paddle/v2/fluid/layers.py +++ b/python/paddle/v2/fluid/layers.py @@ -430,7 +430,8 @@ def _create_op_func_(op_type): dtype = each.dtype elif dtype != each.dtype: raise ValueError( - "operator {0} must input same dtype".format(op_type)) + "operator {0} must input same dtype. {1} vs {2}".format( + op_type, dtype, each.dtype)) return dtype diff --git a/python/paddle/v2/fluid/tests/book/test_machine_translation.py b/python/paddle/v2/fluid/tests/book/test_machine_translation.py index 5bc7e1b59d..80ffc5a544 100644 --- a/python/paddle/v2/fluid/tests/book/test_machine_translation.py +++ b/python/paddle/v2/fluid/tests/book/test_machine_translation.py @@ -1,59 +1,62 @@ import numpy as np import paddle.v2 as paddle -import paddle.v2.dataset.conll05 as conll05 +import paddle.v2.fluid as fluid import paddle.v2.fluid.core as core import paddle.v2.fluid.framework as framework import paddle.v2.fluid.layers as layers -from paddle.v2.fluid.executor import Executor, g_scope -from paddle.v2.fluid.optimizer import SGDOptimizer -import paddle.v2.fluid as fluid -import paddle.v2.fluid.layers as pd +from paddle.v2.fluid.executor import Executor dict_size = 30000 source_dict_dim = target_dict_dim = dict_size src_dict, trg_dict = paddle.dataset.wmt14.get_dict(dict_size) -hidden_dim = 512 -word_dim = 512 +hidden_dim = 32 +word_dim = 16 IS_SPARSE = True -batch_size = 50 +batch_size = 10 max_length = 50 topk_size = 50 trg_dic_size = 10000 -src_word_id = layers.data(name="src_word_id", shape=[1], dtype='int64') -src_embedding = layers.embedding( - input=src_word_id, - size=[dict_size, word_dim], - dtype='float32', - is_sparse=IS_SPARSE, - param_attr=fluid.ParamAttr(name='vemb')) - - -def encoder(): - - lstm_hidden0, lstm_0 = layers.dynamic_lstm( - input=src_embedding, - size=hidden_dim, - candidate_activation='sigmoid', - cell_activation='sigmoid') - - lstm_hidden1, lstm_1 = layers.dynamic_lstm( - input=src_embedding, - size=hidden_dim, - candidate_activation='sigmoid', - cell_activation='sigmoid', - is_reverse=True) - - bidirect_lstm_out = layers.concat([lstm_hidden0, lstm_hidden1], axis=0) - - return bidirect_lstm_out - - -def decoder_trainer(context): - ''' - decoder with trainer - ''' - pass +decoder_size = hidden_dim + + +def encoder_decoder(): + # encoder + src_word_id = layers.data( + name="src_word_id", shape=[1], dtype='int64', lod_level=1) + src_embedding = layers.embedding( + input=src_word_id, + size=[dict_size, word_dim], + dtype='float32', + is_sparse=IS_SPARSE, + param_attr=fluid.ParamAttr(name='vemb')) + + fc1 = fluid.layers.fc(input=src_embedding, size=hidden_dim * 4, act='tanh') + lstm_hidden0, lstm_0 = layers.dynamic_lstm(input=fc1, size=hidden_dim * 4) + encoder_out = layers.sequence_pool(input=lstm_hidden0, pool_type="last") + + # decoder + trg_language_word = layers.data( + name="target_language_word", shape=[1], dtype='int64', lod_level=1) + trg_embedding = layers.embedding( + input=trg_language_word, + size=[dict_size, word_dim], + dtype='float32', + is_sparse=IS_SPARSE, + param_attr=fluid.ParamAttr(name='vemb')) + + rnn = fluid.layers.DynamicRNN() + with rnn.block(): + current_word = rnn.step_input(trg_embedding) + mem = rnn.memory(init=encoder_out) + fc1 = fluid.layers.fc(input=[current_word, mem], + size=decoder_size, + act='tanh') + out = fluid.layers.fc(input=fc1, size=target_dict_dim, act='softmax') + rnn.update_memory(mem, fc1) + rnn.output(out) + + return rnn() def to_lodtensor(data, place): @@ -72,13 +75,18 @@ def to_lodtensor(data, place): def main(): - encoder_out = encoder() - # TODO(jacquesqiao) call here - decoder_trainer(encoder_out) + rnn_out = encoder_decoder() + label = layers.data( + name="target_language_next_word", shape=[1], dtype='int64', lod_level=1) + cost = layers.cross_entropy(input=rnn_out, label=label) + avg_cost = fluid.layers.mean(x=cost) + + optimizer = fluid.optimizer.Adagrad(learning_rate=1e-4) + optimizer.minimize(avg_cost) train_data = paddle.batch( paddle.reader.shuffle( - paddle.dataset.wmt14.train(8000), buf_size=1000), + paddle.dataset.wmt14.train(dict_size), buf_size=1000), batch_size=batch_size) place = core.CPUPlace() @@ -88,15 +96,23 @@ def main(): batch_id = 0 for pass_id in xrange(2): - print 'pass_id', pass_id for data in train_data(): - print 'batch', batch_id - batch_id += 1 - if batch_id > 10: break word_data = to_lodtensor(map(lambda x: x[0], data), place) + trg_word = to_lodtensor(map(lambda x: x[1], data), place) + trg_word_next = to_lodtensor(map(lambda x: x[2], data), place) outs = exe.run(framework.default_main_program(), - feed={'src_word_id': word_data, }, - fetch_list=[encoder_out]) + feed={ + 'src_word_id': word_data, + 'target_language_word': trg_word, + 'target_language_next_word': trg_word_next + }, + fetch_list=[avg_cost]) + avg_cost_val = np.array(outs[0]) + print('pass_id=' + str(pass_id) + ' batch=' + str(batch_id) + + " avg_cost=" + str(avg_cost_val)) + if batch_id > 3: + exit(0) + batch_id += 1 if __name__ == '__main__': From 00b64f66794a7b92708147a49cc9ca53f74a7397 Mon Sep 17 00:00:00 2001 From: Yiqun Liu Date: Fri, 8 Dec 2017 13:11:50 +0800 Subject: [PATCH 031/193] Add a c-api interface to initialize the thread environment of Paddle (#5773) * Fix bug in MergeModel.cpp. * Add a c-api inferface to initilize the thread environment of Paddle and add a GPU example. * Add some note for paddle_init_thread and move the inplementation of paddle_error_string into a .cpp file. * Add some comments. --- paddle/capi/Main.cpp | 7 ++ paddle/capi/Matrix.cpp | 2 +- paddle/capi/error.cpp | 32 +++++ paddle/capi/error.h | 7 ++ .../multi_thread/CMakeLists.txt | 29 ++++- .../model_inference/multi_thread/main_gpu.c | 113 ++++++++++++++++++ paddle/capi/main.h | 7 ++ 7 files changed, 192 insertions(+), 5 deletions(-) create mode 100644 paddle/capi/error.cpp create mode 100644 paddle/capi/examples/model_inference/multi_thread/main_gpu.c diff --git a/paddle/capi/Main.cpp b/paddle/capi/Main.cpp index bb8249a551..c038789340 100644 --- a/paddle/capi/Main.cpp +++ b/paddle/capi/Main.cpp @@ -43,4 +43,11 @@ paddle_error paddle_init(int argc, char** argv) { isInit = true; return kPD_NO_ERROR; } + +paddle_error paddle_init_thread() { + if (FLAGS_use_gpu) { + hl_init(FLAGS_gpu_id); + } + return kPD_NO_ERROR; +} } diff --git a/paddle/capi/Matrix.cpp b/paddle/capi/Matrix.cpp index 30f3a766f0..cbacd1fb71 100644 --- a/paddle/capi/Matrix.cpp +++ b/paddle/capi/Matrix.cpp @@ -40,7 +40,7 @@ paddle_error paddle_matrix_destroy(paddle_matrix mat) { paddle_error paddle_matrix_set_row(paddle_matrix mat, uint64_t rowID, paddle_real* rowArray) { - if (mat == nullptr) return kPD_NULLPTR; + if (mat == nullptr || rowArray == nullptr) return kPD_NULLPTR; auto ptr = cast(mat); if (ptr->mat == nullptr) return kPD_NULLPTR; if (rowID >= ptr->mat->getHeight()) return kPD_OUT_OF_RANGE; diff --git a/paddle/capi/error.cpp b/paddle/capi/error.cpp new file mode 100644 index 0000000000..169b65f921 --- /dev/null +++ b/paddle/capi/error.cpp @@ -0,0 +1,32 @@ +/* Copyright (c) 2016 PaddlePaddle Authors. All Rights Reserve. + +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 "error.h" + +const char* paddle_error_string(paddle_error err) { + switch (err) { + case kPD_NULLPTR: + return "nullptr error"; + case kPD_OUT_OF_RANGE: + return "out of range error"; + case kPD_PROTOBUF_ERROR: + return "protobuf error"; + case kPD_NOT_SUPPORTED: + return "not supported error"; + case kPD_UNDEFINED_ERROR: + return "undefined error"; + default: + return ""; + } +} diff --git a/paddle/capi/error.h b/paddle/capi/error.h index 44d8c2040d..9d9d0ed63a 100644 --- a/paddle/capi/error.h +++ b/paddle/capi/error.h @@ -15,6 +15,8 @@ limitations under the License. */ #ifndef __PADDLE_CAPI_ERROR_H__ #define __PADDLE_CAPI_ERROR_H__ +#include "config.h" + /** * Error Type for Paddle API. */ @@ -27,4 +29,9 @@ typedef enum { kPD_UNDEFINED_ERROR = -1, } paddle_error; +/** + * Error string for Paddle API. + */ +PD_API const char* paddle_error_string(paddle_error err); + #endif diff --git a/paddle/capi/examples/model_inference/multi_thread/CMakeLists.txt b/paddle/capi/examples/model_inference/multi_thread/CMakeLists.txt index 98e411ddc0..2fc8debdde 100644 --- a/paddle/capi/examples/model_inference/multi_thread/CMakeLists.txt +++ b/paddle/capi/examples/model_inference/multi_thread/CMakeLists.txt @@ -1,8 +1,29 @@ project(multi_thread) cmake_minimum_required(VERSION 2.8) -aux_source_directory(. SRC_LIST) -add_executable(${PROJECT_NAME} ${SRC_LIST}) + find_package (Threads) + +if(NOT PADDLE_ROOT) + set(PADDLE_ROOT $ENV{PADDLE_ROOT} CACHE PATH "Paddle Path") +endif() +if(PADDLE_ROOT) + include_directories(${PADDLE_ROOT}/include) + link_directories(${PADDLE_ROOT}/lib) +endif() + +set(CPU_SRCS main.c) +add_executable(${PROJECT_NAME} ${CPU_SRCS}) set_property(TARGET ${PROJECT_NAME} PROPERTY C_STANDARD 99) -target_link_libraries(${PROJECT_NAME} -lpaddle_capi_shared - ${CMAKE_THREAD_LIBS_INIT}) +target_link_libraries(${PROJECT_NAME} + -lpaddle_capi_shared + ${CMAKE_THREAD_LIBS_INIT}) + +find_package(CUDA QUIET) +if(CUDA_FOUND) + set(GPU_SRCS main_gpu.c) + cuda_add_executable(${PROJECT_NAME}_gpu ${GPU_SRCS}) + set_property(TARGET ${PROJECT_NAME}_gpu PROPERTY C_STANDARD 99) + target_link_libraries(${PROJECT_NAME}_gpu + -lpaddle_capi_shared + ${CMAKE_THREAD_LIBS_INIT}) +endif(CUDA_FOUND) diff --git a/paddle/capi/examples/model_inference/multi_thread/main_gpu.c b/paddle/capi/examples/model_inference/multi_thread/main_gpu.c new file mode 100644 index 0000000000..6fd376e0d1 --- /dev/null +++ b/paddle/capi/examples/model_inference/multi_thread/main_gpu.c @@ -0,0 +1,113 @@ +#include +#include +#include +#include "../common/common.h" + +#define CONFIG_BIN "./trainer_config.bin" +#define NUM_THREAD 4 +#define NUM_ITER 1000 + +pthread_mutex_t mutex; + +/* + * @brief It is an simple inference example that runs multi-threads on a GPU. + * Each thread holds it own local gradient_machine but shares the same + * parameters. + * If you want to run on different GPUs, you need to launch + * multi-processes or set trainer_count > 1. + */ +void* thread_main(void* gm_ptr) { + // Initialize the thread environment of Paddle. + CHECK(paddle_init_thread()); + + paddle_gradient_machine machine = (paddle_gradient_machine)(gm_ptr); + // Create input arguments. + paddle_arguments in_args = paddle_arguments_create_none(); + // Create input matrix. + paddle_matrix mat = paddle_matrix_create(/* sample_num */ 1, + /* size */ 784, + /* useGPU */ true); + // Create output arguments. + paddle_arguments out_args = paddle_arguments_create_none(); + // Create output matrix. + paddle_matrix prob = paddle_matrix_create_none(); + + // CPU buffer to cache the input and output. + paddle_real* cpu_input = (paddle_real*)malloc(784 * sizeof(paddle_real)); + paddle_real* cpu_output = (paddle_real*)malloc(10 * sizeof(paddle_real)); + for (int iter = 0; iter < NUM_ITER; ++iter) { + // There is only one input layer of this network. + CHECK(paddle_arguments_resize(in_args, 1)); + CHECK(paddle_arguments_set_value(in_args, 0, mat)); + + for (int i = 0; i < 784; ++i) { + cpu_input[i] = rand() / ((float)RAND_MAX); + } + CHECK(paddle_matrix_set_value(mat, cpu_input)); + + CHECK(paddle_gradient_machine_forward(machine, + in_args, + out_args, + /* isTrain */ false)); + + CHECK(paddle_arguments_get_value(out_args, 0, prob)); + CHECK(paddle_matrix_get_value(prob, cpu_output)); + + pthread_mutex_lock(&mutex); + printf("Prob: "); + for (int i = 0; i < 10; ++i) { + printf("%.2f ", cpu_output[i]); + } + printf("\n"); + pthread_mutex_unlock(&mutex); + } + + CHECK(paddle_matrix_destroy(prob)); + CHECK(paddle_arguments_destroy(out_args)); + CHECK(paddle_matrix_destroy(mat)); + CHECK(paddle_arguments_destroy(in_args)); + CHECK(paddle_gradient_machine_destroy(machine)); + + free(cpu_input); + free(cpu_output); + + return NULL; +} + +int main() { + // Initalize Paddle + char* argv[] = {"--use_gpu=True"}; + CHECK(paddle_init(1, (char**)argv)); + + // Reading config binary file. It is generated by `convert_protobin.sh` + long size; + void* buf = read_config(CONFIG_BIN, &size); + + // Create a gradient machine for inference. + paddle_gradient_machine machine; + CHECK(paddle_gradient_machine_create_for_inference(&machine, buf, (int)size)); + CHECK(paddle_gradient_machine_randomize_param(machine)); + + // Loading parameter. Uncomment the following line and change the directory. + // CHECK(paddle_gradient_machine_load_parameter_from_disk(machine, + // "./some_where_to_params")); + srand(time(0)); + pthread_mutex_init(&mutex, NULL); + + pthread_t threads[NUM_THREAD]; + + for (int i = 0; i < NUM_THREAD; ++i) { + paddle_gradient_machine thread_local_machine; + CHECK(paddle_gradient_machine_create_shared_param( + machine, buf, size, &thread_local_machine)); + pthread_create(&threads[i], NULL, thread_main, thread_local_machine); + } + + for (int i = 0; i < NUM_THREAD; ++i) { + pthread_join(threads[i], NULL); + } + + pthread_mutex_destroy(&mutex); + + return 0; +} diff --git a/paddle/capi/main.h b/paddle/capi/main.h index 893ebcbd58..99c4e8428d 100644 --- a/paddle/capi/main.h +++ b/paddle/capi/main.h @@ -26,6 +26,13 @@ extern "C" { */ PD_API paddle_error paddle_init(int argc, char** argv); +/** + * Initialize the thread environment of Paddle. + * @note it is requisite for GPU runs but optional for CPU runs. + * For GPU runs, all threads will run on the same GPU devices. + */ +PD_API paddle_error paddle_init_thread(); + #ifdef __cplusplus } #endif From e1247d8015c43ad9dd6254650d8238fc0cefde8f Mon Sep 17 00:00:00 2001 From: hedaoyuan Date: Fri, 8 Dec 2017 13:36:04 +0800 Subject: [PATCH 032/193] Fix compile error in android. --- paddle/math/tests/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/paddle/math/tests/CMakeLists.txt b/paddle/math/tests/CMakeLists.txt index 215bac1271..dcd2a34583 100644 --- a/paddle/math/tests/CMakeLists.txt +++ b/paddle/math/tests/CMakeLists.txt @@ -34,4 +34,4 @@ add_simple_unittest(test_FPException) add_simple_unittest(test_GpuProfiler) add_simple_unittest(test_BaseMatrix) add_simple_unittest(test_Matrix) -cc_test(test_float16 SRCS test_float16.cpp) +add_simple_unittest(test_float16) From 01e28d112562efdb20ab7d916e23433282e538da Mon Sep 17 00:00:00 2001 From: typhoonzero Date: Fri, 8 Dec 2017 13:47:38 +0800 Subject: [PATCH 033/193] change release version 0.11.0 --- 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 d59a6a4780..8e856ba460 100644 --- a/python/setup.py.in +++ b/python/setup.py.in @@ -5,7 +5,7 @@ class BinaryDistribution(Distribution): return True MAJOR = 0 -MINOR = 10 +MINOR = 11 PATCH = 0 RC = 0 ISTAGED = False From 361126f26bb4372449b1ac62ee5d04fbd3521088 Mon Sep 17 00:00:00 2001 From: typhoonzero Date: Fri, 8 Dec 2017 13:51:21 +0800 Subject: [PATCH 034/193] python package name gpu --- python/CMakeLists.txt | 6 ++++++ python/setup.py.in | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt index c8632295a2..8e2333f976 100644 --- a/python/CMakeLists.txt +++ b/python/CMakeLists.txt @@ -33,6 +33,12 @@ if(WITH_MKLDNN) list(APPEND MKL_DEPENDS mkldnn) endif() +if(WITH_GPU) + SET(PACKAGE_NAME "paddlepaddle_gpu") +else() + SET(PACKAGE_NAME "paddlepaddle") +endif() + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/setup.py.in ${CMAKE_CURRENT_BINARY_DIR}/setup.py) diff --git a/python/setup.py.in b/python/setup.py.in index 8e856ba460..9ccb4dc176 100644 --- a/python/setup.py.in +++ b/python/setup.py.in @@ -89,7 +89,7 @@ paddle_rt_libs = ['${WARPCTC_LIBRARIES}'] if '${MKL_SHARED_LIBS}'!= '': paddle_rt_libs += '${MKL_SHARED_LIBS}'.split(';') -setup(name='paddlepaddle', +setup(name='${PACKAGE_NAME}', version='${PADDLE_VERSION}', description='Parallel Distributed Deep Learning', install_requires=setup_requires, From ac18580bb94edada7af6b9353eab8147d4a7e8a5 Mon Sep 17 00:00:00 2001 From: typhoonzero Date: Fri, 8 Dec 2017 13:52:58 +0800 Subject: [PATCH 035/193] update --- python/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt index 8e2333f976..6f589e9169 100644 --- a/python/CMakeLists.txt +++ b/python/CMakeLists.txt @@ -34,7 +34,7 @@ if(WITH_MKLDNN) endif() if(WITH_GPU) - SET(PACKAGE_NAME "paddlepaddle_gpu") + SET(PACKAGE_NAME "paddlepaddle-gpu") else() SET(PACKAGE_NAME "paddlepaddle") endif() From 1d301731ac9aeb8d42d77815525e5b7b29b46f92 Mon Sep 17 00:00:00 2001 From: Luo Tao Date: Fri, 8 Dec 2017 15:22:35 +0800 Subject: [PATCH 036/193] refine the gen_docs in build.sh --- paddle/scripts/docker/build.sh | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/paddle/scripts/docker/build.sh b/paddle/scripts/docker/build.sh index 3c6ec6faba..e43b9c218a 100644 --- a/paddle/scripts/docker/build.sh +++ b/paddle/scripts/docker/build.sh @@ -113,7 +113,10 @@ EOF -DWITH_SWIG_PY=ON \ -DWITH_STYLE_CHECK=OFF make -j `nproc` gen_proto_py + make -j `nproc` paddle_python make -j `nproc` paddle_docs paddle_docs_cn + make -j `nproc` print_operators_doc + paddle/pybind/print_operators_doc > doc/en/html/operators.json popd fi @@ -185,14 +188,6 @@ EOF ${DOCKERFILE_GPU_ENV} ADD go/cmd/pserver/pserver /usr/bin/ ADD go/cmd/master/master /usr/bin/ -EOF - - if [[ ${WITH_DOC:-OFF} == 'ON' ]]; then - cat >> /paddle/build/Dockerfile <> /paddle/build/Dockerfile < Date: Fri, 8 Dec 2017 16:20:09 +0800 Subject: [PATCH 037/193] recv_op use serialized program --- paddle/operators/recv_op.cc | 11 +++++++---- paddle/operators/send_recv_op_test.cc | 2 +- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/paddle/operators/recv_op.cc b/paddle/operators/recv_op.cc index c69e416e10..45222f6b76 100644 --- a/paddle/operators/recv_op.cc +++ b/paddle/operators/recv_op.cc @@ -72,8 +72,10 @@ class RecvOp : public framework::OperatorBase { // FIXME(typhoonzero): do not copy framework::CopyFrom(t, dev_ctx.GetPlace(), dev_ctx, tensor); - auto *block = Attr("OptimizeBlock"); - auto *program = block->Program(); + std::string program_str = Attr("OptimizeProgram"); + framework::Program program_desc; + program_desc.ParseFromString(program_str); + framework::ProgramDescBind program(program_desc); framework::Executor executor(dev_ctx); // Run sub graph to get optimized tensor executor.Run(*program, &recv_scope, block->ID(), @@ -108,8 +110,9 @@ This operator will recv tensor from send_op "IP address to listen on.") .SetDefault("127.0.0.1:6164") .AddCustomChecker([](const std::string &ip) { return !ip.empty(); }); - AddAttr("OptimizeBlock", "type BlockDescBind*", - "optimize network run in server"); + AddAttr( + "OptimizeProgram", "type string", + "Serialized ProgramDesc string for recv to run."); } }; diff --git a/paddle/operators/send_recv_op_test.cc b/paddle/operators/send_recv_op_test.cc index ac03eb3752..c35dc8fa50 100644 --- a/paddle/operators/send_recv_op_test.cc +++ b/paddle/operators/send_recv_op_test.cc @@ -85,7 +85,7 @@ void StartServerNet() { paddle::framework::AttributeMap attrs; attrs.insert({"endpoint", std::string("127.0.0.1:6174")}); - attrs.insert({"OptimizeBlock", block}); + attrs.insert({"OptimizeProgram", program.Proto()->SerializeToString()}); recv_op = paddle::framework::OpRegistry::CreateOp("recv", {{"RX", {"RX"}}}, {{"Out", {"Out"}}}, attrs); paddle::platform::CPUDeviceContext ctx(place); From 986ca03ce24f6d84eb9cfaef64b59fda2298823b Mon Sep 17 00:00:00 2001 From: typhoonzero Date: Fri, 8 Dec 2017 19:45:15 +0800 Subject: [PATCH 038/193] update --- paddle/operators/recv_op.cc | 9 ++++----- paddle/operators/send_recv_op_test.cc | 5 ++++- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/paddle/operators/recv_op.cc b/paddle/operators/recv_op.cc index 45222f6b76..eed482c1b4 100644 --- a/paddle/operators/recv_op.cc +++ b/paddle/operators/recv_op.cc @@ -73,12 +73,12 @@ class RecvOp : public framework::OperatorBase { framework::CopyFrom(t, dev_ctx.GetPlace(), dev_ctx, tensor); std::string program_str = Attr("OptimizeProgram"); - framework::Program program_desc; + framework::ProgramDesc program_desc; program_desc.ParseFromString(program_str); framework::ProgramDescBind program(program_desc); framework::Executor executor(dev_ctx); // Run sub graph to get optimized tensor - executor.Run(*program, &recv_scope, block->ID(), + executor.Run(program, &recv_scope, 0, /*global_block*/ false /*create_local_scope*/); auto *out_var = recv_scope.FindVar("Out"); @@ -110,9 +110,8 @@ This operator will recv tensor from send_op "IP address to listen on.") .SetDefault("127.0.0.1:6164") .AddCustomChecker([](const std::string &ip) { return !ip.empty(); }); - AddAttr( - "OptimizeProgram", "type string", - "Serialized ProgramDesc string for recv to run."); + AddAttr("OptimizeProgram", "type string", + "Serialized ProgramDesc string for recv to run."); } }; diff --git a/paddle/operators/send_recv_op_test.cc b/paddle/operators/send_recv_op_test.cc index c35dc8fa50..3e2e2051af 100644 --- a/paddle/operators/send_recv_op_test.cc +++ b/paddle/operators/send_recv_op_test.cc @@ -85,7 +85,10 @@ void StartServerNet() { paddle::framework::AttributeMap attrs; attrs.insert({"endpoint", std::string("127.0.0.1:6174")}); - attrs.insert({"OptimizeProgram", program.Proto()->SerializeToString()}); + std::string program_proto; + PADDLE_ENFORCE(program.Proto()->SerializeToString(&program_proto)); + + attrs.insert({"OptimizeProgram", program_proto}); recv_op = paddle::framework::OpRegistry::CreateOp("recv", {{"RX", {"RX"}}}, {{"Out", {"Out"}}}, attrs); paddle::platform::CPUDeviceContext ctx(place); From 3a222a4dcf4e3bf05c2c24bac76e9551144e4fcb Mon Sep 17 00:00:00 2001 From: qiaolongfei Date: Sat, 9 Dec 2017 12:39:19 +0800 Subject: [PATCH 039/193] add release note --- RELEASE.cn.md | 36 ++++++++++++++++++++++++++ RELEASE.md | 72 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 108 insertions(+) diff --git a/RELEASE.cn.md b/RELEASE.cn.md index 5deaf230a8..a6531061af 100644 --- a/RELEASE.cn.md +++ b/RELEASE.cn.md @@ -1,3 +1,39 @@ +# Release v0.11.0 + +## Fluid Python API + +- PaddlePaddle发布版本v0.11.0包含一个新的特性*PaddlePaddle Fluid*. Fluid 是设计用来让用户像Pytorch和Tensorflow Eager Execution一样执行程序。在这些系统中,不再有*模型*这个概念,应用也不再包含一个用于描述Operator图或者一系列层的符号描述,而是像通用程序那样描述训练或者预测的过程。而Fluid与PyTorch或Eager Execution的区别在于Fluid不依赖Python提供的控制流,例如 if-else-then或者for,而是提供了基于C++实现的控制流并暴露了对应的用with语法实现的Python接口。例如: + + https://github.com/PaddlePaddle/Paddle/blob/3df78ed2a98d37f7ae6725894cc7514effd5664b/python/paddle/v2/fluid/tests/test_while_op.py#L36-L44 + +- 在v0.11.0版本中,我们提供了一个C++类`Executor`用于运行一个Fluid程序。Executor类似一个解释器。在未来的版本中,我们将提升和优化Executor成为一个调试器,就像GDB。并可能提供一些编译器,这个编译器会读取一个上文所描述的应用然后编译成一个等价的 +源代码,这个源代码可以被nvcc编译成可以使用CUDA的二进制,或者被icc编译成可以充分利用Intel CPU的二进制。 + + +## 新特点 + +* 发布 `Fluid` API。 +* 增加了用于模型预测的C-API。 +* 用Fluid API实现了一个简单的GAN的例子。 +* 增加了关于性能调优的文档。 +* 为`paddle.v2.dataset`下载数据集提供了重试机制. +* C++中使用protobuf-lite替换protobuf减少了二进制的大小。 +* 发布了新特性 [Elastic Deep Learning (EDL)](https://github.com/PaddlePaddle/cloud/tree/develop/doc/autoscale/experiment). +* 基于Bazel API利用cmake实现了一个的新的构建系统函数库。 +* 当使用编译选项`WITH_MKL=ON`时自动下载和编译Intel® [MKLML](https://github.com/01org/mkl-dnn/releases/download/v0.11/mklml_lnx_2018.0.1.20171007.tgz) 函数库. +* [Intel® MKL-DNN on PaddlePaddle](https://github.com/PaddlePaddle/Paddle/tree/develop/doc/design/mkldnn): + - 完成了 11个 MKL-DNN 层: Convolution, Fully connectivity, Pooling, ReLU, Tanh, ELU, Softmax, BatchNorm, AddTo, Concat, LRN。 + - 完成了 3个 MKL-DNN 网络: VGG-19, ResNet-50, GoogleNet + - 基于Intel Skylake 6148 CPU的[性能测试](https://github.com/PaddlePaddle/Paddle/blob/develop/benchmark/IntelOptimizedPaddle.md) : 相对于MKLML有2~3倍的训练加速。 +* 增加 [softsign activation](http://www.paddlepaddle.org/docs/develop/documentation/zh/api/v2/config/activation.html#softsign) +* 增加 [dot product layer](http://www.paddlepaddle.org/docs/develop/documentation/zh/api/v2/config/layer.html#dot-prod) +* 增加 [L2 distance layer](http://www.paddlepaddle.org/docs/develop/documentation/zh/api/v2/config/layer.html#l2-distance) +* 增加 [sub-nested sequence layer](http://www.paddlepaddle.org/docs/develop/documentation/zh/api/v2/config/layer.html#sub-nested-seq) +* 增加 [kmax sequence score layer](http://www.paddlepaddle.org/docs/develop/documentation/zh/api/v2/config/layer.html#kmax-sequence-score) +* 增加 [sequence slice layer](http://www.paddlepaddle.org/docs/develop/documentation/zh/api/v2/config/layer.html#seq-slice) +* 增加 [row convolution layer](http://www.paddlepaddle.org/docs/develop/documentation/zh/api/v2/config/layer.html#row-conv) +* 增加移动端友好的网页 + # v0.10.0版本 我们非常高兴发布了PaddlePaddle V0.10.0版,并开发了新的[Python API](http://research.baidu.com/paddlepaddles-new-api-simplifies-deep-learning-programs/)。 diff --git a/RELEASE.md b/RELEASE.md index 146f7afa7d..d6aaa341a2 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -1,3 +1,75 @@ +# Release v0.11.0 + +## Fluid Python API + +- Release 0.11.0 includes a new feature *PaddlePaddle Fluid*. Fluid is + designed to allow users to program like PyTorch and TensorFlow Eager Execution. + In these systems, there is no longer the concept *model* and applications + do not include a symbolic description of a graph of operators nor a sequence + of layers. Instead, applications look exactly like a usual program that + describes a process of training or inference. The difference between + Fluid and PyTorch or Eager Execution is that Fluid doesn't rely on Python's + control-flow, `if-then-else` nor `for`. Instead, Fluid provides its + C++ implementations and their Python binding using the `with` statement. For an example + + https://github.com/PaddlePaddle/Paddle/blob/3df78ed2a98d37f7ae6725894cc7514effd5664b/python/paddle/v2/fluid/tests/test_while_op.py#L36-L44 + +- In 0.11.0, we provides a C++ class `Executor` to run a Fluid program. +Executor works like an interpreter. In future version, we will improve +`Executor` into a debugger like GDB, and we might provide some compilers, +which, for example, takes an application like the above one, and outputs +an equivalent C++ source program, which can be compiled using +[`nvcc`](http://docs.nvidia.com/cuda/cuda-compiler-driver-nvcc/index.html) +to generate binaries that use CUDA, or using +[`icc`](https://software.intel.com/en-us/c-compilers) to generate binaries +that make full use of Intel CPUs. + +## New Features + +* Release `Fluid` API. +* Add C-API for model inference +* Use fluid API to create a simple GAN demo. +* Add develop guide about performance tunning. +* Add retry when download `paddle.v2.dataset`. +* Linking protobuf-lite not protobuf in C++. Reduce the binary size. +* Feature [Elastic Deep Learning (EDL)](https://github.com/PaddlePaddle/cloud/tree/develop/doc/autoscale/experiment) released. +* A new style cmake functions for Paddle. It is based on Bazel API. +* Automatically download and compile with Intel® [MKLML](https://github.com/01org/mkl-dnn/releases/download/v0.11/mklml_lnx_2018.0.1.20171007.tgz) library as CBLAS when build `WITH_MKL=ON`. +* [Intel® MKL-DNN on PaddlePaddle](https://github.com/PaddlePaddle/Paddle/tree/develop/doc/design/mkldnn): + - Complete 11 MKL-DNN layers: Convolution, Fully connectivity, Pooling, ReLU, Tanh, ELU, Softmax, BatchNorm, AddTo, Concat, LRN. + - Complete 3 MKL-DNN networks: VGG-19, ResNet-50, GoogleNet + - [Benchmark](https://github.com/PaddlePaddle/Paddle/blob/develop/benchmark/IntelOptimizedPaddle.md) on Intel Skylake 6148 CPU: 2~3x training speedup compared with MKLML. +* Add the [`softsign` activation](http://www.paddlepaddle.org/docs/develop/documentation/zh/api/v2/config/activation.html#softsign). +* Add the [dot product layer](http://www.paddlepaddle.org/docs/develop/documentation/zh/api/v2/config/layer.html#dot-prod). +* Add the [L2 distance layer](http://www.paddlepaddle.org/docs/develop/documentation/zh/api/v2/config/layer.html#l2-distance). +* Add the [sub-nested sequence layer](http://www.paddlepaddle.org/docs/develop/documentation/zh/api/v2/config/layer.html#sub-nested-seq). +* Add the [kmax sequence score layer](http://www.paddlepaddle.org/docs/develop/documentation/zh/api/v2/config/layer.html#kmax-sequence-score). +* Add the [sequence slice layer](http://www.paddlepaddle.org/docs/develop/documentation/zh/api/v2/config/layer.html#seq-slice). +* Add the [row convolution layer](http://www.paddlepaddle.org/docs/develop/documentation/zh/api/v2/config/layer.html#row-conv) +* Add mobile friendly webpages. + +## Improvements + +* Build and install using a single `whl` package. +* [Custom evaluating in V2 API](https://github.com/PaddlePaddle/models/tree/develop/ltr#训练过程中输出自定义评估指标). +* Change `PADDLE_ONLY_CPU` to `PADDLE_WITH_GPU`, since we will support many kinds of devices. +* Remove buggy BarrierStat. +* Clean and remove unused functions in paddle::Parameter. +* Remove ProtoDataProvider. +* Huber loss supports both regression and classification. +* Add the `stride` parameter for sequence pooling layers. +* Enable v2 API use cudnn batch normalization automatically. +* The BN layer's parameter can be shared by a fixed the parameter name. +* Support variable-dimension input feature for 2D convolution operation. +* Refine cmake about CUDA to automatically detect GPU architecture. +* Improved website navigation. + +## Bug Fixes + +* Fix bug in ROI pooling. cc9a761 +* Fix AUC is zero when label is dense vector. #5274 +* Fix bug in WarpCTC layer. + # Release v0.10.0 We are glad to release version 0.10.0. In this version, we are happy to release the new From 5d4f9fb32de4122194e3e343022a894f0aa2ad4e Mon Sep 17 00:00:00 2001 From: qiaolongfei Date: Sat, 9 Dec 2017 12:57:12 +0800 Subject: [PATCH 040/193] add some content --- RELEASE.cn.md | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/RELEASE.cn.md b/RELEASE.cn.md index a6531061af..df273cf7b7 100644 --- a/RELEASE.cn.md +++ b/RELEASE.cn.md @@ -1,4 +1,4 @@ -# Release v0.11.0 +# v0.11.0版本 ## Fluid Python API @@ -34,6 +34,29 @@ * 增加 [row convolution layer](http://www.paddlepaddle.org/docs/develop/documentation/zh/api/v2/config/layer.html#row-conv) * 增加移动端友好的网页 +## 改进 + +* 使用一个Python`whl`包即可安装. +* [V2 API可以实现用户定制化评估](https://github.com/PaddlePaddle/models/tree/develop/ltr#训练过程中输出自定义评估指标)。 +* 将 `PADDLE_ONLY_CPU` 改为 `PADDLE_WITH_GPU`, 因为我们会支持多种设备。 +* 删除了有一些bug的BarrierStat。 +* 清理和删除了paddle::Parameter中未使用的函数。 +* 删除了ProtoDataProvider。 +* Huber loss同时支持回归和分类。 +* 为sequence pooling 层增加`stride`参数。 +* v2 API自动使用cudnn batch normalization。 +* 可以使用一个固定的参数名共享BN层的参数。 +* 2D convolution operation支持variable-dimension input特性。 +* 重构cmake中关于CUDA的部分并实现自动检测GPU架构的功能。 +* 优化网页导航。 + +## 错误修复 + +* 修复ROI pooling的Bug. cc9a761 +* 修复当label是dense vector是AUC变成0的问题. #5274 +* 修复WarpCTC 层的Bug. + + # v0.10.0版本 我们非常高兴发布了PaddlePaddle V0.10.0版,并开发了新的[Python API](http://research.baidu.com/paddlepaddles-new-api-simplifies-deep-learning-programs/)。 From acab5e656a181efd2f8fe92e8c01e193dc098e78 Mon Sep 17 00:00:00 2001 From: qiaolongfei Date: Sun, 10 Dec 2017 12:41:10 +0800 Subject: [PATCH 041/193] update v0.11.0 release note --- RELEASE.cn.md | 4 ++-- RELEASE.md | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/RELEASE.cn.md b/RELEASE.cn.md index df273cf7b7..494c59730d 100644 --- a/RELEASE.cn.md +++ b/RELEASE.cn.md @@ -1,6 +1,6 @@ # v0.11.0版本 -## Fluid Python API +## PaddlePaddle Fluid - PaddlePaddle发布版本v0.11.0包含一个新的特性*PaddlePaddle Fluid*. Fluid 是设计用来让用户像Pytorch和Tensorflow Eager Execution一样执行程序。在这些系统中,不再有*模型*这个概念,应用也不再包含一个用于描述Operator图或者一系列层的符号描述,而是像通用程序那样描述训练或者预测的过程。而Fluid与PyTorch或Eager Execution的区别在于Fluid不依赖Python提供的控制流,例如 if-else-then或者for,而是提供了基于C++实现的控制流并暴露了对应的用with语法实现的Python接口。例如: @@ -12,7 +12,7 @@ ## 新特点 -* 发布 `Fluid` API。 +* 发布 `PaddlePaddle Fluid`。 * 增加了用于模型预测的C-API。 * 用Fluid API实现了一个简单的GAN的例子。 * 增加了关于性能调优的文档。 diff --git a/RELEASE.md b/RELEASE.md index d6aaa341a2..7c3c04ef9f 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -1,6 +1,6 @@ # Release v0.11.0 -## Fluid Python API +## PaddlePaddle Fluid - Release 0.11.0 includes a new feature *PaddlePaddle Fluid*. Fluid is designed to allow users to program like PyTorch and TensorFlow Eager Execution. From 2e65df17295750bc73f02cf421272918ee97cb98 Mon Sep 17 00:00:00 2001 From: qiaolongfei Date: Sun, 10 Dec 2017 12:43:03 +0800 Subject: [PATCH 042/193] change Fluid description --- RELEASE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RELEASE.md b/RELEASE.md index 7c3c04ef9f..5a62c95513 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -26,7 +26,7 @@ that make full use of Intel CPUs. ## New Features -* Release `Fluid` API. +* Release `PaddlePaddle Fluid`. * Add C-API for model inference * Use fluid API to create a simple GAN demo. * Add develop guide about performance tunning. From 578ad6d23251c0fc08cbf49aa1d6bf9daae55a88 Mon Sep 17 00:00:00 2001 From: hedaoyuan Date: Mon, 11 Dec 2017 11:21:47 +0800 Subject: [PATCH 043/193] Use PADDLE_WITH_NATIVE_FP16 for float16_t. --- paddle/math/float16.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/paddle/math/float16.h b/paddle/math/float16.h index f805cad08b..76ad3a0123 100644 --- a/paddle/math/float16.h +++ b/paddle/math/float16.h @@ -101,7 +101,7 @@ public: half tmp = __float2half(val); x = *reinterpret_cast(&tmp); -#elif defined(PADDLE_NEON) +#elif defined(PADDLE_WITH_NATIVE_FP16) float32x4_t tmp = vld1q_dup_f32(&val); float16_t res = vget_lane_f16(vcvt_f16_f32(tmp), 0); x = *reinterpret_cast(&res); @@ -252,7 +252,7 @@ public: half tmp = *reinterpret_cast(this); return __half2float(tmp); -#elif defined(PADDLE_NEON) +#elif defined(PADDLE_WITH_NATIVE_FP16) float16x4_t res = vld1_dup_f16(reinterpret_cast(this)); return vgetq_lane_f32(vcvt_f32_f16(res), 0); From 3ba75c7c8225cfeb001b2d85b6dc062d08e9b630 Mon Sep 17 00:00:00 2001 From: Tao Luo Date: Mon, 11 Dec 2017 14:28:44 +0800 Subject: [PATCH 044/193] update inference benchmark data --- benchmark/IntelOptimizedPaddle.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/benchmark/IntelOptimizedPaddle.md b/benchmark/IntelOptimizedPaddle.md index c275aeb5cb..9c884044e6 100644 --- a/benchmark/IntelOptimizedPaddle.md +++ b/benchmark/IntelOptimizedPaddle.md @@ -70,26 +70,26 @@ Test on batch size 1, 2, 4, 8, 16 on Intel(R) Xeon(R) Gold 6148 CPU @ 2.40GHz | BatchSize | 1 | 2 | 4 | 8 | 16 | |-----------|-------|-------|-------|-------|-------| -| OpenBLAS | 0.36 | 0.48 | 0.56 | 0.50 | 0.43 | -| MKLML | 5.41 | 9.52 | 14.71 | 20.46 | 29.35 | -| MKL-DNN | 65.52 | 89.94 | 83.92 | 94.77 | 95.78 | +| OpenBLAS | 1.07 | 1.08 | 1.06 | 0.88 | 0.65 | +| MKLML | 5.58 | 9.80 | 15.15 | 21.21 | 28.67 | +| MKL-DNN | 75.07 | 88.64 | 82.58 | 92.29 | 96.75 | - ResNet-50 | BatchSize | 1 | 2 | 4 | 8 | 16 | |-----------|-------|--------|--------|--------|--------| -| OpenBLAS | 0.29 | 0.43 | 0.71 | 0.85 | 0.71 | -| MKLML | 6.26 | 11.88 | 21.37 | 39.67 | 59.01 | -| MKL-DNN | 90.27 | 134.03 | 136.03 | 153.66 | 211.22 | +| OpenBLAS | 3.35 | 3.19 | 3.09 | 2.55 | 1.96 | +| MKLML | 6.33 | 12.02 | 22.88 | 40.53 | 63.09 | +| MKL-DNN | 107.83| 148.84 | 177.78 | 189.35 | 217.69 | -- GoogLeNet +- GoogLeNet | BatchSize | 1 | 2 | 4 | 8 | 16 | |-----------|--------|--------|--------|--------|--------| -| OpenBLAS | 12.47 | 12.36 | 12.25 | 12.13 | 12.08 | -| MKLML | 22.50 | 43.90 | 81.22 | 132.92 | 199.69 | -| MKL-DNN | 221.69 | 341.33 | 428.09 | 528.24 | 624.18 | +| OpenBLAS | 12.04 | 11.31 | 10.00 | 9.07 | 4.34 | +| MKLML | 22.74 | 41.56 | 81.22 | 133.47 | 210.53 | +| MKL-DNN | 175.10 | 272.92 | 450.70 | 512.00 | 600.94 | ### Laptop From a6ef875885486eea5573e4da52ec2c1c02f1d1e7 Mon Sep 17 00:00:00 2001 From: chengduoZH Date: Mon, 11 Dec 2017 14:05:15 +0800 Subject: [PATCH 045/193] refine conv --- paddle/operators/conv_op.h | 7 +++++-- paddle/operators/conv_transpose_op.h | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/paddle/operators/conv_op.h b/paddle/operators/conv_op.h index 09bff0a68d..66728d75a6 100644 --- a/paddle/operators/conv_op.h +++ b/paddle/operators/conv_op.h @@ -260,8 +260,11 @@ class GemmConvGradKernel : public framework::OpKernel { if (input_grad) { input_grad->mutable_data(context.GetPlace()); - set_zero(context.device_context(), input_grad, static_cast(0)); - + // if is_expand is false, the operation of set_zero is unnecessary, + // because math::matmul will reset input_grad. + if (is_expand) { + set_zero(context.device_context(), input_grad, static_cast(0)); + } math::Col2VolFunctor col2vol; math::Col2ImFunctor col2im; diff --git a/paddle/operators/conv_transpose_op.h b/paddle/operators/conv_transpose_op.h index 1cacb770e6..a43dd5b8c0 100644 --- a/paddle/operators/conv_transpose_op.h +++ b/paddle/operators/conv_transpose_op.h @@ -225,7 +225,7 @@ class GemmConvTransposeGradKernel : public framework::OpKernel { if (input_grad) { input_grad->mutable_data(context.GetPlace()); - set_zero(context.device_context(), input_grad, static_cast(0)); + // set_zero is unnecessary, math::matmul will reset input_grad. } if (filter_grad) { // filter size (m, c, k_h, k_w) filter_grad->mutable_data(context.GetPlace()); From 95924686096556d959e67b294e146153ac3b0dfb Mon Sep 17 00:00:00 2001 From: Yiqun Liu Date: Mon, 11 Dec 2017 16:12:36 +0800 Subject: [PATCH 046/193] Fix gcc4.9 (#6442) * Fix compiling error of gcc4.9. * Refine the check of cxx compiler flags in api/CMakeLists.txt. --- paddle/api/CMakeLists.txt | 12 +++- paddle/framework/backward.cc | 18 +++--- paddle/framework/backward_test.cc | 70 ++++++++++++++---------- paddle/framework/op_desc.cc | 4 +- paddle/framework/operator_test.cc | 4 +- paddle/framework/prune_test.cc | 44 ++++++++++----- paddle/operators/conditional_block_op.cc | 6 +- paddle/operators/net_op.h | 5 +- paddle/operators/net_op_test.cc | 16 +++--- paddle/operators/recurrent_op.cc | 5 +- paddle/operators/while_op.cc | 5 +- 11 files changed, 118 insertions(+), 71 deletions(-) diff --git a/paddle/api/CMakeLists.txt b/paddle/api/CMakeLists.txt index d6b8464100..cf84568ecd 100644 --- a/paddle/api/CMakeLists.txt +++ b/paddle/api/CMakeLists.txt @@ -25,8 +25,18 @@ FILE(GLOB PY_PADDLE_PYTHON_FILES ${PADDLE_SOURCE_DIR}/paddle/py_paddle/*.py) SET_SOURCE_FILES_PROPERTIES(Paddle.i PROPERTIES CPLUSPLUS ON) +SET(SWIG_NEED_FLAGS + -ftls-model=global-dynamic + -Wno-parentheses-equality + -Wno-self-assign + -Wno-maybe-uninitialized + -Wno-missing-field-initializers) + FOREACH(flag ${SWIG_NEED_FLAGS}) + safe_set_cxxflag(SWIG_CXX_FLAGS ${flag}) +ENDFOREACH() + SET(CMAKE_SWIG_OUTDIR ${CMAKE_CURRENT_BINARY_DIR}) -SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-parentheses-equality -Wno-missing-field-initializers -Wno-self-assign -ftls-model=global-dynamic") +SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${SWIG_CXX_FLAGS}") SET(SWIG_MODULE_swig_paddle_EXTRA_DEPS paddle_parameter diff --git a/paddle/framework/backward.cc b/paddle/framework/backward.cc index 7294ba1a9c..a17036c652 100644 --- a/paddle/framework/backward.cc +++ b/paddle/framework/backward.cc @@ -190,8 +190,9 @@ static std::unique_ptr BackwardRecursive( // collect all the offset for each alias, // insert a sum operator to add all aliases to output insert_position.push_back( - {dup_op.back(), OpRegistry::CreateOp("sum", {{"X", dup_outputs}}, - {{"Out", {name}}}, {})}); + {dup_op.back(), + OpRegistry::CreateOp("sum", {{"X", dup_outputs}}, {{"Out", {name}}}, + AttributeMap{})}); } // make sure the inserted `sum` ops follow the BFS order. @@ -216,7 +217,8 @@ static std::unique_ptr BackwardRecursive( // If part of input gradient of that operator is not calculated, fill // zero variables to that input gradient. net->AppendOp(OpRegistry::CreateOp("fill_zeros_like", {{"X", {prefix}}}, - {{"Y", {grad_input}}}, {})); + {{"Y", {grad_input}}}, + AttributeMap{})); } return false; }); @@ -392,8 +394,9 @@ std::vector> MakeOpGrad( 0, in_name.size() - sizeof(kGradVarSuffix) / sizeof(char) + 1); std::string new_name = prefix + kZeroVarSuffix; desc->Rename(in_name, new_name); - std::unique_ptr fill_zeros_op(new OpDescBind( - "fill_zeros_like", {{"X", {prefix}}}, {{"Y", {new_name}}}, {})); + std::unique_ptr fill_zeros_op( + new OpDescBind("fill_zeros_like", {{"X", {prefix}}}, + {{"Y", {new_name}}}, AttributeMap{})); pending_fill_zeros_ops.push_back(std::move(fill_zeros_op)); } } @@ -483,8 +486,9 @@ std::vector> MakeBlockBackward( sum_op_inputs.emplace_back(new_name); next_g_name = sum_op_inputs.back(); } - std::unique_ptr sum_op(new OpDescBind( - "sum", {{"X", sum_op_inputs}}, {{"Out", {out_name}}}, {})); + std::unique_ptr sum_op( + new OpDescBind("sum", {{"X", sum_op_inputs}}, {{"Out", {out_name}}}, + AttributeMap{})); pending_sum_ops.push_back({dup_op.back(), std::move(sum_op)}); } } diff --git a/paddle/framework/backward_test.cc b/paddle/framework/backward_test.cc index 2b858f5ea0..9fe49881d5 100644 --- a/paddle/framework/backward_test.cc +++ b/paddle/framework/backward_test.cc @@ -106,15 +106,15 @@ class FcOp : public operators::NetOp { FcOp(const std::string &type, const VariableNameMap &inputs, const VariableNameMap &outputs, const AttributeMap &attrs) : NetOp(type, inputs, outputs, attrs) { - AppendOp(OpRegistry::CreateOp("mul", - {{"X", {Input("X")}}, {"Y", {Input("W")}}}, - {{"Out", {Output("mul_result")}}}, {})); + AppendOp(OpRegistry::CreateOp( + "mul", {{"X", {Input("X")}}, {"Y", {Input("W")}}}, + {{"Out", {Output("mul_result")}}}, AttributeMap{})); auto input_b = Inputs("b"); std::string before_act = "mul_result"; if (input_b.size() != 0) { AppendOp(OpRegistry::CreateOp( "rowwise_add", {{"X", {Output("mul_result")}}, {"b", {input_b[0]}}}, - {{"Out", {Output("add_result")}}}, {})); + {{"Out", {Output("add_result")}}}, AttributeMap{})); before_act = "add_result"; } else { auto out_varname = Output("add_result"); @@ -124,7 +124,7 @@ class FcOp : public operators::NetOp { } AppendOp(OpRegistry::CreateOp("sigmoid", {{"X", {Output(before_act)}}}, - {{"Out", {Output("Out")}}}, {})); + {{"Out", {Output("Out")}}}, AttributeMap{})); CompleteAddOp(false); } }; @@ -278,8 +278,9 @@ REGISTER_OPERATOR(scale, f::NoneOp); REGISTER_OP_CPU_KERNEL(scale, f::NoneKernel); TEST(Backward, simple_op_not_need_grad) { - auto fwd = f::OpRegistry::CreateOp( - "rowwise_add", {{"X", {"x"}}, {"b", {"b"}}}, {{"Out", {"out"}}}, {}); + auto fwd = + f::OpRegistry::CreateOp("rowwise_add", {{"X", {"x"}}, {"b", {"b"}}}, + {{"Out", {"out"}}}, f::AttributeMap{}); ASSERT_NE(fwd, nullptr); auto gop = f::Backward(*fwd, {"x"}); ASSERT_EQ(gop->Output(f::GradVarName("X")), f::kEmptyVarName); @@ -296,9 +297,10 @@ TEST(Backward, net_fc_backward_normal) { {{"mul_result", {"mul_res"}}, {"add_result", {"add_re"}}, {"Out", {"out"}}}, - {}); + f::AttributeMap{}); ASSERT_NE(fwd, nullptr); - std::shared_ptr gop = f::Backward(*fwd, {}); + std::shared_ptr gop = + f::Backward(*fwd, std::unordered_set{}); ASSERT_TRUE(gop->IsNetOp()); auto net = static_cast(gop.get()); @@ -322,9 +324,10 @@ TEST(Backward, net_fc_backward_not_have_b) { {{"mul_result", {"mul_res"}}, {"add_result", {"add_res"}}, {"Out", {"tmp"}}}, - {}); + f::AttributeMap{}); ASSERT_NE(fwd, nullptr); - std::shared_ptr gop = f::Backward(*fwd, {}); + std::shared_ptr gop = + f::Backward(*fwd, std::unordered_set{}); ASSERT_TRUE(gop->IsNetOp()); auto net = static_cast(gop.get()); @@ -346,13 +349,13 @@ TEST(Backward, net_input_of_network_not_need_grad) { {{"mul_result", {"mul_tmp_0"}}, {"add_result", {"add_tmp_0"}}, {"Out", {"hidden0"}}}, - {})); + f::AttributeMap{})); net.AppendOp(f::OpRegistry::CreateOp( "fc", {{"X", {"hidden0"}}, {"W", {"W2"}}, {"b", {"b2"}}}, {{"mul_result", {"mul_tmp_1"}}, {"add_result", {"add_tmp_1"}}, {"Out", {"hidden1"}}}, - {})); + f::AttributeMap{})); net.CompleteAddOp(); auto bwd = Backward(net, {"x"}); // x@GRAD is not need. ASSERT_TRUE(bwd->IsNetOp()); @@ -381,12 +384,13 @@ TEST(Backward, net_input_of_network_not_need_grad) { TEST(Backward, net_shared_weight) { ops::NetOp net; net.AppendOp(f::OpRegistry::CreateOp("mul", {{"X", {"x"}}, {"Y", {"w"}}}, - {{"Out", {"out"}}}, {})); + {{"Out", {"out"}}}, f::AttributeMap{})); net.AppendOp(f::OpRegistry::CreateOp("mul", {{"X", {"out"}}, {"Y", {"w"}}}, - {{"Out", {"FinalOut"}}}, {})); + {{"Out", {"FinalOut"}}}, + f::AttributeMap{})); net.CompleteAddOp(); - auto bwd = f::Backward(net, {}); + auto bwd = f::Backward(net, std::unordered_set{}); ASSERT_TRUE(bwd->IsNetOp()); auto bwd_net = static_cast(bwd.get()); ASSERT_EQ(3UL, bwd_net->ops_.size()); @@ -394,8 +398,9 @@ TEST(Backward, net_shared_weight) { } TEST(Backward, op_all_input_are_not_need) { - auto fwd = f::OpRegistry::CreateOp( - "rowwise_add", {{"X", {"x"}}, {"b", {"b"}}}, {{"Out", {"out"}}}, {}); + auto fwd = + f::OpRegistry::CreateOp("rowwise_add", {{"X", {"x"}}, {"b", {"b"}}}, + {{"Out", {"out"}}}, f::AttributeMap{}); auto backward = f::Backward(*fwd, {"x", "b"}); ASSERT_TRUE(backward->IsNetOp()); auto net = static_cast(backward.get()); @@ -403,8 +408,9 @@ TEST(Backward, op_all_input_are_not_need) { } TEST(Backward, op_all_output_are_not_need) { - auto fwd = f::OpRegistry::CreateOp( - "rowwise_add", {{"X", {"x"}}, {"b", {"b"}}}, {{"Out", {"out"}}}, {}); + auto fwd = + f::OpRegistry::CreateOp("rowwise_add", {{"X", {"x"}}, {"b", {"b"}}}, + {{"Out", {"out"}}}, f::AttributeMap{}); auto backward = f::Backward(*fwd, {"out"}); ASSERT_TRUE(backward->IsNetOp()); auto net = static_cast(backward.get()); @@ -412,8 +418,9 @@ TEST(Backward, op_all_output_are_not_need) { } TEST(Backward, op_part_of_output_are_not_need) { - auto fwd = f::OpRegistry::CreateOp("many_output_op", {{"x", {"X"}}}, - {{"y", {"Y"}}, {"z", {"Z"}}}, {}); + auto fwd = + f::OpRegistry::CreateOp("many_output_op", {{"x", {"X"}}}, + {{"y", {"Y"}}, {"z", {"Z"}}}, f::AttributeMap{}); auto backward = f::Backward(*fwd, {"Z"}); ASSERT_TRUE(backward->IsNetOp()); auto net = static_cast(backward.get()); @@ -437,7 +444,7 @@ TEST(Backward, op_part_of_output_are_not_need) { TEST(Backward, op_part_of_input_are_not_need) { auto fwd = f::OpRegistry::CreateOp("mul", {{"X", {"a"}}, {"Y", {"b"}}}, - {{"Out", {"out"}}}, {}); + {{"Out", {"out"}}}, f::AttributeMap{}); auto backward = f::Backward(*fwd, {"a"}); auto &grad_mul = *backward; ASSERT_EQ(grad_mul.Type(), "mul_grad"); @@ -458,19 +465,19 @@ TEST(Backward, linear_net_intermediate_variable_has_no_grad) { {{"mul_result", {"mul_out1"}}, {"add_result", {"add_out1"}}, {"Out", {"out1"}}}, - {})); + f::AttributeMap{})); net.AppendOp(f::OpRegistry::CreateOp( "fc", {{"X", {"out1"}}, {"W", {"w2"}}, {"b", {"b2"}}}, {{"mul_result", {"mul_out2"}}, {"add_result", {"tmp_out2"}}, {"Out", {"out2"}}}, - {})); + f::AttributeMap{})); net.AppendOp(f::OpRegistry::CreateOp( "fc", {{"X", {"out2"}}, {"W", {"w3"}}, {"b", {"b3"}}}, {{"mul_result", {"mul_out3"}}, {"add_result", {"tmp_out3"}}, {"Out", {"out3"}}}, - {})); + f::AttributeMap{})); net.CompleteAddOp(); auto backward = f::Backward(net, {"mul_out2", "tmp_out2", "out2"}); @@ -509,7 +516,8 @@ TEST(Backward, simple_single_op) { auto target = f::VarDescBind("out"); target.SetShape({1}); - auto var_to_grad = AppendBackward(program, target, {}); + auto var_to_grad = + AppendBackward(program, target, std::unordered_set{}); ASSERT_EQ(block->AllOps().size(), 3UL); f::OpDescBind *fill_op = block->AllOps()[1]; @@ -546,7 +554,7 @@ TEST(Backward, default_attribute) { auto target = f::VarDescBind("out"); target.SetShape({1}); - AppendBackward(program, target, {}); + AppendBackward(program, target, std::unordered_set{}); ASSERT_EQ(block->AllOps().size(), 3UL); EXPECT_EQ(boost::get(op->GetAttr("x_num_col_dims")), 1); @@ -585,7 +593,8 @@ TEST(Backward, simple_mult_op) { auto target = f::VarDescBind("out3"); target.SetShape({1}); size_t forward_len = block->AllOps().size(); - auto var_to_grad = AppendBackward(program, target, {}); + auto var_to_grad = + AppendBackward(program, target, std::unordered_set{}); ASSERT_EQ(block->AllOps().size(), 6UL + 1); f::OpDescBind *fill_op = block->AllOps()[forward_len]; @@ -817,7 +826,8 @@ TEST(Backward, shared_var) { auto target = f::VarDescBind("out3"); target.SetShape({1}); size_t forward_len = block->AllOps().size(); - auto var_to_grad = AppendBackward(program, target, {}); + auto var_to_grad = + AppendBackward(program, target, std::unordered_set{}); ASSERT_EQ(block->AllOps().size(), 8UL); f::OpDescBind *fill_op = block->AllOps()[forward_len]; diff --git a/paddle/framework/op_desc.cc b/paddle/framework/op_desc.cc index cde3f1ac2e..7ba1e3e4e3 100644 --- a/paddle/framework/op_desc.cc +++ b/paddle/framework/op_desc.cc @@ -316,8 +316,8 @@ static void InitInferShapeFuncs() { for (auto &kern_pair : OperatorWithKernel::AllOpKernels()) { auto op_type = kern_pair.first; auto &op_info = info_map.at(op_type); - auto op = - static_cast(op_info.Creator()("", {}, {}, {})); + auto op = static_cast(op_info.Creator()( + "", VariableNameMap{}, VariableNameMap{}, AttributeMap{})); if (op_info.infer_shape_) { // infer_shape has been registered. continue; } diff --git a/paddle/framework/operator_test.cc b/paddle/framework/operator_test.cc index 1e19f82b34..59ddbc7791 100644 --- a/paddle/framework/operator_test.cc +++ b/paddle/framework/operator_test.cc @@ -261,7 +261,9 @@ class OperatorClone : public paddle::framework::OperatorBase { }; TEST(Operator, Clone) { - OperatorClone a("ABC", {}, {}, {}); + OperatorClone a("ABC", paddle::framework::VariableNameMap{}, + paddle::framework::VariableNameMap{}, + paddle::framework::AttributeMap{}); auto b = a.Clone(); ASSERT_EQ(a.Type(), b->Type()); } diff --git a/paddle/framework/prune_test.cc b/paddle/framework/prune_test.cc index 5988874809..f21df37a29 100644 --- a/paddle/framework/prune_test.cc +++ b/paddle/framework/prune_test.cc @@ -54,7 +54,8 @@ TEST(Prune, one_operator) { f::ProgramDescBind program; f::BlockDescBind *block = program.MutableBlock(0); - AddOp("one_one", {{"input", {"a"}}}, {{"output", {"b"}}}, {}, block); + AddOp("one_one", {{"input", {"a"}}}, {{"output", {"b"}}}, f::AttributeMap{}, + block); f::ProgramDesc *pdesc = program.Proto(); f::ProgramDesc pruned; @@ -71,10 +72,14 @@ TEST(Prune, forward) { f::ProgramDescBind program; f::BlockDescBind *block = program.MutableBlock(0); - AddOp("one_one", {{"input", {"a"}}}, {{"output", {"b"}}}, {}, block); - AddOp("one_one", {{"input", {"b"}}}, {{"output", {"c"}}}, {}, block); - AddOp("one_one", {{"input", {"c"}}}, {{"output", {"d"}}}, {}, block); - AddOp("one_one", {{"input", {"d"}}}, {{"output", {"e"}}}, {}, block); + AddOp("one_one", {{"input", {"a"}}}, {{"output", {"b"}}}, f::AttributeMap{}, + block); + AddOp("one_one", {{"input", {"b"}}}, {{"output", {"c"}}}, f::AttributeMap{}, + block); + AddOp("one_one", {{"input", {"c"}}}, {{"output", {"d"}}}, f::AttributeMap{}, + block); + AddOp("one_one", {{"input", {"d"}}}, {{"output", {"e"}}}, f::AttributeMap{}, + block); f::ProgramDesc *pdesc = program.Proto(); @@ -90,11 +95,14 @@ TEST(Prune, multi_input_op) { f::ProgramDescBind program; f::BlockDescBind *block = program.MutableBlock(0); - AddOp("one_one", {{"input", {"a0"}}}, {{"output", {"b0"}}}, {}, block); - AddOp("one_one", {{"input", {"a1"}}}, {{"output", {"b1"}}}, {}, block); - AddOp("one_one", {{"input", {"a2"}}}, {{"output", {"b2"}}}, {}, block); - AddOp("three_one", {{"input", {"b0", "b1", "b2"}}}, {{"output", {"c"}}}, {}, + AddOp("one_one", {{"input", {"a0"}}}, {{"output", {"b0"}}}, f::AttributeMap{}, + block); + AddOp("one_one", {{"input", {"a1"}}}, {{"output", {"b1"}}}, f::AttributeMap{}, block); + AddOp("one_one", {{"input", {"a2"}}}, {{"output", {"b2"}}}, f::AttributeMap{}, + block); + AddOp("three_one", {{"input", {"b0", "b1", "b2"}}}, {{"output", {"c"}}}, + f::AttributeMap{}, block); f::ProgramDesc *pdesc = program.Proto(); pdesc->mutable_blocks(0)->mutable_ops(3)->set_is_target(true); @@ -108,9 +116,12 @@ TEST(Prune, multi_output_op) { f::ProgramDescBind program; f::BlockDescBind *block = program.MutableBlock(0); - AddOp("one_two", {{"input", {"a"}}}, {{"output", {"b", "c"}}}, {}, block); - AddOp("one_one", {{"input", {"b"}}}, {{"output", {"b1"}}}, {}, block); - AddOp("one_one", {{"input", {"c"}}}, {{"output", {"c1"}}}, {}, block); + AddOp("one_two", {{"input", {"a"}}}, {{"output", {"b", "c"}}}, + f::AttributeMap{}, block); + AddOp("one_one", {{"input", {"b"}}}, {{"output", {"b1"}}}, f::AttributeMap{}, + block); + AddOp("one_one", {{"input", {"c"}}}, {{"output", {"c1"}}}, f::AttributeMap{}, + block); f::ProgramDesc *pdesc = program.Proto(); pdesc->mutable_blocks(0)->mutable_ops(2)->set_is_target(true); @@ -124,9 +135,12 @@ TEST(Prune, multi_target) { f::ProgramDescBind program; f::BlockDescBind *block = program.MutableBlock(0); - AddOp("one_two", {{"input", {"a"}}}, {{"output", {"b", "c"}}}, {}, block); - AddOp("one_one", {{"input", {"b"}}}, {{"output", {"b1"}}}, {}, block); - AddOp("one_one", {{"input", {"c"}}}, {{"output", {"c1"}}}, {}, block); + AddOp("one_two", {{"input", {"a"}}}, {{"output", {"b", "c"}}}, + f::AttributeMap{}, block); + AddOp("one_one", {{"input", {"b"}}}, {{"output", {"b1"}}}, f::AttributeMap{}, + block); + AddOp("one_one", {{"input", {"c"}}}, {{"output", {"c1"}}}, f::AttributeMap{}, + block); f::ProgramDesc *pdesc = program.Proto(); pdesc->mutable_blocks(0)->mutable_ops(1)->set_is_target(true); diff --git a/paddle/operators/conditional_block_op.cc b/paddle/operators/conditional_block_op.cc index d5b124682d..03c58a7eab 100644 --- a/paddle/operators/conditional_block_op.cc +++ b/paddle/operators/conditional_block_op.cc @@ -142,9 +142,9 @@ class ConditionalBlockGradOp : public ConditionalOp { continue; } auto new_in_grad_name = cur_scope.Rename(in_grad_name); - auto assign = - framework::OpRegistry::CreateOp("assign", {{"X", {new_in_grad_name}}}, - {{"Out", {out_grad_name}}}, {}); + auto assign = framework::OpRegistry::CreateOp( + "assign", {{"X", {new_in_grad_name}}}, {{"Out", {out_grad_name}}}, + framework::AttributeMap{}); assign->Run(cur_scope, dev_ctx); cur_scope.Rename(new_in_grad_name, in_grad_name); } diff --git a/paddle/operators/net_op.h b/paddle/operators/net_op.h index ebeb262d96..8935751f15 100644 --- a/paddle/operators/net_op.h +++ b/paddle/operators/net_op.h @@ -38,7 +38,10 @@ namespace operators { class NetOp : public framework::OperatorBase { public: static const char kAll[]; - NetOp() : framework::OperatorBase("plain_net", {}, {}, {}) {} + NetOp() + : framework::OperatorBase("plain_net", framework::VariableNameMap{}, + framework::VariableNameMap{}, + framework::AttributeMap{}) {} NetOp(const std::string& type, const framework::VariableNameMap& inputs, const framework::VariableNameMap& outputs, diff --git a/paddle/operators/net_op_test.cc b/paddle/operators/net_op_test.cc index 63bebd5b44..22fba9568d 100644 --- a/paddle/operators/net_op_test.cc +++ b/paddle/operators/net_op_test.cc @@ -38,10 +38,10 @@ TEST(OpKernel, all) { net->AppendOp(std::unique_ptr( new TestOp("test", {{"X", {"x"}}, {"W", {"w1"}}, {"b", {"b1"}}}, - {{"Out", {"y"}}}, {}))); + {{"Out", {"y"}}}, framework::AttributeMap{}))); net->AppendOp(std::unique_ptr( new TestOp("test", {{"X", {"y"}}, {"W", {"w2"}}, {"b", {"b2"}}}, - {{"Out", {"z"}}}, {}))); + {{"Out", {"z"}}}, framework::AttributeMap{}))); net->CompleteAddOp(); AssertSameVectorWithoutOrder({"x", "w1", "b1", "w2", "b2"}, @@ -58,7 +58,7 @@ TEST(NetOp, insert_op) { NetOp net; auto op1 = std::unique_ptr( new framework::NOP("empty", {{"X", {"x"}}, {"W", {"w1"}}, {"b", {"b1"}}}, - {{"Out", {"y"}}}, {})); + {{"Out", {"y"}}}, framework::AttributeMap{})); net.AppendOp(*op1); net.InsertOp(0, *op1); ASSERT_EQ(2UL, net.ops_.size()); @@ -68,10 +68,12 @@ TEST(NetOp, insert_op) { TEST(NetOp, Clone) { NetOp net; - net.AppendOp( - std::unique_ptr(new framework::NOP{"empty", {}, {}, {}})); - net.AppendOp(std::unique_ptr( - new framework::NOP{"empty2", {}, {}, {}})); + net.AppendOp(std::unique_ptr(new framework::NOP{ + "empty", framework::VariableNameMap{}, framework::VariableNameMap{}, + framework::AttributeMap{}})); + net.AppendOp(std::unique_ptr(new framework::NOP{ + "empty2", framework::VariableNameMap{}, framework::VariableNameMap{}, + framework::AttributeMap{}})); net.CompleteAddOp(true); auto new_net_op = net.Clone(); ASSERT_NE(new_net_op, nullptr); diff --git a/paddle/operators/recurrent_op.cc b/paddle/operators/recurrent_op.cc index 8b60b9c912..29f9163643 100644 --- a/paddle/operators/recurrent_op.cc +++ b/paddle/operators/recurrent_op.cc @@ -408,7 +408,8 @@ class RecurrentGradOp : public RecurrentBase { attrs["value"] = 0.0f; auto zero_op = framework::OpRegistry::CreateOp( - "fill_constant", {}, {{"Out", {pg_names[param_id]}}}, attrs); + "fill_constant", framework::VariableNameMap{}, + {{"Out", {pg_names[param_id]}}}, attrs); zero_op->Run(scope, dev_ctx); } @@ -417,7 +418,7 @@ class RecurrentGradOp : public RecurrentBase { auto sum_op = framework::OpRegistry::CreateOp( "sum", {{"X", {pg_names[param_id], new_inside_name}}}, - {{"Out", {pg_names[param_id]}}}, {}); + {{"Out", {pg_names[param_id]}}}, framework::AttributeMap{}); sum_op->Run(cur_scope, dev_ctx); cur_scope.Rename(new_inside_name, inside_grad_name); diff --git a/paddle/operators/while_op.cc b/paddle/operators/while_op.cc index 9b3f21cf94..b8e44bcc5a 100644 --- a/paddle/operators/while_op.cc +++ b/paddle/operators/while_op.cc @@ -187,7 +187,8 @@ class WhileGradOp : public framework::OperatorBase { attrs["value"] = 0.0f; auto zero_op = framework::OpRegistry::CreateOp( - "fill_constant", {}, {{"Out", {pg_names[param_id]}}}, attrs); + "fill_constant", framework::VariableNameMap{}, + {{"Out", {pg_names[param_id]}}}, attrs); zero_op->Run(scope, dev_ctx); } } @@ -195,7 +196,7 @@ class WhileGradOp : public framework::OperatorBase { auto new_inside_name = cur_scope.Rename(inside_grad_name); auto sum_op = framework::OpRegistry::CreateOp( "sum", {{"X", {pg_names[param_id], new_inside_name}}}, - {{"Out", {pg_names[param_id]}}}, {}); + {{"Out", {pg_names[param_id]}}}, framework::AttributeMap{}); sum_op->Run(cur_scope, dev_ctx); cur_scope.Rename(new_inside_name, inside_grad_name); } From 8d428bd9b89ec59dfcf16eb9e319a9106415b766 Mon Sep 17 00:00:00 2001 From: ranqiu Date: Mon, 4 Dec 2017 19:28:12 +0800 Subject: [PATCH 047/193] Update annotations of layers.py --- .../paddle/trainer_config_helpers/layers.py | 121 ++++++++++-------- 1 file changed, 66 insertions(+), 55 deletions(-) diff --git a/python/paddle/trainer_config_helpers/layers.py b/python/paddle/trainer_config_helpers/layers.py index 4bd94861af..48858f4c34 100644 --- a/python/paddle/trainer_config_helpers/layers.py +++ b/python/paddle/trainer_config_helpers/layers.py @@ -1516,34 +1516,33 @@ def lstmemory(input, NOTE: This is a low level user interface. You can use network.simple_lstm to config a simple plain lstm layer. - Please refer to **Generating Sequences With Recurrent Neural Networks** for - more details about LSTM. - - Link_ goes as below. - - .. _Link: http://arxiv.org/abs/1308.0850 + Reference: + `Generating Sequences With Recurrent Neural Networks + `_ - :param name: The lstmemory layer name. + :param name: The name of this layer. It is optional. :type name: basestring - :param size: DEPRECATED. size of the lstm cell + :param size: DEPRECATED. The dimension of the lstm cell. :type size: int :param input: The input of this layer. :type input: LayerOutput - :param reverse: is sequence process reversed or not. + :param reverse: Whether the input sequence is processed in a reverse order. :type reverse: bool :param act: Activation type. TanhActivation is the default activation. :type act: BaseActivation - :param gate_act: gate activation type, SigmoidActivation by default. + :param gate_act: Activation type of this layer's gates. SigmoidActivation is the + default activation. :type gate_act: BaseActivation - :param state_act: state activation type, TanhActivation by default. + :param state_act: Activation type of the state. TanhActivation is the default activation. :type state_act: BaseActivation :param bias_attr: The bias attribute. If the parameter is set to False or an object whose type is not ParameterAttribute, no bias is defined. If the parameter is set to True, the bias is initialized to zero. :type bias_attr: ParameterAttribute | None | bool | Any - :param param_attr: Parameter Attribute. - :type param_attr: ParameterAttribute | None | False - :param layer_attr: Extra Layer attribute + :param param_attr: The parameter attribute. See ParameterAttribute for details. + :type param_attr: ParameterAttribute + :param layer_attr: The extra layer attribute. See ExtraLayerAttribute for + details. :type layer_attr: ExtraLayerAttribute | None :return: LayerOutput object. :rtype: LayerOutput @@ -1632,14 +1631,14 @@ def grumemory(input, h_t = (1 - z_t) h_{t-1} + z_t {\\tilde{h_t}} NOTE: In PaddlePaddle's implementation, the multiplication operations - :math:`W_{r}x_{t}`, :math:`W_{z}x_{t}` and :math:`W x_t` are not computed in - gate_recurrent layer. Consequently, an additional mixed_layer with + :math:`W_{r}x_{t}`, :math:`W_{z}x_{t}` and :math:`W x_t` are not performed + in gate_recurrent layer. Consequently, an additional mixed_layer with full_matrix_projection or a fc_layer must be included before grumemory is called. - More details can be found by referring to `Empirical Evaluation of Gated - Recurrent Neural Networks on Sequence Modeling. - `_ + Reference: + `Empirical Evaluation of Gated Recurrent Neural Networks on Sequence Modeling + `_ The simple usage is: @@ -1647,28 +1646,29 @@ def grumemory(input, gru = grumemory(input) - :param name: The gru layer name. - :type name: None | basestring + :param name: The name of this layer. It is optional. + :type name: basestring :param input: The input of this layer. :type input: LayerOutput. - :param size: DEPRECATED. size of the gru cell + :param size: DEPRECATED. The dimension of the gru cell. :type size: int - :param reverse: Whether sequence process is reversed or not. + :param reverse: Whether the input sequence is processed in a reverse order. :type reverse: bool :param act: Activation type, TanhActivation is the default. This activation affects the :math:`{\\tilde{h_t}}`. :type act: BaseActivation - :param gate_act: gate activation type, SigmoidActivation by default. - This activation affects the :math:`z_t` and :math:`r_t`. It is the - :math:`\\sigma` in the above formula. + :param gate_act: Activation type of this layer's two gates. SigmoidActivation is + the default activation. This activation affects the :math:`z_t` + and :math:`r_t`. It is the :math:`\\sigma` in the above formula. :type gate_act: BaseActivation :param bias_attr: The bias attribute. If the parameter is set to False or an object whose type is not ParameterAttribute, no bias is defined. If the parameter is set to True, the bias is initialized to zero. :type bias_attr: ParameterAttribute | None | bool | Any - :param param_attr: Parameter Attribute. - :type param_attr: ParameterAttribute | None | False - :param layer_attr: Extra Layer attribute + :param param_attr: The parameter attribute. See ParameterAttribute for details. + :type param_attr: ParameterAttribute + :param layer_attr: The extra layer attribute. See ExtraLayerAttribute for + details. :type layer_attr: ExtraLayerAttribute | None :return: LayerOutput object. :rtype: LayerOutput @@ -1712,10 +1712,10 @@ def last_seq(input, """ Get Last Timestamp Activation of a sequence. - If stride > 0, this layer slides a window whose size is determined by stride, - and return the last value of the window as the output. Thus, a long sequence - will be shorten. Note that for sequence with sub-sequence, the default value - of stride is -1. + If stride > 0, this layer will slide a window whose size is determined by stride, + and return the last value of the sequence in the window as the output. Thus, a + long sequence will be shortened. Note that for sequence with sub-sequence, the + default value of stride is -1. The simple usage is: @@ -1724,14 +1724,16 @@ def last_seq(input, seq = last_seq(input=layer) :param agg_level: Aggregated level + :type agg_level: AggregateLevel :param name: The name of this layer. It is optional. :type name: basestring :param input: The input of this layer. :type input: LayerOutput :param stride: The step size between successive pooling regions. - :type stride: Int - :param layer_attr: extra layer attributes. - :type layer_attr: ExtraLayerAttribute. + :type stride: int + :param layer_attr: The extra layer attribute. See ExtraLayerAttribute for + details. + :type layer_attr: ExtraLayerAttribute :return: LayerOutput object. :rtype: LayerOutput """ @@ -1768,10 +1770,10 @@ def first_seq(input, """ Get First Timestamp Activation of a sequence. - If stride > 0, this layer slides a window whose size is determined by stride, - and return the first value of the window as the output. Thus, a long sequence - will be shorten. Note that for sequence with sub-sequence, the default value - of stride is -1. + If stride > 0, this layer will slide a window whose size is determined by stride, + and return the first value of the sequence in the window as the output. Thus, a + long sequence will be shortened. Note that for sequence with sub-sequence, the + default value of stride is -1. The simple usage is: @@ -1780,13 +1782,15 @@ def first_seq(input, seq = first_seq(input=layer) :param agg_level: aggregation level + :type agg_level: AggregateLevel :param name: The name of this layer. It is optional. :type name: basestring :param input: The input of this layer. :type input: LayerOutput :param stride: The step size between successive pooling regions. - :type stride: Int - :param layer_attr: extra layer attributes. + :type stride: int + :param layer_attr: The extra layer attribute. See ExtraLayerAttribute for + details. :type layer_attr: ExtraLayerAttribute. :return: LayerOutput object. :rtype: LayerOutput @@ -1844,8 +1848,8 @@ def expand_layer(input, expand_level=ExpandLevel.FROM_NO_SEQUENCE, layer_attr=None): """ - A layer for "Expand Dense data or (sequence data where the length of each - sequence is one) to sequence data." + A layer for expanding dense data or (sequence data where the length of each + sequence is one) to sequence data. The example usage is: @@ -1857,7 +1861,9 @@ def expand_layer(input, :param input: The input of this layer. :type input: LayerOutput - :param expand_as: Expand as this layer's sequence info. + :param expand_as: Expand the input according to this layer's sequence infomation. And + after the operation, the input expanded will have the same number of + elememts as this layer. :type expand_as: LayerOutput :param name: The name of this layer. It is optional. :type name: basestring @@ -1865,9 +1871,10 @@ def expand_layer(input, whose type is not ParameterAttribute, no bias is defined. If the parameter is set to True, the bias is initialized to zero. :type bias_attr: ParameterAttribute | None | bool | Any - :param expand_level: whether input layer is timestep(default) or sequence. + :param expand_level: Whether the input layer is a sequence or the element of a sequence. :type expand_level: ExpandLevel - :param layer_attr: extra layer attributes. + :param layer_attr: The extra layer attribute. See ExtraLayerAttribute for + details. :type layer_attr: ExtraLayerAttribute. :return: LayerOutput object. :rtype: LayerOutput @@ -3294,7 +3301,7 @@ def row_l2_norm_layer(input, name=None, layer_attr=None): A layer for L2-normalization in each row. .. math:: - out[i] = \frac{in[i]}{\sqrt{\sum_{k=1}^N in[k]^{2}}} + out[i] = \\frac{in[i]} {\\sqrt{\\sum_{k=1}^N in[k]^{2}}} where the size of :math:`in` is (batchSize x dataDim) , and the size of :math:`out` is a (batchSize x dataDim) . @@ -6161,9 +6168,11 @@ def huber_regression_cost(input, Given a prediction f(x), a label y and :math:`\delta`, the loss function is defined as: - .. math: - loss = 0.5*\left ( y-f(x) \right )^2, \left | y-f(x) \right |\leq \delta - loss = \delta \left | y-f(x) \right |-0.5\delta ^2, otherwise + .. math:: + + loss = 0.5*(y-f(x))^{2}, | y-f(x) | < \delta + + loss = \delta | y-f(x) | - 0.5 \delta ^2, otherwise The example usage is: @@ -6210,12 +6219,14 @@ def huber_classification_cost(input, """ For classification purposes, a variant of the Huber loss called modified Huber is sometimes used. Given a prediction f(x) (a real-valued classifier score) and - a true binary class label :math:`y\in \left \{-1, 1 \right \}`, the modified Huber + a true binary class label :math:`y\in \{-1, 1 \}`, the modified Huber loss is defined as: .. math: - loss = \max \left ( 0, 1-yf(x) \right )^2, yf(x)\geq 1 - loss = -4yf(x), \text{otherwise} + + loss = \max ( 0, 1-yf(x) )^2, yf(x) \geq -1 + + loss = -4yf(x), otherwise The example usage is: @@ -6959,7 +6970,7 @@ def clip_layer(input, min, max, name=None): .. math:: - out[i] = \min\left(\max\left(in[i],p_{1}\right),p_{2}\right) + out[i] = \min (\max (in[i],p_{1} ),p_{2} ) .. code-block:: python From ddf20e589fad724f077b0613ebf3872d2311647a Mon Sep 17 00:00:00 2001 From: Luo Tao Date: Mon, 11 Dec 2017 18:31:14 +0800 Subject: [PATCH 048/193] typo WITH_TEST to WITH_TESTING --- doc/howto/dev/contribute_to_paddle_cn.md | 2 +- paddle/scripts/docker/README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/howto/dev/contribute_to_paddle_cn.md b/doc/howto/dev/contribute_to_paddle_cn.md index 6993901452..3eb477eb65 100644 --- a/doc/howto/dev/contribute_to_paddle_cn.md +++ b/doc/howto/dev/contribute_to_paddle_cn.md @@ -87,7 +87,7 @@ no changes added to commit (use "git add" and/or "git commit -a") 随后可以用这个开发镜像开始build PaddlePaddle的源码。比如如果要build一个不依赖GPU,但是支持AVX指令集,并且包括unit tests的PaddlePaddle,可以: ```bash -➜ docker run -v $(pwd):/paddle -e "WITH_GPU=OFF" -e "WITH_AVX=ON" -e "WITH_TEST=ON" paddle:dev +➜ docker run -v $(pwd):/paddle -e "WITH_GPU=OFF" -e "WITH_AVX=ON" -e "WITH_TESTING=ON" paddle:dev ``` 这个过程除了编译PaddlePaddle为 `./build/libpaddle.so`,并且输出一个 `./build/paddle.deb`文件之外,还会输出一个 `build/Dockerfile`。我们只需要运行下面命令把编译好的PaddlePaddle打包成一个*生产镜像*(`paddle:prod`): diff --git a/paddle/scripts/docker/README.md b/paddle/scripts/docker/README.md index f3a6f1dba7..1e1fcc50dc 100644 --- a/paddle/scripts/docker/README.md +++ b/paddle/scripts/docker/README.md @@ -192,7 +192,7 @@ For developers who are interested in the C++ source code, please use -e "WOBOQ=O - The following command builds PaddlePaddle, generates HTML pages from C++ source code, and writes HTML pages into `$HOME/woboq_out` on the host: ```bash -docker run -v $PWD:/paddle -v $HOME/woboq_out:/woboq_out -e "WITH_GPU=OFF" -e "WITH_AVX=ON" -e "WITH_TEST=ON" -e "WOBOQ=ON" paddlepaddle/paddle:latest-dev +docker run -v $PWD:/paddle -v $HOME/woboq_out:/woboq_out -e "WITH_GPU=OFF" -e "WITH_AVX=ON" -e "WITH_TESTING=ON" -e "WOBOQ=ON" paddlepaddle/paddle:latest-dev ``` - You can open the generated HTML files in your Web browser. Or, if you want to run a Nginx container to serve them for a wider audience, you can run: From 9f44af9d7c9dd2f1dc775f59d059a87eb9e64fd6 Mon Sep 17 00:00:00 2001 From: Yu Yang Date: Mon, 11 Dec 2017 18:37:18 +0800 Subject: [PATCH 049/193] Fix #6460 (#6461) --- python/paddle/v2/fluid/layers.py | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/python/paddle/v2/fluid/layers.py b/python/paddle/v2/fluid/layers.py index b4426bad14..fd8a2ed18c 100644 --- a/python/paddle/v2/fluid/layers.py +++ b/python/paddle/v2/fluid/layers.py @@ -762,7 +762,7 @@ def sequence_conv(input, helper = LayerHelper('sequence_conv', **locals()) dtype = helper.input_dtype() filter_shape = [filter_size * input.shape[1], num_filters] - filter = helper.create_parameter( + filter_param = helper.create_parameter( attr=helper.param_attr, shape=filter_shape, dtype=dtype) pre_bias = helper.create_tmp_variable(dtype) @@ -770,7 +770,7 @@ def sequence_conv(input, type='sequence_conv', inputs={ 'X': [input], - 'Filter': [filter], + 'Filter': [filter_param], }, outputs={"Out": pre_bias}, attrs={ @@ -785,7 +785,7 @@ def sequence_conv(input, def conv2d(input, num_filters, filter_size, - stride=[1, 1], + stride=None, padding=None, groups=None, param_attr=None, @@ -802,6 +802,8 @@ def conv2d(input, conv-2d output, if mentioned in the input parameters. """ + if stride is None: + stride = [1, 1] helper = LayerHelper('conv2d', **locals()) dtype = helper.input_dtype() @@ -827,7 +829,7 @@ def conv2d(input, std = (2.0 / (filter_size[0]**2 * num_channels))**0.5 return Normal(0.0, std, 0) - filter = helper.create_parameter( + filter_param = helper.create_parameter( attr=helper.param_attr, shape=filter_shape, dtype=dtype, @@ -839,7 +841,7 @@ def conv2d(input, type='conv2d_cudnn', inputs={ 'Input': input, - 'Filter': filter, + 'Filter': filter_param, }, outputs={"Output": pre_bias}, attrs={'strides': stride, @@ -875,8 +877,8 @@ def sequence_pool(input, pool_type, **kwargs): def pool2d(input, pool_size, pool_type, - pool_stride=[1, 1], - pool_padding=[0, 0], + pool_stride=None, + pool_padding=None, global_pooling=False, main_program=None, startup_program=None): @@ -884,6 +886,10 @@ def pool2d(input, This function adds the operator for pooling in 2 dimensions, using the pooling configurations mentioned in input parameters. """ + if pool_padding is None: + pool_padding = [0, 0] + if pool_stride is None: + pool_stride = [1, 1] if pool_type not in ["max", "avg"]: raise ValueError( "Unknown pool_type: '%s'. It can only be 'max' or 'avg'.", From 7389ea98eaae7ca79442811991cba37f908e5a74 Mon Sep 17 00:00:00 2001 From: dzhwinter Date: Mon, 11 Dec 2017 03:24:25 -0800 Subject: [PATCH 050/193] "add NCCL multi-GPU design doc" --- .../design}/images/multigpu_allreduce.graffle | Bin .../design}/images/multigpu_allreduce.png | Bin .../images/multigpu_before_convert.graffle | Bin .../design}/images/multigpu_before_convert.png | Bin .../multigpu.md => doc/design/paddle_nccl.md | 14 ++++++-------- 5 files changed, 6 insertions(+), 8 deletions(-) rename {paddle/framework => doc/design}/images/multigpu_allreduce.graffle (100%) rename {paddle/framework => doc/design}/images/multigpu_allreduce.png (100%) rename {paddle/framework => doc/design}/images/multigpu_before_convert.graffle (100%) rename {paddle/framework => doc/design}/images/multigpu_before_convert.png (100%) rename paddle/framework/multigpu.md => doc/design/paddle_nccl.md (83%) diff --git a/paddle/framework/images/multigpu_allreduce.graffle b/doc/design/images/multigpu_allreduce.graffle similarity index 100% rename from paddle/framework/images/multigpu_allreduce.graffle rename to doc/design/images/multigpu_allreduce.graffle diff --git a/paddle/framework/images/multigpu_allreduce.png b/doc/design/images/multigpu_allreduce.png similarity index 100% rename from paddle/framework/images/multigpu_allreduce.png rename to doc/design/images/multigpu_allreduce.png diff --git a/paddle/framework/images/multigpu_before_convert.graffle b/doc/design/images/multigpu_before_convert.graffle similarity index 100% rename from paddle/framework/images/multigpu_before_convert.graffle rename to doc/design/images/multigpu_before_convert.graffle diff --git a/paddle/framework/images/multigpu_before_convert.png b/doc/design/images/multigpu_before_convert.png similarity index 100% rename from paddle/framework/images/multigpu_before_convert.png rename to doc/design/images/multigpu_before_convert.png diff --git a/paddle/framework/multigpu.md b/doc/design/paddle_nccl.md similarity index 83% rename from paddle/framework/multigpu.md rename to doc/design/paddle_nccl.md index 1c843326ee..7c889fdd7f 100644 --- a/paddle/framework/multigpu.md +++ b/doc/design/paddle_nccl.md @@ -1,15 +1,17 @@ -# Design Doc: Multi-GPU support in Operation Graph +# Design Doc: NCCL support in Paddle Fluid ## Abstract -This Design Doc refers to the multi-GPU feature in paddle. We propose an approach to support multi-GPU both on a single machine and multiple machines. Every device only run sub-graphs which our framework issued. We use `Broadcast`, `Allreduce` operators to join different device sub-graph to the whole graph. - +This Design Doc refers to the NCCL feature in paddle. We propose an approach to support NCCL library both on a single machine and multiple machines. We wrapper the NCCL primitives `Broadcast`, `Allreduce`, `Reduce` as operators to utilize Multi-GPU powers in one script. ## Motivation -Paddle supports training with multiple CPUs and GPUs, refer to different physical devices. We need to support multi-GPU training in parallel for acceleration, in detail, there are two aspects. +NCCL is a Nvidia library support Multi-GPU communicating. [NCCL](https://developer.nvidia.com/nccl). With NCCL library, we can easily accelerate the training in parallel. +- can easily move the optimize sub-graph to parameter server, multi-GPU feature can be compatible with distributed support design. +- easily plug-in with [NCCL2](https://developer.nvidia.com/nccl) library. +- GPU Model parallelism becomes easier to implement. we only need to replace different GPU's sub-graph with different part of the whole graph. - GPU Data Parallelism Suppose to we have `n`GPUs, every GPU has `1/n`part of training data, and store a complete model in GPU memory. @@ -58,7 +60,3 @@ As it shown in the picture, when each GPU compute the gradient of `W`, followed In fact, in the way of every GPU optimized full batch of data, wasted (n-1) GPU compute resources. We will enhance it in the next stage. ### Benefits - -- can easily move the optimize sub-graph to parameter server, multi-GPU feature can be compatible with distributed support design. -- easily plug-in with [NCCL2](https://developer.nvidia.com/nccl) library. -- GPU Model parallelism becomes easier to implement. we only need to replace different GPU's sub-graph with different part of the whole graph. From 69b44f2f198509e29b8ab50edab9ab34f56fd1af Mon Sep 17 00:00:00 2001 From: tensor-tang Date: Tue, 12 Dec 2017 15:31:44 +0800 Subject: [PATCH 051/193] unify MKL macro definition --- cmake/cblas.cmake | 2 +- cmake/external/mkldnn.cmake | 2 +- paddle/gserver/activations/ActivationFunction.cpp | 4 ++-- paddle/gserver/gradientmachines/NeuralNetwork.cpp | 4 ++-- paddle/math/Allocator.h | 2 +- paddle/math/MathFunctions.cpp | 2 +- paddle/math/MathFunctions.h | 2 +- paddle/memory/detail/system_allocator.cc | 2 +- paddle/operators/math/math_function.cc | 2 +- paddle/operators/math/math_function.h | 2 +- paddle/parameter/FirstOrderOptimizer.h | 2 +- paddle/parameter/ParameterUpdateFunctions.cpp | 2 +- paddle/utils/Flags.cpp | 2 +- 13 files changed, 15 insertions(+), 15 deletions(-) diff --git a/cmake/cblas.cmake b/cmake/cblas.cmake index b21fc43904..13294c0548 100644 --- a/cmake/cblas.cmake +++ b/cmake/cblas.cmake @@ -17,7 +17,7 @@ if(WITH_MKLML AND MKLML_INC_DIR AND MKLML_LIB) set(CBLAS_INC_DIR ${MKLML_INC_DIR}) set(CBLAS_LIBRARIES ${MKLML_LIB}) - add_definitions(-DPADDLE_USE_MKLML) + add_definitions(-DPADDLE_WITH_MKLML) add_definitions(-DLAPACK_FOUND) message(STATUS "Found cblas and lapack in MKLML " diff --git a/cmake/external/mkldnn.cmake b/cmake/external/mkldnn.cmake index fc52d339d7..5d24caebdc 100644 --- a/cmake/external/mkldnn.cmake +++ b/cmake/external/mkldnn.cmake @@ -67,5 +67,5 @@ ADD_LIBRARY(mkldnn SHARED IMPORTED GLOBAL) SET_PROPERTY(TARGET mkldnn PROPERTY IMPORTED_LOCATION ${MKLDNN_LIB}) ADD_DEPENDENCIES(mkldnn ${MKLDNN_PROJECT}) MESSAGE(STATUS "MKLDNN library: ${MKLDNN_LIB}") -add_definitions(-DPADDLE_USE_MKLDNN) +add_definitions(-DPADDLE_WITH_MKLDNN) LIST(APPEND external_project_dependencies mkldnn) diff --git a/paddle/gserver/activations/ActivationFunction.cpp b/paddle/gserver/activations/ActivationFunction.cpp index f5a41b66bf..57c890e488 100644 --- a/paddle/gserver/activations/ActivationFunction.cpp +++ b/paddle/gserver/activations/ActivationFunction.cpp @@ -24,7 +24,7 @@ limitations under the License. */ #include "paddle/utils/ClassRegistrar.h" #include "paddle/utils/Logging.h" -#ifdef PADDLE_USE_MKLDNN +#ifdef PADDLE_WITH_MKLDNN #include "MKLDNNActivation.h" #endif @@ -490,7 +490,7 @@ Error __must_check backward(Argument& act) { END_DEFINE_ACTIVATION(log) ActivationFunction* ActivationFunction::create(const std::string& type) { -#ifdef PADDLE_USE_MKLDNN +#ifdef PADDLE_WITH_MKLDNN if (!type.empty() && type.compare(0, 7, "mkldnn_") == 0) { return MKLDNNActivation::create(type); } diff --git a/paddle/gserver/gradientmachines/NeuralNetwork.cpp b/paddle/gserver/gradientmachines/NeuralNetwork.cpp index be112b4123..68bf37d59d 100644 --- a/paddle/gserver/gradientmachines/NeuralNetwork.cpp +++ b/paddle/gserver/gradientmachines/NeuralNetwork.cpp @@ -20,7 +20,7 @@ limitations under the License. */ #include "paddle/utils/Logging.h" #include "paddle/utils/Stat.h" -#ifdef PADDLE_USE_MKLDNN +#ifdef PADDLE_WITH_MKLDNN #include "paddle/gserver/layers/MKLDNNLayer.h" #endif @@ -307,7 +307,7 @@ void NeuralNetwork::backward(const UpdateCallback& callback) { } void NeuralNetwork::finish() { -#ifdef PADDLE_USE_MKLDNN +#ifdef PADDLE_WITH_MKLDNN FOR_EACH_R(layer, layers_) { MKLDNNLayerPtr dnnLayer = std::dynamic_pointer_cast(*layer); if (dnnLayer) { diff --git a/paddle/math/Allocator.h b/paddle/math/Allocator.h index 94ef561f06..17563bf5e1 100644 --- a/paddle/math/Allocator.h +++ b/paddle/math/Allocator.h @@ -48,7 +48,7 @@ public: */ virtual void* alloc(size_t size) { void* ptr; -#ifdef PADDLE_USE_MKLDNN +#ifdef PADDLE_WITH_MKLDNN // refer to https://github.com/01org/mkl-dnn/blob/master/include/mkldnn.hpp // memory alignment CHECK_EQ(posix_memalign(&ptr, 4096ul, size), 0); diff --git a/paddle/math/MathFunctions.cpp b/paddle/math/MathFunctions.cpp index ba86eacbb5..28ab54b450 100644 --- a/paddle/math/MathFunctions.cpp +++ b/paddle/math/MathFunctions.cpp @@ -206,7 +206,7 @@ double dotProduct(const int n, const double* x, const double* y) { } #endif -#if defined(PADDLE_USE_MKLML) +#if defined(PADDLE_WITH_MKLML) template <> void vExp(const int n, const float* a, float* r) { diff --git a/paddle/math/MathFunctions.h b/paddle/math/MathFunctions.h index f6e77029bd..29fe36e3a4 100644 --- a/paddle/math/MathFunctions.h +++ b/paddle/math/MathFunctions.h @@ -15,7 +15,7 @@ limitations under the License. */ #ifndef MATHFUNCTIONS_H_ #define MATHFUNCTIONS_H_ -#ifdef PADDLE_USE_MKLML +#ifdef PADDLE_WITH_MKLML #include #include #include diff --git a/paddle/memory/detail/system_allocator.cc b/paddle/memory/detail/system_allocator.cc index b543b767e8..6a815a1b57 100644 --- a/paddle/memory/detail/system_allocator.cc +++ b/paddle/memory/detail/system_allocator.cc @@ -43,7 +43,7 @@ void* CPUAllocator::Alloc(size_t& index, size_t size) { void* p; -#ifdef PADDLE_USE_MKLDNN +#ifdef PADDLE_WITH_MKLDNN // refer to https://github.com/01org/mkl-dnn/blob/master/include/mkldnn.hpp // memory alignment PADDLE_ENFORCE_EQ(posix_memalign(&p, 4096ul, size), 0); diff --git a/paddle/operators/math/math_function.cc b/paddle/operators/math/math_function.cc index 2e333a8cde..e099a6a439 100644 --- a/paddle/operators/math/math_function.cc +++ b/paddle/operators/math/math_function.cc @@ -132,7 +132,7 @@ void matmul( matrix_b.data(), beta, matrix_out->data()); } -#ifdef PADDLE_USE_MKLML +#ifdef PADDLE_WITH_MKLML // Use cblas_{s,d}gemm_batched if available: Run with 1 group of size batchSize. template <> void batched_gemm( diff --git a/paddle/operators/math/math_function.h b/paddle/operators/math/math_function.h index 5a42854f22..f2b025b78b 100644 --- a/paddle/operators/math/math_function.h +++ b/paddle/operators/math/math_function.h @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ #pragma once -#ifdef PADDLE_USE_MKLML +#ifdef PADDLE_WITH_MKLML #include #include #include diff --git a/paddle/parameter/FirstOrderOptimizer.h b/paddle/parameter/FirstOrderOptimizer.h index f157188a4f..5b0c52a30d 100644 --- a/paddle/parameter/FirstOrderOptimizer.h +++ b/paddle/parameter/FirstOrderOptimizer.h @@ -38,7 +38,7 @@ public: real torch_learningRate = optConfig_.learning_method() == "torch_momentum" ? 1.0 - paraConfig.momentum() : 1.0; -#ifdef PADDLE_USE_MKLDNN +#ifdef PADDLE_WITH_MKLDNN sgdUpdate(learningRate_ * paraConfig.learning_rate() * (firstTime_ ? 1.0 : torch_learningRate), paraConfig.momentum(), diff --git a/paddle/parameter/ParameterUpdateFunctions.cpp b/paddle/parameter/ParameterUpdateFunctions.cpp index 1898598e49..d60cb36383 100644 --- a/paddle/parameter/ParameterUpdateFunctions.cpp +++ b/paddle/parameter/ParameterUpdateFunctions.cpp @@ -30,7 +30,7 @@ void sgdUpdateCpu(real learningRate, const real* grad, real* momentumVec) { decayRate *= learningRate; -#ifdef PADDLE_USE_MKLML +#ifdef PADDLE_WITH_MKLML #pragma omp parallel for #endif for (size_t i = 0; i < size; ++i) { diff --git a/paddle/utils/Flags.cpp b/paddle/utils/Flags.cpp index 8f100f02e9..9a7dc0e356 100644 --- a/paddle/utils/Flags.cpp +++ b/paddle/utils/Flags.cpp @@ -20,7 +20,7 @@ DEFINE_bool(use_gpu, false, "Only support CPU training"); DEFINE_bool(use_gpu, true, "Whether to use GPU for training"); #endif -#ifdef PADDLE_USE_MKLDNN +#ifdef PADDLE_WITH_MKLDNN // TODO(TJ): change to true when MKLDNN layers support multi-inputs DEFINE_bool(use_mkldnn, false, "Default still keep use CPU training"); #else From ebd0cf1408f3408551c342c8eb249f4313981695 Mon Sep 17 00:00:00 2001 From: dzhwinter Date: Mon, 11 Dec 2017 06:55:04 -0800 Subject: [PATCH 052/193] "add manual allreduce" --- doc/design/paddle_nccl.md | 44 +++++++++++++++++++-------------------- 1 file changed, 21 insertions(+), 23 deletions(-) diff --git a/doc/design/paddle_nccl.md b/doc/design/paddle_nccl.md index 7c889fdd7f..dba451b9b3 100644 --- a/doc/design/paddle_nccl.md +++ b/doc/design/paddle_nccl.md @@ -7,36 +7,34 @@ This Design Doc refers to the NCCL feature in paddle. We propose an approach t ## Motivation -NCCL is a Nvidia library support Multi-GPU communicating. [NCCL](https://developer.nvidia.com/nccl). With NCCL library, we can easily accelerate the training in parallel. +NCCL is a NVIDIA library support Multi-GPU communicating and optimized for NVIDIA GPUs, it provides routines such as all-gather, all-reduce, broadcast, reduce, reduce-scatter, that can achieve high bandwidth over PCIe and NVLink high-speed interconnect. [NCCL](https://developer.nvidia.com/nccl). With NCCL library, we can easily accelerate the training in parallel. -- can easily move the optimize sub-graph to parameter server, multi-GPU feature can be compatible with distributed support design. -- easily plug-in with [NCCL2](https://developer.nvidia.com/nccl) library. -- GPU Model parallelism becomes easier to implement. we only need to replace different GPU's sub-graph with different part of the whole graph. -- GPU Data Parallelism +- Pros +1. easily plug-in with [NCCL2](https://developer.nvidia.com/nccl) library. +1. high performance in NVIDIA GPUs. +1. MPI like primitives, which have low learning cost for users. - Suppose to we have `n`GPUs, every GPU has `1/n`part of training data, and store a complete model in GPU memory. +- Cons +1. Only design for NVIDIA GPUs, not a general multi-device solution. +1. Although NCCL1 is opensourced under BSD license, but NCCL2 is not opensourced anymore. -- GPU Model Parallelism +At the beginning of training, the framework needs to distribute the same parameters to every GPU, and merge the gradients at any time user interests. - every GPU have part of a complete model in GPU memory. +As a result, during training, we need the operations of peer to peer copy between different GPUs, aggregating gradients/parameters from GPUs, and broadcasting parameters to GPUs. Every GPU only need to run the operator with correct place information. -At the beginning of training, the framework needs to issue the same sub-graph to every GPU in Data Parallelism, or different sub-graph in Model Parallelism. - -During training, we need the operations of peer to peer copy between different GPUs, aggregating gradients/parameters from GPUs, and broadcasting parameters to GPUs. Every GPU only need to run the sub-graph with correct place information. - -Besides, it needs interfaces to synchronize model update with each other, and issue/merge model from different GPU Cards. +Besides, it needs interfaces to synchronize model update with each different GPU Cards. ## Implementation -As mentioned above, we summarise that several kinds of operators are needed. Currently, we need to issue parameters to different GPUs, named it with Broadcast operator. And also synchronize parameters between GPUs, called it with AllReduce. +As mentioned above, we wrap the NCCL routines as several kinds of operators. Need to note that NCCL need to create Communicator between gpu at the beginning, so there is a NCCLInit operator created. ### Graph Converter To be compatible with [parameter server design doc](https://github.com/PaddlePaddle/Paddle/blob/develop/doc/design/ops/dist_train.md), the graph converter converts the user defined operation graph into sub-graphs to be executed on different devices. -1. The user-defined operator graph will be partitioned into sub-graph. +1. The user-defined model will be a single device program -2. Control operators between GPUs will be inserted into the graph. +2. Broadcast/Reduce operators between GPUs will be inserted into the program, even for the multi-node, may insert the `Send`, `Recv` operator. *Broadcast, AllReduce in a single machine. And Broadcast, AllReduce, [Send, Recv](https://github.com/PaddlePaddle/Paddle/blob/develop/doc/design/ops/dist_train.md#graph-converter) in multiple machines* @@ -49,14 +47,14 @@ After convert, the graph as shows Operators are added to the sub-graphs. Every GPU assigned a role of `rank0`, `rank1` etc. - **Broadcast**. Broadcast operator distribute initialized parameter to all the GPUs from the GPU who owns it. e.g. from`rank0` GPU. -- **Allreduce**. Allreduce operator synchronizes parameters/gradients between GPUs. AllReduce implemented in the Ring-Based communicating method, avoid of the bottle neck in a single GPU. +- **AllReduce**. AllReduce operator synchronizes parameters/gradients between GPUs. AllReduce implemented in the Ring-Based communicating method, avoid of the bottle neck in a single GPU. -These two operators need the Multi-GPU context support. - -Need to notice that Allreduce operator force GPUs synchronized at that point. Every device only need runs sub-graph in a loop style forever, the whole training process in asynchronous or synchronous mode depends on the Allreduce point in the graph. +Need to notice that AllReduce operator force GPUs synchronized at that point. The whole training process in asynchronous or synchronous mode depends on the AllReduce point in the graph. As it shown in the picture, when each GPU compute the gradient of `W`, followed with a `AllReduce` operator, accumulate the `dW` to full batch of data, then run the optimize process individually and apply the gradient to its `W`. -In fact, in the way of every GPU optimized full batch of data, wasted (n-1) GPU compute resources. We will enhance it in the next stage. - -### Benefits +- **AllReduce2** +If we use the NCCL2 AllReduce primitive, every GPU optimized full batch of data, wasted (n-1) GPU compute resources. In addition, AllReduce will only utilize the communicate resource during synchronization, then update the gradient will be a seperated phase. In fact, we can amortize the update gradient time cost into the communicating phase. +- Every parameter has its root card. That card will call **Reduce** operator and collect the gradients from GPUs. +- The whole model's parameter will be hashed to different root card, ensure the load balance between GPUs. +Then we have another version AllReduce operator. Other part keep the same with before. From 0ca6274451d3693f363f2b8b5d6b29ce722febaf Mon Sep 17 00:00:00 2001 From: dzhwinter Date: Mon, 11 Dec 2017 23:15:35 +0800 Subject: [PATCH 053/193] "add global regularization" (#6443) * "add global regularization" * Polish `append_regularization_ops` --- python/paddle/v2/fluid/optimizer.py | 38 +++++++++++---------------- python/paddle/v2/fluid/regularizer.py | 15 ++++++++--- 2 files changed, 27 insertions(+), 26 deletions(-) diff --git a/python/paddle/v2/fluid/optimizer.py b/python/paddle/v2/fluid/optimizer.py index 719e3b2563..bbdfab2df9 100644 --- a/python/paddle/v2/fluid/optimizer.py +++ b/python/paddle/v2/fluid/optimizer.py @@ -18,8 +18,9 @@ class Optimizer(object): but need to use one of it's implementation. """ - def __init__(self, global_step=None): + def __init__(self, global_step=None, regularization=None): self._global_step = global_step + self.regularization = regularization # Dictionary of accumulators. Some optimizer subclasses need to # allocate and manage extra variables associated with the parameters # to train. These variables are called accumulators. @@ -199,7 +200,8 @@ class Optimizer(object): """ params_grads = append_backward_ops(loss, parameter_list, no_grad_set) # Add regularization if any - params_grads = append_regularization_ops(params_grads) + params_grads = append_regularization_ops(params_grads, + self.regularization) optimize_ops = self.create_optimization_pass(params_grads, loss, startup_program) return optimize_ops @@ -209,9 +211,9 @@ class SGDOptimizer(Optimizer): """ Simple SGD optimizer without any state. """ - def __init__(self, learning_rate, global_step=None): + def __init__(self, learning_rate, **kwargs): assert learning_rate is not None - super(SGDOptimizer, self).__init__(global_step) + super(SGDOptimizer, self).__init__(**kwargs) self.type = "sgd" self._learning_rate = learning_rate @@ -236,14 +238,10 @@ class MomentumOptimizer(Optimizer): """ _velocity_acc_str = "velocity" - def __init__(self, - learning_rate, - momentum, - use_nesterov=False, - global_step=None): + def __init__(self, learning_rate, momentum, use_nesterov=False, **kwargs): assert learning_rate is not None assert momentum is not None - super(MomentumOptimizer, self).__init__(global_step) + super(MomentumOptimizer, self).__init__(**kwargs) self.type = "momentum" self._learning_rate = learning_rate self._momentum = momentum @@ -284,10 +282,10 @@ class AdagradOptimizer(Optimizer): """ _moment_acc_str = "moment" - def __init__(self, learning_rate, epsilon=1.0e-6, global_step=None): + def __init__(self, learning_rate, epsilon=1.0e-6, **kwargs): assert learning_rate is not None assert epsilon is not None - super(AdagradOptimizer, self).__init__(global_step) + super(AdagradOptimizer, self).__init__(**kwargs) self.type = "adagrad" self._learning_rate = learning_rate self._epsilon = epsilon @@ -331,12 +329,12 @@ class AdamOptimizer(Optimizer): beta1=0.9, beta2=0.999, epsilon=1e-8, - global_step=None): + **kwargs): assert learning_rate is not None assert beta1 is not None assert beta2 is not None assert epsilon is not None - super(AdamOptimizer, self).__init__(global_step) + super(AdamOptimizer, self).__init__(**kwargs) self.type = "adam" self._learning_rate = learning_rate self._beta1 = beta1 @@ -436,12 +434,12 @@ class AdamaxOptimizer(Optimizer): beta1=0.9, beta2=0.999, epsilon=1e-8, - global_step=None): + **kwargs): assert learning_rate is not None assert beta1 is not None assert beta2 is not None assert epsilon is not None - super(AdamaxOptimizer, self).__init__() + super(AdamaxOptimizer, self).__init__(**kwargs) self.type = "adamax" self._learning_rate = learning_rate self._beta1 = beta1 @@ -514,16 +512,12 @@ class DecayedAdagradOptimizer(Optimizer): """ _moment_acc_str = "moment" - def __init__(self, - learning_rate, - decay=0.95, - epsilon=1.0e-6, - global_step=None): + def __init__(self, learning_rate, decay=0.95, epsilon=1.0e-6, **kwargs): assert learning_rate is not None assert decay is not None assert epsilon is not None - super(DecayedAdagradOptimizer, self).__init__(global_step) + super(DecayedAdagradOptimizer, self).__init__(**kwargs) self.type = "decayed_adagrad" self._learning_rate = learning_rate self._decay = decay diff --git a/python/paddle/v2/fluid/regularizer.py b/python/paddle/v2/fluid/regularizer.py index bb1ac8911e..d1955b0047 100644 --- a/python/paddle/v2/fluid/regularizer.py +++ b/python/paddle/v2/fluid/regularizer.py @@ -3,7 +3,7 @@ import framework __all__ = ['append_regularization_ops', 'L1Decay', 'L2Decay'] -def append_regularization_ops(parameters_and_grads): +def append_regularization_ops(parameters_and_grads, regularization=None): """Create and add backward regularization Operators Creates and adds backward regularization operators in the BlockDesc. @@ -14,6 +14,8 @@ def append_regularization_ops(parameters_and_grads): Args: parameters_and_grads: A list of (parameters, gradients) pairs that need to be regularized. + regularization: A global regularizer. If the parameter is not + set. It will be applied with regularizer. Returns: list of (parameters, gradients) pair with the regularized gradient @@ -23,14 +25,19 @@ def append_regularization_ops(parameters_and_grads): """ params_and_grads = [] for param, grad in parameters_and_grads: + regularization_term = None + if param.regularizer is not None: + # Add variable for regularization term in grad block + regularization_term = param.regularizer(param, grad.block) + elif regularization is not None: + regularization_term = regularization(param, grad.block) + # If no gradient or no regularization specified, # then we don't need to do anything - if grad is None or param.regularizer is None: + if grad is None or regularization_term is None: params_and_grads.append((param, grad)) continue - # Add variable for regularization term in grad block - regularization_term = param.regularizer(param, grad.block) assert grad.shape == regularization_term.shape grad.block.append_op( From 4ff6bc175a18d03f1159e78aef0c305703adbe37 Mon Sep 17 00:00:00 2001 From: Siddharth Goyal Date: Mon, 11 Dec 2017 11:33:54 -0800 Subject: [PATCH 054/193] Add row conv operator (#6013) * Fix documentation * Address review comments --- paddle/operators/row_conv_op.cc | 257 +++++++++++ paddle/operators/row_conv_op.cu | 408 ++++++++++++++++++ paddle/operators/row_conv_op.h | 33 ++ .../paddle/v2/fluid/tests/test_row_conv_op.py | 95 ++++ 4 files changed, 793 insertions(+) create mode 100644 paddle/operators/row_conv_op.cc create mode 100644 paddle/operators/row_conv_op.cu create mode 100644 paddle/operators/row_conv_op.h create mode 100644 python/paddle/v2/fluid/tests/test_row_conv_op.py diff --git a/paddle/operators/row_conv_op.cc b/paddle/operators/row_conv_op.cc new file mode 100644 index 0000000000..ea0bb99f8d --- /dev/null +++ b/paddle/operators/row_conv_op.cc @@ -0,0 +1,257 @@ +/* Copyright (c) 2017 PaddlePaddle Authors. All Rights Reserve. + + 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/operators/row_conv_op.h" +#include "paddle/framework/eigen.h" + +namespace paddle { +namespace operators { + +using LoDTensor = framework::LoDTensor; +using framework::Tensor; + +template +using EigenMatrix = framework::EigenMatrix; + +class RowConvOp : public framework::OperatorWithKernel { + public: + using framework::OperatorWithKernel::OperatorWithKernel; + + void InferShape(framework::InferShapeContext *ctx) const override { + PADDLE_ENFORCE(ctx->HasInput("X"), + "Input(X) of RowConvOp should not be null."); + PADDLE_ENFORCE(ctx->HasInput("Filter"), + "Input(Filter) of RowConvOp should not be null."); + PADDLE_ENFORCE(ctx->HasOutput("Out"), + "Output(Out) of RowConvOp should not be null."); + + auto x_dims = ctx->GetInputDim("X"); + auto filter_dims = ctx->GetInputDim("Filter"); + PADDLE_ENFORCE_EQ(x_dims.size(), 2, "Input(X)'s rank should be 2."); + PADDLE_ENFORCE_EQ(filter_dims.size(), 2, "Input(Y)'s rank should be 2."); + PADDLE_ENFORCE_EQ( + x_dims[1], filter_dims[1], + "The 2nd dimension of Input(X) and Input(Filter) should be same."); + ctx->SetOutputDim("Out", x_dims); + ctx->ShareLoD("X", "Out"); + } +}; + +class RowConvGradOp : public framework::OperatorWithKernel { + public: + using framework::OperatorWithKernel::OperatorWithKernel; + + void InferShape(framework::InferShapeContext *ctx) const override { + PADDLE_ENFORCE(ctx->HasInput("X"), "Input(X) should not be null."); + PADDLE_ENFORCE(ctx->HasInput("Filter"), + "Input(Filter) should not be null."); + PADDLE_ENFORCE(ctx->HasInput(framework::GradVarName("Out")), + "Gradient of output(Out) should not be null."); + + auto x_grad_name = framework::GradVarName("X"); + if (ctx->HasOutput(x_grad_name)) { + auto x_dims = ctx->GetInputDim("X"); + ctx->SetOutputDim(x_grad_name, x_dims); + } + + auto filter_grad_name = framework::GradVarName("Filter"); + if (ctx->HasOutput(filter_grad_name)) { + auto filter_dims = ctx->GetInputDim("Filter"); + ctx->SetOutputDim(filter_grad_name, filter_dims); + } + } +}; + +class RowConvOpMaker : public framework::OpProtoAndCheckerMaker { + public: + RowConvOpMaker(framework::OpProto *proto, + framework::OpAttrChecker *op_checker) + : framework::OpProtoAndCheckerMaker(proto, op_checker) { + AddInput("X", + "(LoDTensor), the input(X) is a LodTensor, which supports " + "variable time-length input sequences. The underlying tensor " + "in this LoDTensor is a matrix with shape (T x N), where T " + "is the total time steps in this mini-batch and N is the input " + "data dimension."); + AddInput("Filter", + "(Tensor), the input(Filter) is a learnable parameter. It " + "is a 2-D tensor with shape (future_context x N), where, " + "future_context is the future context length and N is the data " + "dimension."); + AddOutput("Out", + "(LoDTensor), the output(Out) is a LodTensor, which supports " + "variable time-length input sequences. The underlying tensor " + "in this LodTensor is a matrix with shape T x N, i.e., the " + "same shape as X."); + AddComment(R"DOC( +Row-convolution Operator. + +The row convolution is called lookahead convolution. This operator was +introduced in the following paper for DeepSpeech2: +http://www.cs.cmu.edu/~dyogatam/papers/wang+etal.iclrworkshop2016.pdf + +The main motivation is that a bidirectional RNN, useful in DeepSpeech +like speech models, learns representation for a sequence by performing a +forward and a backward pass through the entire sequence. However, unlike +unidirectional RNNs, bidirectional RNNs are challenging to deploy in an online +and low-latency setting. The lookahead convolution incorporates information +from future subsequences in a computationally efficient manner to improve +unidirectional recurrent neural networks. The row convolution operator is +different from the 1D sequence convolution, and is computed as follows: + +Given an input sequence $in$ of length $t$ and input dimension $d$, +and a filter ($W$) of size $context \times d$, +the output sequence is convolved as: + +$$ +out_{i, :} = \sum_{j=i}^{i + context} in_{j,:} \dot W_{i-j, :} +$$ + +)DOC"); + } +}; + +template +class RowConvKernel : public framework::OpKernel { + public: + void Compute(const framework::ExecutionContext &context) const override { + auto *x = context.Input("X"); + auto *filter = context.Input("Filter"); + auto *out = context.Output("Out"); + + out->mutable_data(context.GetPlace()); + + auto batch_indices = x->lod()[0]; + auto input_dim = x->dims()[1]; // 'in' is of size T x N + size_t num_sequence = batch_indices.size() - 1; + + auto future_context = filter->dims()[0]; + auto weights = EigenMatrix::From(*filter); + + for (size_t i = 0; i < num_sequence; i++) { + int start = static_cast(batch_indices[i]); + int end = static_cast(batch_indices[i + 1]); + int current_timesteps = end - start; + Tensor cur_input_sequence = + x->Slice(start, end); // Current input sequence + Tensor cur_output_sequence = + out->Slice(start, end); // Current output sequence + auto cip_seq = EigenMatrix::From(cur_input_sequence); + auto cot_seq = EigenMatrix::From(cur_output_sequence); + + for (int k = 0; k < current_timesteps; + k++) { // For different time steps in the same sequence + for (int w = 0; (w < future_context) && ((k + w) < current_timesteps); + w++) { + for (int d = 0; d < input_dim; d++) { + if (w == 0) { + cot_seq(k, d) = weights(w, d) * cip_seq(k + w, d); + } else { + cot_seq(k, d) += weights(w, d) * cip_seq(k + w, d); + } + } + } + } + } + } +}; + +template +class RowConvGradKernel : public framework::OpKernel { + public: + void Compute(const framework::ExecutionContext &context) const override { + auto *x = context.Input("X"); + auto *filter = context.Input("Filter"); + auto *d_out = context.Input(framework::GradVarName("Out")); + auto *dx = context.Output(framework::GradVarName("X")); + auto *d_filter = context.Output(framework::GradVarName("Filter")); + + auto input_dim = x->dims()[1]; // 'x' is of size T x N + auto batch_indices = x->lod()[0]; + size_t num_sequence = batch_indices.size() - 1; + auto future_context = filter->dims()[0]; + + if (d_filter) { + d_filter->mutable_data(context.GetPlace()); + auto dweights = + EigenMatrix::From(*d_filter); // Gradient of weight matrix + dweights.setZero(); + + for (size_t i = 0; i < num_sequence; i++) { // For different sequences + int start = static_cast(batch_indices[i]); + int end = static_cast(batch_indices[i + 1]); + + Tensor cur_input = x->Slice(start, end); // Current input sequence + Tensor cur_doutput = + d_out->Slice(start, end); // Current output grad sequence + + auto cur_ip = EigenMatrix::From(cur_input); + auto cur_dout = EigenMatrix::From(cur_doutput); + int current_timesteps = end - start; + + for (int k = 0; k < current_timesteps; + k++) { // For different time steps in the same sequence + for (int w = 0; (w < future_context) && ((k + w) < current_timesteps); + w++) { + // For dweights (Updating the gradient of weight matrix) + for (int d = 0; d < input_dim; d++) { + dweights(w, d) += cur_ip(k + w, d) * cur_dout(k, d); + } + } + } + } + } + + if (dx) { + dx->mutable_data(context.GetPlace()); + auto weights = EigenMatrix::From(*filter); + for (size_t i = 0; i < num_sequence; i++) { // For different sequences + int start = static_cast(batch_indices[i]); + int end = static_cast(batch_indices[i + 1]); + + Tensor cur_doutput = + d_out->Slice(start, end); // Current output grad sequence + Tensor cur_dinput = + dx->Slice(start, end); // Current input grad sequence + + auto cur_dout = EigenMatrix::From(cur_doutput); + auto cur_dip = EigenMatrix::From(cur_dinput); + cur_dip.setZero(); + int current_timesteps = end - start; + + for (int k = 0; k < current_timesteps; + k++) { // For different time steps in the same sequence + for (int w = 0; (w < future_context) && ((k + w) < current_timesteps); + w++) { + // For dinput (Updating the gradient wrt input) + for (int d = 0; d < input_dim; d++) { + cur_dip(k + w, d) += weights(w, d) * cur_dout(k, d); + } + } + } + } + } + } +}; +} // namespace operators +} // namespace paddle + +namespace ops = paddle::operators; +REGISTER_OP(row_conv, ops::RowConvOp, ops::RowConvOpMaker, row_conv_grad, + ops::RowConvGradOp); +REGISTER_OP_CPU_KERNEL(row_conv, + ops::RowConvKernel); +REGISTER_OP_CPU_KERNEL( + row_conv_grad, ops::RowConvGradKernel); diff --git a/paddle/operators/row_conv_op.cu b/paddle/operators/row_conv_op.cu new file mode 100644 index 0000000000..e0d7ebda7e --- /dev/null +++ b/paddle/operators/row_conv_op.cu @@ -0,0 +1,408 @@ +/* Copyright (c) 2017 PaddlePaddle Authors. All Rights Reserve. + + 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/operators/math/math_function.h" +#include "paddle/operators/row_conv_op.h" +#include "paddle/platform/cuda_helper.h" + +namespace paddle { +namespace operators { + +using LoDTensor = framework::LoDTensor; +using framework::Tensor; + +namespace { + +inline int DivUp(int x, int y) { return (x + y - 1) / y; } + +// Forward prop (shared memory version, for small future_context) +template +__global__ void RowConvForwardSharedMemory(const T *in, const T *wt, + int num_sequence, int input_dim, + int future_context, + const size_t *batch_indices, + T *out) { + int blx = blockDim.x; + int bly = blockDim.y; + int thx = threadIdx.x; + int thy = threadIdx.y; + int d = blockIdx.x * blx + thx; // index along input dim + + extern __shared__ T mem[]; + T *sw = mem; + + if (thy < future_context) { + sw[thy * blx + thx] = + (d < input_dim) ? wt[thy * input_dim + d] : static_cast(0); + } + __syncthreads(); + + for (size_t i = 0; i < num_sequence; i++) { + int start = static_cast(batch_indices[i]); + int end = static_cast(batch_indices[i + 1]); + int current_timesteps = end - start; + for (int k = thy; k < current_timesteps; k += bly) { + T sum = 0; + for (int w = 0; (w < future_context) && ((k + w) < current_timesteps); + w++) { + sum += (d < input_dim) + ? sw[w * blx + thx] * in[(start + k + w) * input_dim + d] + : static_cast(0); + } + if (d < input_dim) { + out[(start + k) * input_dim + d] = sum; + } + } + } +} + +// Forward prop (naive version) +template +__global__ void RowConvForward(const T *in, const T *wt, int num_sequence, + int input_dim, int future_context, + const size_t *batch_indices, T *out) { + int d = blockIdx.x * blockDim.x + threadIdx.x; // index along input_dim + int bly = blockDim.y; + int thy = threadIdx.y; + + if (d >= input_dim) return; + + for (size_t i = 0; i < num_sequence; i++) { + int start = static_cast(batch_indices[i]); + int end = static_cast(batch_indices[i + 1]); + int current_timesteps = end - start; + for (int k = thy; k < current_timesteps; k += bly) { + T sum = 0; + for (int w = 0; (w < future_context) && ((k + w) < current_timesteps); + w++) { + sum += (wt[w * input_dim + d] * in[(start + k + w) * input_dim + d]); + } + out[(start + k) * input_dim + d] = sum; + } + } +} + +// Compute input gradient (shared memory version, for small future_context) +template +__global__ void RowConvGradInputSharedMemory(const T *dout, const T *wt, + int num_sequence, int input_dim, + int future_context, + const size_t *batch_indices, + T *din) { + int blx = blockDim.x; + int bly = blockDim.y; + int thx = threadIdx.x; + int thy = threadIdx.y; + int d = blockIdx.x * blx + thx; // index along input dim + + extern __shared__ T mem[]; + T *sw = mem; + if (thy < future_context) { + sw[thy * blx + thx] = + (d < input_dim) ? wt[thy * input_dim + d] : static_cast(0); + } + __syncthreads(); + + for (int i = 0; i < num_sequence; i++) { + int start = static_cast(batch_indices[i]); + int end = static_cast(batch_indices[i + 1]); + int current_timesteps = end - start; + for (int k = thy; k < current_timesteps; k += bly) { + T sum = 0; + for (int w = 0; (w < future_context) && ((k - w) >= 0); w++) { + sum += (d < input_dim) + ? (sw[w * blx + thx] * dout[(k + start - w) * input_dim + d]) + : static_cast(0); + } + if (d < input_dim) { + din[(k + start) * input_dim + d] = sum; + } + } + } +} + +// Compute input gradient (Naive version) +template +__global__ void RowConvGradInput(const T *dout, const T *wt, int num_sequence, + int input_dim, int future_context, + const size_t *batch_indices, T *din) { + int d = blockIdx.x * blockDim.x + threadIdx.x; // index along input_dim + int bly = blockDim.y; + int thy = threadIdx.y; + + if (d >= input_dim) return; + for (int i = 0; i < num_sequence; i++) { + int start = static_cast(batch_indices[i]); + int end = static_cast(batch_indices[i + 1]); + int current_timesteps = end - start; + for (int k = thy; k < current_timesteps; k += bly) { + T sum = 0; + for (int w = 0; (w < future_context) && ((k - w) >= 0); w++) { + sum += (wt[w * input_dim + d] * dout[(k + start - w) * input_dim + d]); + } + din[(k + start) * input_dim + d] = sum; + } + } +} + +// Compute W gradient (small future_context version) +template +__global__ void RowConvGradFilterImproved(const T *in, const T *dout, + int num_sequence, int input_dim, + int future_context, int block_x, + int block_y, + const size_t *batch_indices, + T *dfilter) { + int blx = blockDim.x; + int bly = blockDim.y; + int thx = threadIdx.x; + int thy = threadIdx.y; + int gx = blockIdx.x * blx; + int d = gx + thx; // index along input dim + + extern __shared__ T mem[]; + + int xdim_sh_in = block_y; + int xdim_sh_dout = block_y; + // int xdim_sh_dfilter = future_context; + int ydim_sh_in = block_x; + int ydim_sh_dout = block_x + future_context - 1; + int ydim_sh_dfilter = block_y; + + T *sh_in = mem; + T *sh_dout = &mem[xdim_sh_in * ydim_sh_in]; + T *sh_dfilter = &mem[xdim_sh_in * ydim_sh_in + xdim_sh_dout * ydim_sh_dout]; + + if (thy < future_context) { + sh_dfilter[thy * ydim_sh_dfilter + thx] = static_cast(0); + } + __syncthreads(); + + for (int i = 0; i < num_sequence; i++) { + int start = static_cast(batch_indices[i]); + int end = static_cast(batch_indices[i + 1]); + int current_timesteps = end - start; + int scaled_cur_steps = + ((current_timesteps + block_x - 1) / block_x) * block_x; + + for (int k = thy; k < scaled_cur_steps; k += block_x) { + int pos = start + k; + sh_in[thx * ydim_sh_in + thy] = + (d < input_dim && pos < end) ? in[pos * input_dim + d] : T(0); + sh_dout[thx * ydim_sh_dout + thy + future_context - 1] = + (d < input_dim && pos < end) ? dout[pos * input_dim + d] : T(0); + __syncthreads(); + + if (thy < future_context - 1) { + int pos_offset = pos - future_context + 1; + sh_dout[thx * ydim_sh_dout + thy] = + (d < input_dim && pos_offset >= start) + ? dout[pos_offset * input_dim + d] + : T(0); + } + __syncthreads(); + + for (int w = 0; w < future_context; w++) { + T val = sh_in[thy * ydim_sh_in + thx] * + sh_dout[thy * ydim_sh_dout + thx + future_context - 1 - w]; + __syncthreads(); + + for (int offset = 16; offset > 0; + offset = offset / 2) { // blockDim.x is 32. + val += __shfl_down(val, offset); + } + __syncthreads(); + + if (thx == 0) { + sh_dfilter[w * ydim_sh_dfilter + thy] += val; + } + __syncthreads(); + } + } + } + for (int w = thy; (w < future_context) && (d < input_dim); w += bly) { + dfilter[w * input_dim + d] += sh_dfilter[w * ydim_sh_dfilter + thx]; + } +} + +// Compute weight(filter) gradient +template +__global__ void RowConvGradFilter(const T *in, const T *dout, int num_sequence, + int input_dim, int future_context, + int block_x, int block_y, + const size_t *batch_indices, T *dfilter) { + int blx = blockDim.x; + int bly = blockDim.y; + int thx = threadIdx.x; + int thy = threadIdx.y; + int gx = blockIdx.x * blx; + int d = gx + thx; // index along input dim + extern __shared__ T mem[]; + T *sh_in = mem; + T *sh_dout = &mem[block_x * block_y]; + + for (int i = 0; i < num_sequence; i++) { + int start = static_cast(batch_indices[i]); + int end = static_cast(batch_indices[i + 1]); + int current_timesteps = end - start; + int scaled_cur_steps = + ((current_timesteps + block_x - 1) / block_x) * block_x; + + for (int k = thy; k < scaled_cur_steps; k += block_x) { + int pos = start + k; + sh_in[thx * block_y + thy] = + (d < input_dim && pos < end) ? in[pos * input_dim + d] : 0.0; + __syncthreads(); + + for (int w = 0; w < future_context; w++) { + sh_dout[thx * block_y + thy] = + (d < input_dim && (k - w) >= 0 && (k - w) < current_timesteps) + ? dout[(pos - w) * input_dim + d] + : 0.0; + __syncthreads(); + + T val = sh_in[thy * block_y + thx] * sh_dout[thy * block_y + thx]; + __syncthreads(); + + for (int offset = 16; offset > 0; + offset = offset / 2) { // blockDim.x is 32. + val += __shfl_down(val, offset); + } + __syncthreads(); + + if (thx == 0 && (gx + thy) < input_dim) { + dfilter[w * input_dim + gx + thy] += val; + } + } + } + } +} + +} // namespace + +template +class RowConvKernel : public framework::OpKernel { + public: + void Compute(const framework::ExecutionContext &context) const override { + auto *X = context.Input("X"); + auto *Filter = context.Input("Filter"); + auto *Out = context.Output("Out"); + + const T *in = X->data(); + const T *weight = Filter->data(); + T *out = Out->mutable_data(context.GetPlace()); + + auto batch_indices = X->lod()[0]; + int input_dim = X->dims()[1]; + int num_sequence = batch_indices.size() - 1; + int future_context = Filter->dims()[0]; + size_t *idx = batch_indices.data(); + auto stream = context.cuda_device_context().stream(); + + if (future_context <= 32) { + dim3 block_dim = dim3(32, 32); + dim3 grid_dim = dim3(DivUp(input_dim, block_dim.x), 1); + int mem_per_block = (future_context * block_dim.x) * sizeof(T); + RowConvForwardSharedMemory< + T><<>>( + in, weight, num_sequence, input_dim, future_context, idx, out); + } else { + dim3 block_dim = dim3(32, 32); + dim3 grid_dim = dim3(DivUp(input_dim, block_dim.x), 1); + RowConvForward<<>>( + in, weight, num_sequence, input_dim, future_context, idx, out); + } + } +}; + +template +class RowConvGradKernel : public framework::OpKernel { + public: + void Compute(const framework::ExecutionContext &context) const override { + auto *X = context.Input("X"); + auto *Filter = context.Input("Filter"); + auto *dOut = context.Input(framework::GradVarName("Out")); + const T *in = X->data(); + const T *weights = Filter->data(); + const T *dout = dOut->data(); + + Tensor *dX = context.Output(framework::GradVarName("X")); + Tensor *dFilter = context.Output(framework::GradVarName("Filter")); + + auto batch_indices = X->lod()[0]; + int input_dim = X->dims()[1]; + int num_sequence = batch_indices.size() - 1; + int future_context = Filter->dims()[0]; + size_t *idx = batch_indices.data(); + + auto &device_ctx = context.cuda_device_context(); + math::SetConstant zero; + + if (dFilter) { + T *dfilter = dFilter->mutable_data(context.GetPlace()); + zero(device_ctx, dFilter, static_cast(0.0)); + + if (future_context <= 32) { + dim3 block_dim = dim3(32, 32); + dim3 grid_dim = dim3(DivUp(input_dim, block_dim.x), 1); + int block_x = block_dim.x; + int block_y = block_dim.y; + int mem_per_block = + (block_y * block_x + block_y * (block_x + future_context - 1) + + future_context * block_y) * + sizeof(T); + RowConvGradFilterImproved< + T><<>>( + in, dout, num_sequence, input_dim, future_context, block_x, block_y, + idx, dfilter); + } else { + dim3 block_dim = dim3(32, 32); + dim3 grid_dim = dim3(DivUp(input_dim, block_dim.x), 1); + int block_x = block_dim.x; + int block_y = block_dim.y; + int mem_per_block = + (block_x * block_y * 2) * sizeof(T); // For 2 arrays of size 32x32 + RowConvGradFilter< + T><<>>( + in, dout, num_sequence, input_dim, future_context, block_x, block_y, + idx, dfilter); + } + } + + if (dX) { + T *din = dX->mutable_data(context.GetPlace()); + if (future_context <= 32) { + dim3 block_dim = dim3(32, 32); + dim3 grid_dim = dim3(DivUp(input_dim, block_dim.x), 1); + int mem_per_block = (future_context * block_dim.x) * sizeof(T); + RowConvGradInputSharedMemory< + T><<>>( + dout, weights, num_sequence, input_dim, future_context, idx, din); + } else { + dim3 block_dim = dim3(32, 32); + dim3 grid_dim = dim3(DivUp(input_dim, block_dim.x), 1); + RowConvGradInput<<>>( + dout, weights, num_sequence, input_dim, future_context, idx, din); + } + } + } +}; +} // namespace operators +} // namespace paddle + +namespace ops = paddle::operators; +REGISTER_OP_GPU_KERNEL(row_conv, + ops::RowConvKernel); +REGISTER_OP_GPU_KERNEL( + row_conv_grad, ops::RowConvGradKernel); diff --git a/paddle/operators/row_conv_op.h b/paddle/operators/row_conv_op.h new file mode 100644 index 0000000000..525e83908d --- /dev/null +++ b/paddle/operators/row_conv_op.h @@ -0,0 +1,33 @@ +/* Copyright (c) 2017 PaddlePaddle Authors. All Rights Reserve. + + 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 "paddle/framework/op_registry.h" + +namespace paddle { +namespace operators { + +template +class RowConvKernel : public framework::OpKernel { + public: + void Compute(const framework::ExecutionContext &context) const override; +}; + +template +class RowConvGradKernel : public framework::OpKernel { + public: + void Compute(const framework::ExecutionContext &context) const override; +}; +} // namespace operators +} // namespace paddle diff --git a/python/paddle/v2/fluid/tests/test_row_conv_op.py b/python/paddle/v2/fluid/tests/test_row_conv_op.py new file mode 100644 index 0000000000..1ed86e23ac --- /dev/null +++ b/python/paddle/v2/fluid/tests/test_row_conv_op.py @@ -0,0 +1,95 @@ +import unittest +import numpy as np +from op_test import OpTest + + +def row_conv_forward(x, lod, wt): + out = np.zeros_like(x) + seq_info = lod[0] + num_sequences = len(seq_info) - 1 + context_length = wt.shape[0] + + for i in range(num_sequences): # loop over number of sequences + start = seq_info[i] + end = seq_info[i + 1] + curinput = x[start:end, :] + curoutput = out[start:end, :] + + cur_timesteps = end - start + for j in range(cur_timesteps): # loop over different timesteps + for k in range(context_length): + + if j + k >= cur_timesteps: + continue + curoutput[j, :] += curinput[j + k, :] * wt[k, :] + + return out + + +class TestRowConvOp1(OpTest): + def setUp(self): + + self.op_type = "row_conv" + lod = [[0, 2, 5, 7]] + T = lod[0][-1] + D = 16 + context_length = 2 + + x = np.random.random((T, D)).astype("float32") + wt = np.random.random((context_length, D)).astype("float32") + self.inputs = {'X': (x, lod), 'Filter': wt} + + out = row_conv_forward(x, lod, wt) + self.outputs = {'Out': (out, lod)} + + def test_check_output(self): + self.check_output() + + def test_check_grad_normal(self): + self.check_grad(['X', 'Filter'], 'Out', max_relative_error=0.05) + + def test_check_grad_ignore_x(self): + self.check_grad( + ['Filter'], 'Out', max_relative_error=0.05, no_grad_set=set('X')) + + def test_check_grad_ignore_wt(self): + self.check_grad( + ['X'], 'Out', max_relative_error=0.05, no_grad_set=set('Filter')) + + +class TestRowConvOp2(OpTest): + def setUp(self): + + self.op_type = "row_conv" + lod = [[0, 20, 50, 100]] + T = lod[0][-1] + D = 35 + context_length = 35 + + x = np.random.random((T, D)).astype("float32") + wt = np.random.random((context_length, D)).astype("float32") + self.inputs = {'X': (x, lod), 'Filter': wt} + + out = row_conv_forward(x, lod, wt) + self.outputs = {'Out': (out, lod)} + + def test_check_output(self): + self.check_output() + + #max_relative_error is increased from 0.05 to 0.06 as for higher + #dimensional input, the dX on CPU for some values has max_rel_error + #slightly more than 0.05 + def test_check_grad_normal(self): + self.check_grad(['X', 'Filter'], 'Out', max_relative_error=0.06) + + def test_check_grad_ignore_x(self): + self.check_grad( + ['Filter'], 'Out', max_relative_error=0.06, no_grad_set=set('X')) + + def test_check_grad_ignore_wt(self): + self.check_grad( + ['X'], 'Out', max_relative_error=0.06, no_grad_set=set('Filter')) + + +if __name__ == '__main__': + unittest.main() From 35420cdf63dd1369972c26f70cac2d4d75b1492a Mon Sep 17 00:00:00 2001 From: kavyasrinet Date: Mon, 11 Dec 2017 15:33:28 -0800 Subject: [PATCH 055/193] Updating the Latex equation for Adagrad (#6009) * Updating the Latex equation for Adagrad * Fixing Latex euqations for adadelta, adam and adamax --- paddle/operators/adadelta_op.cc | 12 ++++++------ paddle/operators/adagrad_op.cc | 4 ++-- paddle/operators/adam_op.cc | 12 +++++++----- paddle/operators/adamax_op.cc | 8 ++++---- 4 files changed, 19 insertions(+), 17 deletions(-) diff --git a/paddle/operators/adadelta_op.cc b/paddle/operators/adadelta_op.cc index 16a7794d5b..29434a0ee2 100644 --- a/paddle/operators/adadelta_op.cc +++ b/paddle/operators/adadelta_op.cc @@ -92,12 +92,12 @@ for gradient descent. Adadelta updates are as follows: -$$avgSquaredGradOut = \rho * avgSquaredGrad + (1 - \rho) * grad * grad \break -paramUpdate = - $\sqrt{((avgSquaredUpdate + \epsilon) / - (avgSquaredGrad_out + \epsilon))}$ * grad \break -avgSquaredUpdateOut = \rho * avgSquaredUpdate + (1 - \rho) * - {(paramUpdate)}^2 \break -paramOut = param + paramUpdate$$ +$$ +avg\_squared\_grad\_out = \rho * avg\_squared\_grad + (1 - \rho) * grad * grad \\ +param\_update = - \sqrt{\frac{avg\_squared\_update + \epsilon}{avg\_squared\_grad\_out + \epsilon}} * grad \\ +avg\_squared\_update\_out = \rho * avg\_squared\_update + (1 - \rho) * {param\_update}^2 \\ +param\_out = param + param\_update +$$ )DOC"); } diff --git a/paddle/operators/adagrad_op.cc b/paddle/operators/adagrad_op.cc index d6686e3ef3..d19602244b 100644 --- a/paddle/operators/adagrad_op.cc +++ b/paddle/operators/adagrad_op.cc @@ -80,8 +80,8 @@ Adaptive Gradient Algorithm (Adagrad). The update is done as follows: -$$momentOut = moment + grad * grad \break -paramOut = param - learningRate * grad / ($\sqrt{momentOut}$ + \epsilon) \break +$$moment\_out = moment + grad * grad \\ +param\_out = param - \frac{learning\_rate * grad}{\sqrt{moment\_out} + \epsilon} $$ The original paper(http://www.jmlr.org/papers/volume12/duchi11a/duchi11a.pdf) diff --git a/paddle/operators/adam_op.cc b/paddle/operators/adam_op.cc index 03faa2a7c5..a268d05484 100644 --- a/paddle/operators/adam_op.cc +++ b/paddle/operators/adam_op.cc @@ -112,11 +112,13 @@ adaptive estimates of lower-order moments. Adam updates: -$$moment_1_{out} = \beta_1 * moment_1 + (1 - \beta_1) * grad \break -moment_2_{out} = \beta_2 * moment_2 + (1 - \beta_2) * grad * grad \break -learningRate = learningRate * - $\sqrt{(1 - \beta_2_{pow})}$ / (1 - \beta_1_{pow}) \break -paramOut = param - learningRate * moment_1/ ($\sqrt{(moment_2)} + \epsilon)$$ +$$ +moment\_1\_out = \beta_1 * moment\_1 + (1 - \beta_1) * grad \\ +moment\_2_\out = \beta_2 * moment\_2 + (1 - \beta_2) * grad * grad \\ +learning\_rate = learning\_rate * + \frac{\sqrt{1 - \beta_{2\_pow}}}{1 - \beta_{1\_pow}} \\ +param\_out = param - learning\_rate * \frac{moment\_1}{\sqrt{moment\_2} + \epsilon} +$$ )DOC"); } diff --git a/paddle/operators/adamax_op.cc b/paddle/operators/adamax_op.cc index 867ddd9790..9e7576c961 100644 --- a/paddle/operators/adamax_op.cc +++ b/paddle/operators/adamax_op.cc @@ -108,10 +108,10 @@ Adam algorithm based on the infinity norm. Adamax updates: $$ - momentOut = \beta_{1} * moment + (1 - \beta_{1}) * grad \\ - infNormOut = max(\beta_{2} * infNorm + \epsilon, |grad|) \\ - learningRate = \frac{learningRate}{1 - \beta_{1}^{Beta1Pow}} \\ - paramOut = param - learningRate * \frac{momentOut}{infNormOut} +moment\_out = \beta_1 * moment + (1 - \beta_1) * grad \\ +inf\_norm\_out = max(\beta_2 * inf\_norm + \epsilon, |grad|) \\ +learning\_rate = \frac{learning\_rate}{1 - \beta_{1\_pow}} \\ +param\_out = param - learning\_rate * \frac{moment\_out}{inf\_norm\_out} $$ The original paper does not have an epsilon attribute. From f4f17e539b70a6cdb4245267ae4027cd5202b0fa Mon Sep 17 00:00:00 2001 From: tensor-tang Date: Tue, 12 Dec 2017 16:35:13 +0800 Subject: [PATCH 056/193] skip mkl setting in v1 with Mac --- paddle/scripts/submit_local.sh.in | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/paddle/scripts/submit_local.sh.in b/paddle/scripts/submit_local.sh.in index d71cb84df3..43d2d1b410 100755 --- a/paddle/scripts/submit_local.sh.in +++ b/paddle/scripts/submit_local.sh.in @@ -140,7 +140,11 @@ else: sys.exit(0) EOF -cpu_config +if [ "`uname -s`" == "Linux" ]; then + # only support on linux yet, with mac can use v2 + cpu_config +fi + # echo $KMP_AFFINITY $OMP_DYNAMIC case "$1" in From c175eeb387ee90d8ba8a549a2e29a1680c9f1f35 Mon Sep 17 00:00:00 2001 From: wangmeng28 Date: Tue, 12 Dec 2017 11:08:23 +0800 Subject: [PATCH 057/193] Fix wrong index in dataset downloading exception --- python/paddle/v2/dataset/common.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/paddle/v2/dataset/common.py b/python/paddle/v2/dataset/common.py index e31e501ce9..191d9ecfb1 100644 --- a/python/paddle/v2/dataset/common.py +++ b/python/paddle/v2/dataset/common.py @@ -71,7 +71,7 @@ def download(url, module_name, md5sum): if retry < retry_limit: retry += 1 else: - raise RuntimeError("Cannot download {0} within retry limit {2}". + raise RuntimeError("Cannot download {0} within retry limit {1}". format(url, retry_limit)) print "Cache file %s not found, downloading %s" % (filename, url) r = requests.get(url, stream=True) From f3acdd3af94cb3018134b13893cffebdf09c827c Mon Sep 17 00:00:00 2001 From: Luo Tao Date: Tue, 12 Dec 2017 11:17:33 +0800 Subject: [PATCH 058/193] fix warning in row_conv_op.cu --- paddle/operators/row_conv_op.cu | 1 - 1 file changed, 1 deletion(-) diff --git a/paddle/operators/row_conv_op.cu b/paddle/operators/row_conv_op.cu index e0d7ebda7e..79b7086b24 100644 --- a/paddle/operators/row_conv_op.cu +++ b/paddle/operators/row_conv_op.cu @@ -243,7 +243,6 @@ __global__ void RowConvGradFilter(const T *in, const T *dout, int num_sequence, int block_x, int block_y, const size_t *batch_indices, T *dfilter) { int blx = blockDim.x; - int bly = blockDim.y; int thx = threadIdx.x; int thy = threadIdx.y; int gx = blockIdx.x * blx; From 59c74fb14adcd23fc244275ef9e74b8430cc43fc Mon Sep 17 00:00:00 2001 From: Luo Tao Date: Tue, 12 Dec 2017 11:35:38 +0800 Subject: [PATCH 059/193] change paddle:dev to paddle:latest-dev --- doc/howto/dev/contribute_to_paddle_cn.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/doc/howto/dev/contribute_to_paddle_cn.md b/doc/howto/dev/contribute_to_paddle_cn.md index 3eb477eb65..3e0bf7b397 100644 --- a/doc/howto/dev/contribute_to_paddle_cn.md +++ b/doc/howto/dev/contribute_to_paddle_cn.md @@ -76,18 +76,18 @@ no changes added to commit (use "git add" and/or "git commit -a") ## 构建和测试 -编译 PaddlePaddle 的源码以及生成文档需要多种开发工具。为了方便大家,我们的标准开发流程是把这些工具都装进一个Docker image,称为*开发镜像*,通常名字是 `paddle:dev`。然后所有用 `cmake && make` 的地方(比如IDE配置里)都用 `docker run paddle:dev`来代替。 +编译 PaddlePaddle 的源码以及生成文档需要多种开发工具。为了方便大家,我们的标准开发流程是把这些工具都装进一个Docker image,称为*开发镜像*,通常名字是 `paddle:latest-dev` 或者 `paddle:[version tag]-dev` 如 `paddle:0.11.0-dev`。然后所有用 `cmake && make` 的地方(比如IDE配置里)都用 `docker run paddle:latest-dev`来代替。 如要build这个开发镜像,在源码目录树的根目录中运行: ```bash -➜ docker build -t paddle:dev . +➜ docker build -t paddle:latest-dev . ``` 随后可以用这个开发镜像开始build PaddlePaddle的源码。比如如果要build一个不依赖GPU,但是支持AVX指令集,并且包括unit tests的PaddlePaddle,可以: ```bash -➜ docker run -v $(pwd):/paddle -e "WITH_GPU=OFF" -e "WITH_AVX=ON" -e "WITH_TESTING=ON" paddle:dev +➜ docker run -v $(pwd):/paddle -e "WITH_GPU=OFF" -e "WITH_AVX=ON" -e "WITH_TESTING=ON" paddle:latest-dev ``` 这个过程除了编译PaddlePaddle为 `./build/libpaddle.so`,并且输出一个 `./build/paddle.deb`文件之外,还会输出一个 `build/Dockerfile`。我们只需要运行下面命令把编译好的PaddlePaddle打包成一个*生产镜像*(`paddle:prod`): @@ -99,7 +99,7 @@ no changes added to commit (use "git add" and/or "git commit -a") 如果要运行所有的单元测试,可以用如下命令: ```bash -➜ docker run -it -v $(pwd):/paddle paddle:dev bash -c "cd /paddle/build && ctest" +➜ docker run -it -v $(pwd):/paddle paddle:latest-dev bash -c "cd /paddle/build && ctest" ``` 关于构建和测试的更多信息,请参见[这篇文档](https://github.com/PaddlePaddle/Paddle/blob/develop/doc/getstarted/build_and_install/docker_install_cn.rst)。 From 936f0546e3aaa772514bba721167e897769ec2a9 Mon Sep 17 00:00:00 2001 From: chengduoZH Date: Tue, 12 Dec 2017 10:24:50 +0800 Subject: [PATCH 060/193] fix img_pool maxout doc --- .../paddle/trainer_config_helpers/layers.py | 48 ++++++++++++------- 1 file changed, 31 insertions(+), 17 deletions(-) diff --git a/python/paddle/trainer_config_helpers/layers.py b/python/paddle/trainer_config_helpers/layers.py index d0b14cf63c..3a82e858f7 100644 --- a/python/paddle/trainer_config_helpers/layers.py +++ b/python/paddle/trainer_config_helpers/layers.py @@ -2729,15 +2729,17 @@ def img_pool_layer(input, .. math:: - w = 1 + \frac{ceil(input\_width + 2 * padding - pool\_size)}{stride} \\\\ - h = 1 + \frac{ceil(input\_height + 2 * padding\_y - pool\_size\_y)}{stride\_y} + w & = 1 + \\frac{ceil(input\_width + 2 * padding - pool\_size)}{stride} + + h & = 1 + \\frac{ceil(input\_height + 2 * padding\_y - pool\_size\_y)}{stride\_y} - ceil_mode=False: .. math:: - w = 1 + \frac{floor(input\_width + 2 * padding - pool\_size)}{stride} \\\\ - h = 1 + \frac{floor(input\_height + 2 * padding\_y - pool\_size\_y)}{stride\_y} + w & = 1 + \\frac{floor(input\_width + 2 * padding - pool\_size)}{stride} + + h & = 1 + \\frac{floor(input\_height + 2 * padding\_y - pool\_size\_y)}{stride\_y} The example usage is: @@ -2870,17 +2872,21 @@ def img_pool3d_layer(input, .. math:: - w = 1 + \frac{ceil(input\_width + 2 * padding - pool\_size)}{stride} \\\\ - h = 1 + \frac{ceil(input\_height + 2 * padding\_y - pool\_size\_y)}{stride\_y} \\\\ - d = 1 + \frac{ceil(input\_depth + 2 * padding\_z - pool\_size\_z)}{stride\_z} + w & = 1 + \\frac{ceil(input\_width + 2 * padding - pool\_size)}{stride} + + h & = 1 + \\frac{ceil(input\_height + 2 * padding\_y - pool\_size\_y)}{stride\_y} + + d & = 1 + \\frac{ceil(input\_depth + 2 * padding\_z - pool\_size\_z)}{stride\_z} - ceil_mode=False: .. math:: - w = 1 + \frac{floor(input\_width + 2 * padding - pool\_size)}{stride} \\\\ - h = 1 + \frac{floor(input\_height + 2 * padding\_y - pool\_size\_y)}{stride\_y} \\\\ - d = 1 + \frac{floor(input\_depth + 2 * padding\_z - pool\_size\_z)}{stride\_z} \\\\ + w & = 1 + \\frac{floor(input\_width + 2 * padding - pool\_size)}{stride} + + h & = 1 + \\frac{floor(input\_height + 2 * padding\_y - pool\_size\_y)}{stride\_y} + + d & = 1 + \\frac{floor(input\_depth + 2 * padding\_z - pool\_size\_z)}{stride\_z} The example usage is: @@ -5437,13 +5443,21 @@ def maxout_layer(input, groups, num_channels=None, name=None, layer_attr=None): .. math:: - out = \max_k (in[n, k, o_c , s]) \\\\ - out_{i * s + j} = \max_k in_{ k * o_{c} * s + i * s + j} \\\\ - s = \frac{input.size}{ num\_channels} \\\\ - o_{c} =\frac{num\_channels}{groups} \\\\ - 0 \le i < o_{c} \\\\ - 0 \le j < s \\\\ - 0 \le k < groups \\\\ + + out & = \max_k (in[n, k, o_c , s]) + + out_{i * s + j} & = \max_k in_{ k * o_{c} * s + i * s + j} + + s & = \\frac{input.size}{ num\_channels} + + o_{c} & = \\frac{num\_channels}{groups} + + 0 \le i & < o_{c} + + 0 \le j & < s + + 0 \le k & < groups + The simple usage is: From 7d8802938149df6b0dcf8934c0eb7fe0e4e5145c Mon Sep 17 00:00:00 2001 From: chengduoZH Date: Tue, 12 Dec 2017 12:55:58 +0800 Subject: [PATCH 061/193] equation align --- python/paddle/trainer_config_helpers/layers.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/python/paddle/trainer_config_helpers/layers.py b/python/paddle/trainer_config_helpers/layers.py index 3a82e858f7..7e118b24a4 100644 --- a/python/paddle/trainer_config_helpers/layers.py +++ b/python/paddle/trainer_config_helpers/layers.py @@ -5444,19 +5444,19 @@ def maxout_layer(input, groups, num_channels=None, name=None, layer_attr=None): .. math:: - out & = \max_k (in[n, k, o_c , s]) + & out = \max_k (in[n, k, o_c , s]) - out_{i * s + j} & = \max_k in_{ k * o_{c} * s + i * s + j} + & out_{i * s + j} = \max_k in_{ k * o_{c} * s + i * s + j} - s & = \\frac{input.size}{ num\_channels} + & s = \\frac{input.size}{ num\_channels} - o_{c} & = \\frac{num\_channels}{groups} + & o_{c} = \\frac{num\_channels}{groups} - 0 \le i & < o_{c} + & 0 \le i < o_{c} - 0 \le j & < s + & 0 \le j < s - 0 \le k & < groups + & 0 \le k < groups The simple usage is: From 61ec0b951656fb402e61c4dc519e80ba3fbc61d0 Mon Sep 17 00:00:00 2001 From: QI JUN Date: Tue, 12 Dec 2017 14:00:28 +0800 Subject: [PATCH 062/193] Refine device context (#6433) There are mainly following fixes: - take `DeviceContext` as the template parameter of math functors and OpKernel instead of `Place` - remove `eigen_device` interface in base class `DeviceContext` - remove `GetEigenDevice` interface in `ExecutionContext` and base class `DeviceContext` - remove unused `platform::EigenDeviceConverter` - rename `REGISTER_OP_GPU_KERNEL` to `REGISTER_OP_CUDA_KERNEL` - rename `USE_GPU_ONLY_OP` to `USE_CUDA_ONLY_OP` --- paddle/framework/op_registry.h | 12 +- paddle/framework/operator.cc | 16 +- paddle/framework/operator.h | 26 +-- paddle/framework/operator_test.cc | 2 +- paddle/operators/CMakeLists.txt | 2 +- paddle/operators/accuracy_op.cc | 2 +- paddle/operators/accuracy_op.cu | 5 +- paddle/operators/accuracy_op.h | 2 +- paddle/operators/activation_op.cc | 21 +- paddle/operators/activation_op.cu | 23 +- paddle/operators/activation_op.h | 14 +- paddle/operators/adadelta_op.cc | 4 +- paddle/operators/adadelta_op.cu | 6 +- paddle/operators/adadelta_op.h | 4 +- paddle/operators/adagrad_op.cc | 18 +- paddle/operators/adagrad_op.cu | 20 +- paddle/operators/adagrad_op.h | 17 +- paddle/operators/adam_op.cc | 6 +- paddle/operators/adam_op.cu | 6 +- paddle/operators/adam_op.h | 10 +- paddle/operators/adamax_op.cc | 6 +- paddle/operators/adamax_op.cu | 6 +- paddle/operators/adamax_op.h | 10 +- paddle/operators/auc_op.h | 2 +- paddle/operators/batch_norm_op.cc | 14 +- paddle/operators/batch_norm_op.cu.cc | 32 +-- paddle/operators/batch_norm_op.h | 4 +- .../operators/bilinear_tensor_product_op.cc | 11 +- .../operators/bilinear_tensor_product_op.cu | 16 +- paddle/operators/bilinear_tensor_product_op.h | 41 ++-- paddle/operators/cast_op.cc | 2 +- paddle/operators/cast_op.cu | 6 +- paddle/operators/cast_op.h | 13 +- paddle/operators/chunk_eval_op.h | 2 +- paddle/operators/clip_by_norm_op.cc | 3 +- paddle/operators/clip_by_norm_op.cu | 5 +- paddle/operators/clip_by_norm_op.h | 5 +- paddle/operators/clip_op.cc | 8 +- paddle/operators/clip_op.cu | 8 +- paddle/operators/clip_op.h | 16 +- paddle/operators/compare_op.cu | 10 +- paddle/operators/compare_op.h | 31 ++- paddle/operators/concat_op.cu.cc | 9 +- paddle/operators/concat_op.h | 4 +- paddle/operators/conv_cudnn_op.cc | 22 +- paddle/operators/conv_cudnn_op.cu.cc | 32 +-- paddle/operators/conv_op.cc | 22 +- paddle/operators/conv_op.cu.cc | 26 ++- paddle/operators/conv_op.h | 55 +++-- paddle/operators/conv_shift_op.cu | 22 +- paddle/operators/conv_shift_op.h | 4 +- paddle/operators/conv_transpose_cudnn_op.cc | 18 +- .../operators/conv_transpose_cudnn_op.cu.cc | 32 +-- paddle/operators/conv_transpose_op.cc | 18 +- paddle/operators/conv_transpose_op.cu.cc | 28 ++- paddle/operators/conv_transpose_op.h | 58 ++--- paddle/operators/cos_sim_op.cc | 7 +- paddle/operators/cos_sim_op.cu | 9 +- paddle/operators/cos_sim_op.h | 10 +- paddle/operators/crf_decoding_op.cc | 5 +- paddle/operators/crf_decoding_op.h | 6 +- paddle/operators/crop_op.cc | 4 +- paddle/operators/crop_op.cu | 6 +- paddle/operators/crop_op.h | 19 +- paddle/operators/cross_entropy_op.cu | 23 +- paddle/operators/cross_entropy_op.h | 12 +- paddle/operators/decayed_adagrad_op.cc | 2 +- paddle/operators/decayed_adagrad_op.cu | 4 +- paddle/operators/decayed_adagrad_op.h | 4 +- paddle/operators/dropout_op.cc | 6 +- paddle/operators/dropout_op.cu | 12 +- paddle/operators/dropout_op.h | 10 +- paddle/operators/elementwise_add_op.cc | 16 +- paddle/operators/elementwise_add_op.cu | 21 +- paddle/operators/elementwise_add_op.h | 10 +- paddle/operators/elementwise_div_op.cc | 16 +- paddle/operators/elementwise_div_op.cu | 21 +- paddle/operators/elementwise_div_op.h | 8 +- paddle/operators/elementwise_mul_op.cc | 16 +- paddle/operators/elementwise_mul_op.cu | 21 +- paddle/operators/elementwise_mul_op.h | 8 +- paddle/operators/elementwise_op_function.h | 94 ++++---- paddle/operators/elementwise_sub_op.cc | 16 +- paddle/operators/elementwise_sub_op.cu | 21 +- paddle/operators/elementwise_sub_op.h | 8 +- paddle/operators/expand_op.cc | 7 +- paddle/operators/expand_op.cu | 9 +- paddle/operators/expand_op.h | 10 +- .../fill_constant_batch_size_like_op.cc | 11 +- .../fill_constant_batch_size_like_op.cu.cc | 13 +- .../fill_constant_batch_size_like_op.h | 7 +- paddle/operators/fill_zeros_like_op.cc | 11 +- paddle/operators/fill_zeros_like_op.cu.cc | 13 +- paddle/operators/fill_zeros_like_op.h | 7 +- paddle/operators/ftrl_op.cc | 4 +- paddle/operators/ftrl_op.cu | 4 +- paddle/operators/ftrl_op.h | 4 +- paddle/operators/gather.cu.h | 2 +- paddle/operators/gather_op.cu | 7 +- paddle/operators/gather_op.h | 3 +- paddle/operators/gaussian_random_op.cu | 4 +- paddle/operators/gru_op.cc | 11 +- paddle/operators/gru_op.cu.cc | 11 +- paddle/operators/gru_op.h | 48 ++-- paddle/operators/gru_unit_op.cc | 11 +- paddle/operators/gru_unit_op.cu | 13 +- paddle/operators/gru_unit_op.h | 64 +++--- paddle/operators/hinge_loss_op.cc | 7 +- paddle/operators/hinge_loss_op.cu | 9 +- paddle/operators/hinge_loss_op.h | 10 +- paddle/operators/huber_loss_op.cc | 7 +- paddle/operators/huber_loss_op.cu | 9 +- paddle/operators/huber_loss_op.h | 10 +- paddle/operators/l1_norm_op.cc | 7 +- paddle/operators/l1_norm_op.cu | 9 +- paddle/operators/l1_norm_op.h | 10 +- paddle/operators/linear_chain_crf_op.cc | 9 +- paddle/operators/linear_chain_crf_op.cu | 13 +- paddle/operators/linear_chain_crf_op.h | 24 +- paddle/operators/lod_reset_op.cu | 13 +- paddle/operators/lod_reset_op.h | 4 +- paddle/operators/log_loss_op.cc | 7 +- paddle/operators/log_loss_op.cu | 9 +- paddle/operators/log_loss_op.h | 8 +- paddle/operators/logical_op.cu | 8 +- paddle/operators/logical_op.h | 21 +- paddle/operators/lookup_table_op.cu | 20 +- paddle/operators/lrn_op.cc | 21 +- paddle/operators/lrn_op.cu | 30 +-- paddle/operators/lrn_op.h | 10 +- paddle/operators/lstm_op.cc | 11 +- paddle/operators/lstm_op.cu.cc | 11 +- paddle/operators/lstm_op.h | 94 ++++---- paddle/operators/lstm_unit_op.cu | 8 +- paddle/operators/lstm_unit_op.h | 4 +- paddle/operators/margin_rank_loss_op.cc | 4 +- paddle/operators/margin_rank_loss_op.cu | 8 +- paddle/operators/margin_rank_loss_op.h | 8 +- paddle/operators/math/context_project.cc | 4 +- paddle/operators/math/context_project.cu | 4 +- paddle/operators/math/context_project.h | 20 +- paddle/operators/math/cross_entropy.cc | 10 +- paddle/operators/math/cross_entropy.cu | 14 +- paddle/operators/math/cross_entropy.h | 6 +- paddle/operators/math/gru_compute.cc | 28 +-- paddle/operators/math/gru_compute.cu | 34 ++- paddle/operators/math/gru_compute.h | 13 +- paddle/operators/math/im2col.cc | 32 +-- paddle/operators/math/im2col.cu | 48 ++-- paddle/operators/math/im2col.h | 11 +- paddle/operators/math/im2col_test.cc | 27 +-- paddle/operators/math/lstm_compute.cc | 16 +- paddle/operators/math/lstm_compute.cu | 16 +- paddle/operators/math/lstm_compute.h | 13 +- paddle/operators/math/math_function.cc | 144 ++++++------ paddle/operators/math/math_function.cu | 207 ++++++++---------- paddle/operators/math/math_function.h | 81 ++++--- paddle/operators/math/math_function_impl.h | 39 ++-- paddle/operators/math/math_function_test.cc | 9 +- paddle/operators/math/math_function_test.cu | 10 +- paddle/operators/math/matmul.h | 19 +- paddle/operators/math/maxouting.cc | 16 +- paddle/operators/math/maxouting.cu | 33 ++- paddle/operators/math/maxouting.h | 14 +- paddle/operators/math/pooling.cc | 128 ++++++----- paddle/operators/math/pooling.cu | 182 +++++++-------- paddle/operators/math/pooling.h | 68 +++--- .../operators/math/selected_rows_functor.cc | 45 ++-- .../operators/math/selected_rows_functor.cu | 77 +++---- paddle/operators/math/selected_rows_functor.h | 16 +- .../math/selected_rows_functor_test.cc | 12 +- .../math/selected_rows_functor_test.cu | 12 +- paddle/operators/math/sequence2batch.cc | 16 +- paddle/operators/math/sequence2batch.cu | 19 +- paddle/operators/math/sequence2batch.h | 22 +- paddle/operators/math/sequence_pooling.cc | 18 +- paddle/operators/math/sequence_pooling.cu | 24 +- paddle/operators/math/sequence_pooling.h | 8 +- paddle/operators/math/softmax.cc | 8 +- paddle/operators/math/softmax.cu | 8 +- paddle/operators/math/softmax.h | 13 +- paddle/operators/math/softmax_impl.h | 32 ++- paddle/operators/math/unpooling.cc | 16 +- paddle/operators/math/unpooling.cu | 36 ++- paddle/operators/math/unpooling.h | 10 +- paddle/operators/math/vol2col.cc | 16 +- paddle/operators/math/vol2col.cu | 24 +- paddle/operators/math/vol2col.h | 10 +- paddle/operators/math/vol2col_test.cc | 24 +- paddle/operators/matmul_op.cc | 7 +- paddle/operators/matmul_op.cu.cc | 9 +- paddle/operators/matmul_op.h | 45 ++-- paddle/operators/maxout_op.cc | 7 +- paddle/operators/maxout_op.cu.cc | 13 +- paddle/operators/maxout_op.h | 18 +- paddle/operators/mean_op.cc | 11 +- paddle/operators/mean_op.cu | 11 +- paddle/operators/mean_op.h | 10 +- paddle/operators/minus_op.cc | 4 +- paddle/operators/minus_op.cu | 5 +- paddle/operators/minus_op.h | 5 +- paddle/operators/modified_huber_loss_op.cc | 2 +- paddle/operators/modified_huber_loss_op.cu | 8 +- paddle/operators/modified_huber_loss_op.h | 5 +- paddle/operators/momentum_op.cu | 4 +- paddle/operators/mul_op.cc | 7 +- paddle/operators/mul_op.cu.cc | 7 +- paddle/operators/mul_op.h | 18 +- paddle/operators/multiplex_op.cc | 5 +- paddle/operators/multiplex_op.cu | 16 +- paddle/operators/multiplex_op.h | 11 +- paddle/operators/nccl_op.cu.cc | 6 +- paddle/operators/nccl_op_test.cu.cc | 6 +- paddle/operators/nce_op.cc | 4 +- paddle/operators/nce_op.h | 8 +- paddle/operators/pad_op.cc | 7 +- paddle/operators/pad_op.cu | 7 +- paddle/operators/pad_op.h | 38 ++-- paddle/operators/pool_cudnn_op.cc | 26 ++- paddle/operators/pool_cudnn_op.cu.cc | 18 +- paddle/operators/pool_op.cc | 24 +- paddle/operators/pool_op.cu.cc | 26 ++- paddle/operators/pool_op.h | 59 ++--- paddle/operators/pool_with_index_op.cc | 22 +- paddle/operators/pool_with_index_op.cu.cc | 32 ++- paddle/operators/pool_with_index_op.h | 26 ++- paddle/operators/positive_negative_pair_op.h | 2 +- paddle/operators/precision_recall_op.h | 2 +- paddle/operators/prelu_op.cc | 9 +- paddle/operators/prelu_op.cu | 11 +- paddle/operators/prelu_op.h | 16 +- paddle/operators/proximal_adagrad_op.cc | 2 +- paddle/operators/proximal_adagrad_op.cu | 4 +- paddle/operators/proximal_adagrad_op.h | 10 +- paddle/operators/proximal_gd_op.cc | 3 +- paddle/operators/proximal_gd_op.cu | 5 +- paddle/operators/proximal_gd_op.h | 4 +- paddle/operators/rank_loss_op.cc | 7 +- paddle/operators/rank_loss_op.cu | 12 +- paddle/operators/rank_loss_op.h | 8 +- paddle/operators/reduce_op.cc | 15 +- paddle/operators/reduce_op.cu | 15 +- paddle/operators/reduce_op.h | 44 ++-- paddle/operators/reshape_op.cu | 4 +- paddle/operators/reshape_op.h | 4 +- paddle/operators/rmsprop_op.cc | 4 +- paddle/operators/rmsprop_op.cu | 4 +- paddle/operators/rmsprop_op.h | 4 +- paddle/operators/roi_pool_op.cc | 9 +- paddle/operators/roi_pool_op.cu | 15 +- paddle/operators/roi_pool_op.h | 9 +- paddle/operators/row_conv_op.cc | 13 +- paddle/operators/row_conv_op.cu | 17 +- paddle/operators/row_conv_op.h | 4 +- paddle/operators/scale_op.cc | 10 +- paddle/operators/scale_op.cu | 12 +- paddle/operators/scale_op.h | 5 +- paddle/operators/scatter_op.cu | 4 +- paddle/operators/seq_expand_op.cc | 7 +- paddle/operators/seq_expand_op.cu | 9 +- paddle/operators/seq_expand_op.h | 14 +- paddle/operators/sequence_concat_op.cc | 4 +- paddle/operators/sequence_concat_op.cu.cc | 10 +- paddle/operators/sequence_concat_op.h | 4 +- paddle/operators/sequence_conv_op.cc | 9 +- paddle/operators/sequence_conv_op.cu.cc | 13 +- paddle/operators/sequence_conv_op.h | 65 +++--- paddle/operators/sequence_pool_op.cc | 5 +- paddle/operators/sequence_pool_op.cu | 9 +- paddle/operators/sequence_pool_op.h | 26 ++- paddle/operators/sequence_slice_op.cc | 4 +- paddle/operators/sequence_slice_op.cu | 8 +- paddle/operators/sequence_slice_op.h | 9 +- paddle/operators/sequence_softmax_op.cc | 4 +- paddle/operators/sequence_softmax_op.cu.cc | 8 +- paddle/operators/sequence_softmax_op.h | 12 +- paddle/operators/sgd_op.cc | 13 +- paddle/operators/sgd_op.cu | 22 +- paddle/operators/sgd_op.h | 14 +- .../sigmoid_cross_entropy_with_logits_op.cc | 4 +- .../sigmoid_cross_entropy_with_logits_op.cu | 12 +- .../sigmoid_cross_entropy_with_logits_op.h | 9 +- paddle/operators/sign_op.cc | 4 +- paddle/operators/sign_op.cu | 5 +- paddle/operators/sign_op.h | 5 +- paddle/operators/smooth_l1_loss_op.cc | 5 +- paddle/operators/smooth_l1_loss_op.cu | 9 +- paddle/operators/smooth_l1_loss_op.h | 30 +-- paddle/operators/softmax_op.cc | 7 +- paddle/operators/softmax_op.cu.cc | 9 +- paddle/operators/softmax_op.h | 10 +- .../softmax_with_cross_entropy_op.cu | 40 ++-- .../operators/softmax_with_cross_entropy_op.h | 18 +- paddle/operators/split_op.cu.cc | 4 +- paddle/operators/split_op.h | 2 +- paddle/operators/squared_l2_distance_op.cc | 8 +- paddle/operators/squared_l2_distance_op.cu | 10 +- paddle/operators/squared_l2_distance_op.h | 10 +- paddle/operators/squared_l2_norm_op.cc | 4 +- paddle/operators/squared_l2_norm_op.cu | 8 +- paddle/operators/squared_l2_norm_op.h | 14 +- paddle/operators/sum_op.cc | 9 +- paddle/operators/sum_op.cu | 9 +- paddle/operators/sum_op.h | 23 +- paddle/operators/top_k_op.cu | 2 +- paddle/operators/top_k_op.h | 2 +- paddle/operators/transpose_op.cc | 6 +- paddle/operators/transpose_op.cu.cc | 9 +- paddle/operators/transpose_op.h | 29 +-- paddle/operators/uniform_random_op.cc | 2 +- paddle/operators/uniform_random_op.cu | 6 +- paddle/operators/unpool_op.cc | 11 +- paddle/operators/unpool_op.cu.cc | 13 +- paddle/operators/unpool_op.h | 22 +- paddle/platform/device_context.cc | 12 - paddle/platform/device_context.h | 17 -- paddle/platform/device_context_test.cc | 5 +- paddle/platform/transform.h | 24 +- paddle/platform/transform_test.cu | 8 +- 319 files changed, 2624 insertions(+), 2546 deletions(-) diff --git a/paddle/framework/op_registry.h b/paddle/framework/op_registry.h index daade439e5..b29238432b 100644 --- a/paddle/framework/op_registry.h +++ b/paddle/framework/op_registry.h @@ -181,8 +181,8 @@ class OpKernelRegistrar : public Registrar { return 0; \ } -#define REGISTER_OP_GPU_KERNEL(op_type, ...) \ - REGISTER_OP_KERNEL(op_type, GPU, ::paddle::platform::GPUPlace, __VA_ARGS__) +#define REGISTER_OP_CUDA_KERNEL(op_type, ...) \ + REGISTER_OP_KERNEL(op_type, CUDA, ::paddle::platform::GPUPlace, __VA_ARGS__) #define REGISTER_OP_CPU_KERNEL(op_type, ...) \ REGISTER_OP_KERNEL(op_type, CPU, ::paddle::platform::CPUPlace, __VA_ARGS__) @@ -217,7 +217,7 @@ class OpKernelRegistrar : public Registrar { #else #define USE_OP_KERNEL(op_type) \ USE_OP_DEVICE_KERNEL(op_type, CPU); \ - USE_OP_DEVICE_KERNEL(op_type, GPU) + USE_OP_DEVICE_KERNEL(op_type, CUDA) #endif #define USE_NO_KERNEL_OP(op_type) USE_OP_ITSELF(op_type); @@ -226,9 +226,9 @@ class OpKernelRegistrar : public Registrar { USE_OP_ITSELF(op_type); \ USE_OP_DEVICE_KERNEL(op_type, CPU); -#define USE_GPU_ONLY_OP(op_type) \ - USE_OP_ITSELF(op_type); \ - USE_OP_DEVICE_KERNEL(op_type, GPU) +#define USE_CUDA_ONLY_OP(op_type) \ + USE_OP_ITSELF(op_type); \ + USE_OP_DEVICE_KERNEL(op_type, CUDA) #define USE_OP(op_type) \ USE_OP_ITSELF(op_type); \ diff --git a/paddle/framework/operator.cc b/paddle/framework/operator.cc index f1444eeee9..e83d754783 100644 --- a/paddle/framework/operator.cc +++ b/paddle/framework/operator.cc @@ -22,20 +22,6 @@ limitations under the License. */ namespace paddle { namespace framework { -template <> -Eigen::DefaultDevice& ExecutionContext::GetEigenDevice< - platform::CPUPlace, Eigen::DefaultDevice>() const { - return *device_context_.GetEigenDevice(); -} - -#ifdef PADDLE_WITH_CUDA -template <> -Eigen::GpuDevice& -ExecutionContext::GetEigenDevice() const { - return *device_context_.GetEigenDevice(); -} -#endif - std::string OperatorBase::Input(const std::string& name) const { auto& ins = Inputs(name); PADDLE_ENFORCE_LE(ins.size(), 1UL, @@ -429,7 +415,7 @@ void OperatorWithKernel::Run(const Scope& scope, } OpKernelType OperatorWithKernel::GetKernelType( const ExecutionContext& ctx) const { - return OpKernelType(IndicateDataType(ctx), ctx.device_context()); + return OpKernelType(IndicateDataType(ctx), ctx.GetPlace()); } DataType OperatorWithKernel::IndicateDataType( const ExecutionContext& ctx) const { diff --git a/paddle/framework/operator.h b/paddle/framework/operator.h index 60861d9293..e60dbfc313 100644 --- a/paddle/framework/operator.h +++ b/paddle/framework/operator.h @@ -276,17 +276,25 @@ class ExecutionContext { out_tensor->set_lod(in_tensor.lod()); } - template ::EigenDeviceType> - DeviceType& GetEigenDevice() const; - platform::Place GetPlace() const { return device_context_.GetPlace(); } + template + const DeviceContextType& device_context() const { + return *reinterpret_cast(&device_context_); + } + const platform::DeviceContext& device_context() const { return device_context_; } +#ifdef PADDLE_WITH_CUDA + const inline platform::CUDADeviceContext& cuda_device_context() const { + PADDLE_ENFORCE(platform::is_gpu_place(device_context_.GetPlace())); + return *reinterpret_cast( + &device_context_); + } +#endif + //! Get actual name vector for this input. const std::vector& Inputs(const std::string& name) const { return op_.Inputs(name); @@ -297,14 +305,6 @@ class ExecutionContext { return op_.Outputs(name); } -#ifdef PADDLE_WITH_CUDA - const inline platform::CUDADeviceContext& cuda_device_context() const { - PADDLE_ENFORCE(platform::is_gpu_place(device_context_.GetPlace())); - return *reinterpret_cast( - &device_context_); - } -#endif - private: const OperatorBase& op_; const Scope& scope_; diff --git a/paddle/framework/operator_test.cc b/paddle/framework/operator_test.cc index 59ddbc7791..b678178454 100644 --- a/paddle/framework/operator_test.cc +++ b/paddle/framework/operator_test.cc @@ -115,7 +115,7 @@ class OpWithKernelTest : public OperatorWithKernel { protected: void InferShape(framework::InferShapeContext* ctx) const override {} OpKernelType GetKernelType(const ExecutionContext& ctx) const override { - return OpKernelType(DataType::FP32, ctx.device_context()); + return OpKernelType(DataType::FP32, ctx.GetPlace()); } }; diff --git a/paddle/operators/CMakeLists.txt b/paddle/operators/CMakeLists.txt index 38b89b9eb1..5aaaf99332 100644 --- a/paddle/operators/CMakeLists.txt +++ b/paddle/operators/CMakeLists.txt @@ -138,7 +138,7 @@ function(op_library TARGET) if ("${TARGET}" STREQUAL "nccl_op") set(pybind_flag 1) # It's enough to just adding one operator to pybind - file(APPEND ${pybind_file} "USE_GPU_ONLY_OP(ncclAllReduce);\n") + file(APPEND ${pybind_file} "USE_CUDA_ONLY_OP(ncclAllReduce);\n") endif() # reduce_op contains several operators diff --git a/paddle/operators/accuracy_op.cc b/paddle/operators/accuracy_op.cc index 2785a8c6fb..76da21c472 100644 --- a/paddle/operators/accuracy_op.cc +++ b/paddle/operators/accuracy_op.cc @@ -57,7 +57,7 @@ class AccuracyOp : public framework::OperatorWithKernel { const framework::ExecutionContext &ctx) const override { return framework::OpKernelType( framework::ToDataType(ctx.Input("Out")->type()), - ctx.device_context()); + ctx.GetPlace()); } }; diff --git a/paddle/operators/accuracy_op.cu b/paddle/operators/accuracy_op.cu index d2dcab4e54..539a935302 100644 --- a/paddle/operators/accuracy_op.cu +++ b/paddle/operators/accuracy_op.cu @@ -104,5 +104,6 @@ class AccuracyOpCUDAKernel : public framework::OpKernel { // FIXME(typhoonzero): types of T is for inference data. // label data is always int64 -REGISTER_OP_GPU_KERNEL(accuracy, paddle::operators::AccuracyOpCUDAKernel, - paddle::operators::AccuracyOpCUDAKernel); +REGISTER_OP_CUDA_KERNEL(accuracy, + paddle::operators::AccuracyOpCUDAKernel, + paddle::operators::AccuracyOpCUDAKernel); diff --git a/paddle/operators/accuracy_op.h b/paddle/operators/accuracy_op.h index d060e6eddd..04104a695f 100644 --- a/paddle/operators/accuracy_op.h +++ b/paddle/operators/accuracy_op.h @@ -21,7 +21,7 @@ namespace operators { using Tensor = framework::Tensor; -template +template class AccuracyKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& ctx) const override { diff --git a/paddle/operators/activation_op.cc b/paddle/operators/activation_op.cc index 7f3118f176..63490f0ec9 100644 --- a/paddle/operators/activation_op.cc +++ b/paddle/operators/activation_op.cc @@ -611,16 +611,17 @@ REGISTER_OP(hard_sigmoid, ops::ActivationOp, ops::HardSigmoidOpMaker, REGISTER_OP(swish, ops::ActivationOp, ops::SwishOpMaker, swish_grad, ops::ActivationOpGrad); -#define REGISTER_ACTIVATION_CPU_KERNEL(act_type, functor, grad_functor) \ - REGISTER_OP_CPU_KERNEL( \ - act_type, \ - ops::ActivationKernel>, \ - ops::ActivationKernel>); \ - REGISTER_OP_CPU_KERNEL( \ - act_type##_grad, ops::ActivationGradKernel>, \ - ops::ActivationGradKernel>, \ + ops::ActivationKernel>); \ + REGISTER_OP_CPU_KERNEL( \ + act_type##_grad, \ + ops::ActivationGradKernel>, \ + ops::ActivationGradKernel>); FOR_EACH_KERNEL_FUNCTOR(REGISTER_ACTIVATION_CPU_KERNEL); diff --git a/paddle/operators/activation_op.cu b/paddle/operators/activation_op.cu index 97737857ab..856d3fc35d 100644 --- a/paddle/operators/activation_op.cu +++ b/paddle/operators/activation_op.cu @@ -17,16 +17,17 @@ namespace ops = paddle::operators; -#define REGISTER_ACTIVATION_GPU_KERNEL(act_type, functor, grad_functor) \ - REGISTER_OP_GPU_KERNEL( \ - act_type, \ - ops::ActivationKernel>, \ - ops::ActivationKernel>); \ - REGISTER_OP_GPU_KERNEL( \ - act_type##_grad, ops::ActivationGradKernel>, \ - ops::ActivationGradKernel>, \ + ops::ActivationKernel>); \ + REGISTER_OP_CUDA_KERNEL( \ + act_type##_grad, \ + ops::ActivationGradKernel>, \ + ops::ActivationGradKernel>); -FOR_EACH_KERNEL_FUNCTOR(REGISTER_ACTIVATION_GPU_KERNEL); +FOR_EACH_KERNEL_FUNCTOR(REGISTER_ACTIVATION_CUDA_KERNEL); diff --git a/paddle/operators/activation_op.h b/paddle/operators/activation_op.h index ac0e0a3b01..75eefca8b8 100644 --- a/paddle/operators/activation_op.h +++ b/paddle/operators/activation_op.h @@ -19,7 +19,7 @@ namespace paddle { namespace operators { -template +template class ActivationKernel : public framework::OpKernel { public: @@ -32,18 +32,19 @@ class ActivationKernel auto x = framework::EigenVector::Flatten(*X); auto y = framework::EigenVector::Flatten(*Y); - auto place = context.GetEigenDevice(); + auto* place = + context.template device_context().eigen_device(); Functor functor; auto attrs = functor.GetAttrs(); for (auto& attr : attrs) { *attr.second = context.Attr(attr.first); } - functor(place, x, y); + functor(*place, x, y); } }; -template +template class ActivationGradKernel : public framework::OpKernel { public: @@ -59,13 +60,14 @@ class ActivationGradKernel auto x = framework::EigenVector::Flatten(*X); auto y = framework::EigenVector::Flatten(*Y); auto dx = framework::EigenVector::Flatten(*dX); - auto place = context.GetEigenDevice(); + auto* place = + context.template device_context().eigen_device(); Functor functor; auto attrs = functor.GetAttrs(); for (auto& attr : attrs) { *attr.second = context.Attr(attr.first); } - functor(place, x, y, dy, dx); + functor(*place, x, y, dy, dx); } }; diff --git a/paddle/operators/adadelta_op.cc b/paddle/operators/adadelta_op.cc index 29434a0ee2..507811e7b5 100644 --- a/paddle/operators/adadelta_op.cc +++ b/paddle/operators/adadelta_op.cc @@ -109,5 +109,5 @@ $$ namespace ops = paddle::operators; REGISTER_OP_WITHOUT_GRADIENT(adadelta, ops::AdadeltaOp, ops::AdadeltaOpMaker); REGISTER_OP_CPU_KERNEL( - adadelta, ops::AdadeltaOpKernel, - ops::AdadeltaOpKernel); + adadelta, ops::AdadeltaOpKernel, + ops::AdadeltaOpKernel); diff --git a/paddle/operators/adadelta_op.cu b/paddle/operators/adadelta_op.cu index 9fb6185207..eee2d0a2f5 100644 --- a/paddle/operators/adadelta_op.cu +++ b/paddle/operators/adadelta_op.cu @@ -16,6 +16,6 @@ #include "paddle/operators/adadelta_op.h" namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL( - adadelta, ops::AdadeltaOpKernel, - ops::AdadeltaOpKernel); +REGISTER_OP_CUDA_KERNEL( + adadelta, ops::AdadeltaOpKernel, + ops::AdadeltaOpKernel); diff --git a/paddle/operators/adadelta_op.h b/paddle/operators/adadelta_op.h index a8c5f0c8aa..819d0845db 100644 --- a/paddle/operators/adadelta_op.h +++ b/paddle/operators/adadelta_op.h @@ -19,7 +19,7 @@ limitations under the License. */ namespace paddle { namespace operators { -template +template class AdadeltaOpKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& ctx) const override { @@ -51,7 +51,7 @@ class AdadeltaOpKernel : public framework::OpKernel { framework::EigenVector::Flatten(*avg_squared_grad_out_tensor); auto avg_squared_update_out = framework::EigenVector::Flatten(*avg_squared_update_out_tensor); - auto place = ctx.GetEigenDevice(); + auto& place = *ctx.template device_context().eigen_device(); avg_squared_grad_out.device(place) = rho * avg_squared_grad + (1 - rho) * grad.square(); diff --git a/paddle/operators/adagrad_op.cc b/paddle/operators/adagrad_op.cc index d19602244b..5d00716316 100644 --- a/paddle/operators/adagrad_op.cc +++ b/paddle/operators/adagrad_op.cc @@ -100,8 +100,8 @@ size_t FindPos(const std::vector& rows, int64_t value) { } // namespace template -struct SparseAdagradFunctor { - void operator()(const platform::DeviceContext& context, +struct SparseAdagradFunctor { + void operator()(const platform::CPUDeviceContext& context, const framework::SelectedRows& grad, const framework::Tensor& learning_rate, T epsilon, framework::Tensor* moment, framework::Tensor* param) { @@ -120,7 +120,7 @@ struct SparseAdagradFunctor { {static_cast(merge_rows.size()), grad_width}), context.GetPlace()); - math::SetConstant constant_functor; + math::SetConstant constant_functor; constant_functor(context, grad_merge->mutable_value(), 0.0); auto* grad_merge_data = grad_merge->mutable_value()->data(); @@ -144,9 +144,9 @@ struct SparseAdagradFunctor { auto gs = framework::EigenVector::Flatten(*(grad_square->mutable_value())); auto gm = framework::EigenVector::Flatten(grad_merge->value()); - gs.device(*context.GetEigenDevice()) = gm * gm; + gs.device(*context.eigen_device()) = gm * gm; - math::SelectedRowsAddToTensor functor; + math::SelectedRowsAddToTensor functor; functor(context, *grad_square, moment); // 3. update parameter @@ -164,13 +164,13 @@ struct SparseAdagradFunctor { } }; -template struct SparseAdagradFunctor; -template struct SparseAdagradFunctor; +template struct SparseAdagradFunctor; +template struct SparseAdagradFunctor; } // namespace operators } // namespace paddle namespace ops = paddle::operators; REGISTER_OP_WITHOUT_GRADIENT(adagrad, ops::AdagradOp, ops::AdagradOpMaker); REGISTER_OP_CPU_KERNEL( - adagrad, ops::AdagradOpKernel, - ops::AdagradOpKernel); + adagrad, ops::AdagradOpKernel, + ops::AdagradOpKernel); diff --git a/paddle/operators/adagrad_op.cu b/paddle/operators/adagrad_op.cu index 1c870214b2..585b2d9289 100644 --- a/paddle/operators/adagrad_op.cu +++ b/paddle/operators/adagrad_op.cu @@ -72,8 +72,8 @@ __global__ void SparseAdagradFunctorKernel(const T* grad, const int64_t* rows, } // namespace template -struct SparseAdagradFunctor { - void operator()(const platform::DeviceContext& context, +struct SparseAdagradFunctor { + void operator()(const platform::CUDADeviceContext& context, const framework::SelectedRows& grad, const framework::Tensor& learning_rate, T epsilon, framework::Tensor* moment, framework::Tensor* param) { @@ -92,7 +92,7 @@ struct SparseAdagradFunctor { {static_cast(merge_rows.size()), grad_width}), context.GetPlace()); - math::SetConstant constant_functor; + math::SetConstant constant_functor; constant_functor(context, grad_merge->mutable_value(), 0.0); auto* grad_merge_data = grad_merge->mutable_value()->data(); @@ -119,9 +119,9 @@ struct SparseAdagradFunctor { auto gs = framework::EigenVector::Flatten(*(grad_square->mutable_value())); auto gm = framework::EigenVector::Flatten(grad_merge->value()); - gs.device(*context.GetEigenDevice()) = gm * gm; + gs.device(*context.eigen_device()) = gm * gm; - math::SelectedRowsAddToTensor functor; + math::SelectedRowsAddToTensor functor; functor(context, *grad_square, moment); // 3. update parameter @@ -139,13 +139,13 @@ struct SparseAdagradFunctor { } }; -template struct SparseAdagradFunctor; -template struct SparseAdagradFunctor; +template struct SparseAdagradFunctor; +template struct SparseAdagradFunctor; } // namespace operators } // namespace paddle namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL( - adagrad, ops::AdagradOpKernel, - ops::AdagradOpKernel); +REGISTER_OP_CUDA_KERNEL( + adagrad, ops::AdagradOpKernel, + ops::AdagradOpKernel); diff --git a/paddle/operators/adagrad_op.h b/paddle/operators/adagrad_op.h index 4d4a6434c7..0d77dbcbac 100644 --- a/paddle/operators/adagrad_op.h +++ b/paddle/operators/adagrad_op.h @@ -19,15 +19,15 @@ limitations under the License. */ namespace paddle { namespace operators { -template +template struct SparseAdagradFunctor { - void operator()(const platform::DeviceContext& context, + void operator()(const DeviceContext& context, const framework::SelectedRows& grad, const framework::Tensor& learning_rate, T epsilon, framework::Tensor* moment, framework::Tensor* param); }; -template +template class AdagradOpKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& ctx) const override { @@ -52,11 +52,11 @@ class AdagradOpKernel : public framework::OpKernel { auto param_out = framework::EigenVector::Flatten(*param_out_tensor); auto moment_out = framework::EigenVector::Flatten(*moment_out_tensor); - auto place = ctx.GetEigenDevice(); + auto* place = ctx.template device_context().eigen_device(); - moment_out.device(place) = moment + grad * grad; + moment_out.device(*place) = moment + grad * grad; Eigen::DSizes m_dsize(moment_out_tensor->numel()); - param_out.device(place) = + param_out.device(*place) = param - lr.broadcast(m_dsize) * grad / (moment_out.sqrt() + epsilon); } else if (grad_var->IsType()) { auto* param_tensor = ctx.Input("Param"); @@ -65,8 +65,9 @@ class AdagradOpKernel : public framework::OpKernel { auto* moment_tensor = ctx.Input("Moment"); PADDLE_ENFORCE_EQ(moment_tensor, moment_out_tensor); - SparseAdagradFunctor functor; - functor(ctx.device_context(), *ctx.Input("Grad"), + SparseAdagradFunctor functor; + functor(ctx.template device_context(), + *ctx.Input("Grad"), *ctx.Input("LearningRate"), epsilon, moment_out_tensor, param_out_tensor); } else { diff --git a/paddle/operators/adam_op.cc b/paddle/operators/adam_op.cc index a268d05484..cf6ef6dd53 100644 --- a/paddle/operators/adam_op.cc +++ b/paddle/operators/adam_op.cc @@ -128,6 +128,6 @@ $$ namespace ops = paddle::operators; REGISTER_OP_WITHOUT_GRADIENT(adam, ops::AdamOp, ops::AdamOpMaker); -REGISTER_OP_CPU_KERNEL(adam, - ops::AdamOpKernel, - ops::AdamOpKernel); +REGISTER_OP_CPU_KERNEL( + adam, ops::AdamOpKernel, + ops::AdamOpKernel); diff --git a/paddle/operators/adam_op.cu b/paddle/operators/adam_op.cu index 6e34f7818c..c135b37378 100644 --- a/paddle/operators/adam_op.cu +++ b/paddle/operators/adam_op.cu @@ -16,6 +16,6 @@ #include "paddle/operators/adam_op.h" namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL(adam, - ops::AdamOpKernel, - ops::AdamOpKernel); +REGISTER_OP_CUDA_KERNEL( + adam, ops::AdamOpKernel, + ops::AdamOpKernel); diff --git a/paddle/operators/adam_op.h b/paddle/operators/adam_op.h index 7f7fa1da1c..45157842a6 100644 --- a/paddle/operators/adam_op.h +++ b/paddle/operators/adam_op.h @@ -19,7 +19,7 @@ limitations under the License. */ namespace paddle { namespace operators { -template +template class AdamOpKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& ctx) const override { @@ -52,17 +52,17 @@ class AdamOpKernel : public framework::OpKernel { auto param_out = framework::EigenVector::Flatten(*param_out_tensor); auto moment1_out = framework::EigenVector::Flatten(*moment1_out_tensor); auto moment2_out = framework::EigenVector::Flatten(*moment2_out_tensor); - auto place = ctx.GetEigenDevice(); + auto* place = ctx.template device_context().eigen_device(); - moment1_out.device(place) = beta1 * moment1 + (1 - beta1) * grad; - moment2_out.device(place) = beta2 * moment2 + (1 - beta2) * grad.square(); + moment1_out.device(*place) = beta1 * moment1 + (1 - beta1) * grad; + moment2_out.device(*place) = beta2 * moment2 + (1 - beta2) * grad.square(); // All of these are tensors of 1 element auto lr_t = lr * (1 - beta2_pow).sqrt() / (1 - beta1_pow); // Eigen does not support automatic broadcast // Get dimensions of moment vector to broadcast lr_t Eigen::DSizes m_dsize(moment1_out_tensor->numel()); - param_out.device(place) = + param_out.device(*place) = param - lr_t.broadcast(m_dsize) * (moment1_out / (moment2_out.sqrt() + epsilon)); diff --git a/paddle/operators/adamax_op.cc b/paddle/operators/adamax_op.cc index 9e7576c961..49ce497bb7 100644 --- a/paddle/operators/adamax_op.cc +++ b/paddle/operators/adamax_op.cc @@ -127,6 +127,6 @@ division by 0 error. namespace ops = paddle::operators; REGISTER_OP_WITHOUT_GRADIENT(adamax, ops::AdamaxOp, ops::AdamaxOpMaker); -REGISTER_OP_CPU_KERNEL(adamax, - ops::AdamaxOpKernel, - ops::AdamaxOpKernel); +REGISTER_OP_CPU_KERNEL( + adamax, ops::AdamaxOpKernel, + ops::AdamaxOpKernel); diff --git a/paddle/operators/adamax_op.cu b/paddle/operators/adamax_op.cu index 057ef39025..2d143905c4 100644 --- a/paddle/operators/adamax_op.cu +++ b/paddle/operators/adamax_op.cu @@ -16,6 +16,6 @@ #include "paddle/operators/adamax_op.h" namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL(adamax, - ops::AdamaxOpKernel, - ops::AdamaxOpKernel); +REGISTER_OP_CUDA_KERNEL( + adamax, ops::AdamaxOpKernel, + ops::AdamaxOpKernel); diff --git a/paddle/operators/adamax_op.h b/paddle/operators/adamax_op.h index bf36ed7860..172c179c5f 100644 --- a/paddle/operators/adamax_op.h +++ b/paddle/operators/adamax_op.h @@ -19,7 +19,7 @@ limitations under the License. */ namespace paddle { namespace operators { -template +template class AdamaxOpKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& ctx) const override { @@ -51,14 +51,14 @@ class AdamaxOpKernel : public framework::OpKernel { auto moment_out = framework::EigenVector::Flatten(*moment_out_tensor); auto inf_norm_out = framework::EigenVector::Flatten(*inf_norm_out_tensor); - auto place = ctx.GetEigenDevice(); + auto* place = ctx.template device_context().eigen_device(); - moment_out.device(place) = beta1 * moment + (1 - beta1) * grad; - inf_norm_out.device(place) = + moment_out.device(*place) = beta1 * moment + (1 - beta1) * grad; + inf_norm_out.device(*place) = grad.abs().cwiseMax((beta2 * inf_norm) + epsilon); auto lr_t = lr / (1 - beta1_pow); Eigen::DSizes m_dsize(moment_out_tensor->numel()); - param_out.device(place) = + param_out.device(*place) = param - lr_t.broadcast(m_dsize) * (moment_out / inf_norm_out); } }; diff --git a/paddle/operators/auc_op.h b/paddle/operators/auc_op.h index e5ac57b038..b80509e2a9 100644 --- a/paddle/operators/auc_op.h +++ b/paddle/operators/auc_op.h @@ -25,7 +25,7 @@ template using EigenVector = framework::EigenVector; -template +template class AucKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& ctx) const override { diff --git a/paddle/operators/batch_norm_op.cc b/paddle/operators/batch_norm_op.cc index ac97bd83ab..94a972b7ab 100644 --- a/paddle/operators/batch_norm_op.cc +++ b/paddle/operators/batch_norm_op.cc @@ -135,7 +135,8 @@ The required data format for this layer is one of the following: }; template -class BatchNormKernel : public framework::OpKernel { +class BatchNormKernel + : public framework::OpKernel { public: void Compute(const framework::ExecutionContext &ctx) const override { const float epsilon = ctx.Attr("epsilon"); @@ -318,12 +319,12 @@ class BatchNormGradOp : public framework::OperatorWithKernel { PADDLE_THROW("can't find Y@GRAD"); } return framework::OpKernelType(framework::ToDataType(t->type()), - ctx.device_context()); + ctx.GetPlace()); } }; template -class BatchNormGradKernel +class BatchNormGradKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext &ctx) const override { @@ -436,8 +437,9 @@ class BatchNormGradKernel namespace ops = paddle::operators; REGISTER_OP(batch_norm, ops::BatchNormOp, ops::BatchNormOpMaker, batch_norm_grad, ops::BatchNormGradOp); -REGISTER_OP_CPU_KERNEL(batch_norm, - ops::BatchNormKernel); +REGISTER_OP_CPU_KERNEL( + batch_norm, + ops::BatchNormKernel); REGISTER_OP_CPU_KERNEL( batch_norm_grad, - ops::BatchNormGradKernel); + ops::BatchNormGradKernel); diff --git a/paddle/operators/batch_norm_op.cu.cc b/paddle/operators/batch_norm_op.cu.cc index 7b2f318700..c7adc3d80e 100644 --- a/paddle/operators/batch_norm_op.cu.cc +++ b/paddle/operators/batch_norm_op.cu.cc @@ -47,7 +47,8 @@ void ExtractNCWHD(const framework::DDim &dims, } template -class BatchNormKernel : public framework::OpKernel { +class BatchNormKernel + : public framework::OpKernel { public: void Compute(const framework::ExecutionContext &ctx) const override { PADDLE_ENFORCE(platform::is_gpu_place(ctx.GetPlace()), @@ -121,11 +122,12 @@ class BatchNormKernel : public framework::OpKernel { saved_mean->mutable_data(ctx.GetPlace()); saved_variance->mutable_data(ctx.GetPlace()); - math::SetConstant functor; - functor(ctx.device_context(), saved_mean, 0); - functor(ctx.device_context(), saved_variance, 0); + auto &dev_ctx = ctx.template device_context(); + math::SetConstant functor; + functor(dev_ctx, saved_mean, 0); + functor(dev_ctx, saved_variance, 0); - auto handle = ctx.cuda_device_context().cudnn_handle(); + auto handle = dev_ctx.cudnn_handle(); // Now, depending on whether we are running test or not, we have two paths. if (is_test) { @@ -171,7 +173,7 @@ class BatchNormKernel : public framework::OpKernel { }; template -class BatchNormGradKernel +class BatchNormGradKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext &ctx) const override { @@ -244,11 +246,12 @@ class BatchNormGradKernel const void *saved_mean_data = saved_mean->template data(); const void *saved_var_data = saved_var->template data(); + auto &dev_ctx = ctx.template device_context(); CUDNN_ENFORCE(platform::dynload::cudnnBatchNormalizationBackward( - ctx.cuda_device_context().cudnn_handle(), mode_, - CudnnDataType::kOne(), CudnnDataType::kZero(), - CudnnDataType::kOne(), CudnnDataType::kZero(), data_desc_, - x->template data(), data_desc_, d_y->template data(), data_desc_, + dev_ctx.cudnn_handle(), mode_, CudnnDataType::kOne(), + CudnnDataType::kZero(), CudnnDataType::kOne(), + CudnnDataType::kZero(), data_desc_, x->template data(), + data_desc_, d_y->template data(), data_desc_, d_x->template mutable_data(ctx.GetPlace()), bn_param_desc_, scale->template data(), d_scale->template mutable_data(ctx.GetPlace()), @@ -266,8 +269,9 @@ class BatchNormGradKernel } // namespace paddle namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL(batch_norm, - ops::BatchNormKernel); -REGISTER_OP_GPU_KERNEL( +REGISTER_OP_CUDA_KERNEL( + batch_norm, + ops::BatchNormKernel); +REGISTER_OP_CUDA_KERNEL( batch_norm_grad, - ops::BatchNormGradKernel); + ops::BatchNormGradKernel); diff --git a/paddle/operators/batch_norm_op.h b/paddle/operators/batch_norm_op.h index 4e80134a1a..8d99b68647 100644 --- a/paddle/operators/batch_norm_op.h +++ b/paddle/operators/batch_norm_op.h @@ -34,13 +34,13 @@ inline TensorFormat StringToTensorFormat(const std::string& str) { } } -template +template class BatchNormKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& ctx) const override; }; -template +template class BatchNormGradKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& ctx) const override; diff --git a/paddle/operators/bilinear_tensor_product_op.cc b/paddle/operators/bilinear_tensor_product_op.cc index c88b2c9beb..217fd52366 100644 --- a/paddle/operators/bilinear_tensor_product_op.cc +++ b/paddle/operators/bilinear_tensor_product_op.cc @@ -159,9 +159,12 @@ REGISTER_OP(bilinear_tensor_product, ops::BilinearTensorProductOp, ops::BilinearTensorProductOpGrad); REGISTER_OP_CPU_KERNEL( bilinear_tensor_product, - ops::BilinearTensorProductKernel, - ops::BilinearTensorProductKernel); + ops::BilinearTensorProductKernel, + ops::BilinearTensorProductKernel); REGISTER_OP_CPU_KERNEL( bilinear_tensor_product_grad, - ops::BilinearTensorProductGradKernel, - ops::BilinearTensorProductGradKernel); + ops::BilinearTensorProductGradKernel, + ops::BilinearTensorProductGradKernel); diff --git a/paddle/operators/bilinear_tensor_product_op.cu b/paddle/operators/bilinear_tensor_product_op.cu index 858d2668d0..0f48010716 100644 --- a/paddle/operators/bilinear_tensor_product_op.cu +++ b/paddle/operators/bilinear_tensor_product_op.cu @@ -16,11 +16,15 @@ limitations under the License. */ #include "paddle/operators/bilinear_tensor_product_op.h" namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL( +REGISTER_OP_CUDA_KERNEL( bilinear_tensor_product, - ops::BilinearTensorProductKernel, - ops::BilinearTensorProductKernel); -REGISTER_OP_GPU_KERNEL( + ops::BilinearTensorProductKernel, + ops::BilinearTensorProductKernel); +REGISTER_OP_CUDA_KERNEL( bilinear_tensor_product_grad, - ops::BilinearTensorProductGradKernel, - ops::BilinearTensorProductGradKernel); + ops::BilinearTensorProductGradKernel, + ops::BilinearTensorProductGradKernel); diff --git a/paddle/operators/bilinear_tensor_product_op.h b/paddle/operators/bilinear_tensor_product_op.h index 1113a4c6f3..ba9a2c5ce3 100644 --- a/paddle/operators/bilinear_tensor_product_op.h +++ b/paddle/operators/bilinear_tensor_product_op.h @@ -27,7 +27,7 @@ template using EigenMatrix = framework::EigenMatrix; -template +template class BilinearTensorProductKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& ctx) const override { @@ -46,7 +46,8 @@ class BilinearTensorProductKernel : public framework::OpKernel { int out_dim = weight_dims[0]; auto x_dim = weight_dims[1]; auto y_dim = weight_dims[2]; - auto place = ctx.GetEigenDevice(); + auto& place = *ctx.template device_context().eigen_device(); + auto& dev_ctx = ctx.template device_context(); // Create the intermediate variable to caculate the result of // Input(X) multiplied by Input(Weight_i), the formula is: @@ -60,9 +61,9 @@ class BilinearTensorProductKernel : public framework::OpKernel { auto output_col_vec = output_mat.chip(i, 1); Tensor weight_mat = weight->Slice(i, i + 1).Resize(framework::make_ddim({x_dim, y_dim})); - math::gemm(ctx.device_context(), CblasNoTrans, CblasNoTrans, - batch_size, y_dim, x_dim, 1, x->data(), - weight_mat.data(), 0, left_mul.data()); + math::gemm(dev_ctx, CblasNoTrans, CblasNoTrans, + batch_size, y_dim, x_dim, 1, x->data(), + weight_mat.data(), 0, left_mul.data()); output_col_vec.device(place) = (left_mul_mat * y_mat).sum(Eigen::DSizes(1)); } @@ -74,7 +75,7 @@ class BilinearTensorProductKernel : public framework::OpKernel { } }; -template +template class BilinearTensorProductGradKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& ctx) const override { @@ -96,8 +97,8 @@ class BilinearTensorProductGradKernel : public framework::OpKernel { auto x_mat = EigenMatrix::From(*x); auto y_mat = EigenMatrix::From(*y); auto d_out_mat = EigenMatrix::From(*d_out); - auto place = ctx.GetEigenDevice(); - + auto& place = *ctx.template device_context().eigen_device(); + auto& dev_ctx = ctx.template device_context(); // Create the intermediate variable to caculate the Output(Y@Grad). Tensor x_scale; x_scale.mutable_data(framework::make_ddim({batch_size, x_dim}), @@ -110,18 +111,18 @@ class BilinearTensorProductGradKernel : public framework::OpKernel { ctx.GetPlace()); auto y_scale_mat = EigenMatrix::From(y_scale); - math::SetConstant set_zero; + math::SetConstant set_zero; // Set Output(X@Grad) be zero. if (d_x) { d_x->mutable_data(ctx.GetPlace()); - set_zero(ctx.device_context(), d_x, static_cast(0)); + set_zero(dev_ctx, d_x, static_cast(0)); } // Set Output(Y@Grad) be zero. if (d_y) { d_y->mutable_data(ctx.GetPlace()); - set_zero(ctx.device_context(), d_y, static_cast(0)); + set_zero(dev_ctx, d_y, static_cast(0)); } // Caculate the Output(X@Grad) and Output(Y@Grad). @@ -137,18 +138,18 @@ class BilinearTensorProductGradKernel : public framework::OpKernel { output_vec.reshape(Eigen::DSizes(batch_size, 1)) .broadcast(bcast_for_x) * y_mat; - math::gemm(ctx.device_context(), CblasNoTrans, CblasTrans, - batch_size, x_dim, y_dim, 1, y_scale.data(), - weight_i.data(), 1, d_x->data()); + math::gemm( + dev_ctx, CblasNoTrans, CblasTrans, batch_size, x_dim, y_dim, 1, + y_scale.data(), weight_i.data(), 1, d_x->data()); } if (d_y) { x_scale_mat.device(place) = output_vec.reshape(Eigen::DSizes(batch_size, 1)) .broadcast(bcast_for_y) * x_mat; - math::gemm(ctx.device_context(), CblasNoTrans, CblasNoTrans, - batch_size, y_dim, x_dim, 1, x_scale.data(), - weight_i.data(), 1, d_y->data()); + math::gemm( + dev_ctx, CblasNoTrans, CblasNoTrans, batch_size, y_dim, x_dim, 1, + x_scale.data(), weight_i.data(), 1, d_y->data()); } } } @@ -165,9 +166,9 @@ class BilinearTensorProductGradKernel : public framework::OpKernel { output_vec.reshape(Eigen::DSizes(batch_size, 1)) .broadcast(bcast_for_weight) * x_mat; - math::gemm(ctx.device_context(), CblasTrans, CblasNoTrans, - x_dim, y_dim, batch_size, 1, x_scale.data(), - y->data(), 0, d_weight_i.data()); + math::gemm(dev_ctx, CblasTrans, CblasNoTrans, x_dim, + y_dim, batch_size, 1, x_scale.data(), + y->data(), 0, d_weight_i.data()); } } diff --git a/paddle/operators/cast_op.cc b/paddle/operators/cast_op.cc index 3082a53ccf..42bff69a1e 100644 --- a/paddle/operators/cast_op.cc +++ b/paddle/operators/cast_op.cc @@ -68,7 +68,7 @@ class CastOpGradMaker : public framework::SingleGradOpDescMaker { } // namespace paddle namespace ops = paddle::operators; -using CPU = paddle::platform::CPUPlace; +using CPU = paddle::platform::CPUDeviceContext; REGISTER_OP_WITH_KERNEL(cast, ops::CastOpGradMaker, ops::CastOpInferShape, ops::CastOpProtoMaker); REGISTER_OP_CPU_KERNEL(cast, ops::CastOpKernel, diff --git a/paddle/operators/cast_op.cu b/paddle/operators/cast_op.cu index fb75ddbabf..4681deaa62 100644 --- a/paddle/operators/cast_op.cu +++ b/paddle/operators/cast_op.cu @@ -16,7 +16,7 @@ template using CastOpKernel = - paddle::operators::CastOpKernel; + paddle::operators::CastOpKernel; -REGISTER_OP_GPU_KERNEL(cast, CastOpKernel, CastOpKernel, - CastOpKernel, CastOpKernel); +REGISTER_OP_CUDA_KERNEL(cast, CastOpKernel, CastOpKernel, + CastOpKernel, CastOpKernel); diff --git a/paddle/operators/cast_op.h b/paddle/operators/cast_op.h index 850dc8e349..a6773f13a8 100644 --- a/paddle/operators/cast_op.h +++ b/paddle/operators/cast_op.h @@ -27,13 +27,13 @@ struct CastOpTransformFunctor { HOSTDEVICE OutT operator()(InT in) const { return static_cast(in); } }; -template +template struct CastOpFunctor { const framework::Tensor* in_; framework::Tensor* out_; - const platform::DeviceContext& ctx_; + const DeviceContext& ctx_; CastOpFunctor(const framework::Tensor* in, framework::Tensor* out, - const platform::DeviceContext& ctx) + const DeviceContext& ctx) : in_(in), out_(out), ctx_(ctx) {} template @@ -42,13 +42,13 @@ struct CastOpFunctor { auto numel = in_->numel(); auto* in_end = in_begin + numel; auto* out_begin = out_->mutable_data(ctx_.GetPlace()); - platform::Transform trans; + platform::Transform trans; trans(ctx_, in_begin, in_end, out_begin, CastOpTransformFunctor()); } }; -template +template class CastOpKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { @@ -56,7 +56,8 @@ class CastOpKernel : public framework::OpKernel { auto* out = context.Output("Out"); framework::VisitDataType( static_cast(context.Attr("out_dtype")), - CastOpFunctor(in, out, context.device_context())); + CastOpFunctor( + in, out, context.template device_context())); } }; diff --git a/paddle/operators/chunk_eval_op.h b/paddle/operators/chunk_eval_op.h index dd88f2553b..9cd758a825 100644 --- a/paddle/operators/chunk_eval_op.h +++ b/paddle/operators/chunk_eval_op.h @@ -23,7 +23,7 @@ namespace operators { using Tensor = framework::Tensor; using LoDTensor = framework::LoDTensor; -template +template class ChunkEvalKernel : public framework::OpKernel { public: struct Segment { diff --git a/paddle/operators/clip_by_norm_op.cc b/paddle/operators/clip_by_norm_op.cc index f73d55bbe3..0b7975a63f 100644 --- a/paddle/operators/clip_by_norm_op.cc +++ b/paddle/operators/clip_by_norm_op.cc @@ -71,4 +71,5 @@ namespace ops = paddle::operators; REGISTER_OP_WITHOUT_GRADIENT(clip_by_norm, ops::ClipByNormOp, ops::ClipByNormOpMaker); REGISTER_OP_CPU_KERNEL( - clip_by_norm, ops::ClipByNormKernel); + clip_by_norm, + ops::ClipByNormKernel); diff --git a/paddle/operators/clip_by_norm_op.cu b/paddle/operators/clip_by_norm_op.cu index 2593a24ebb..acd7543823 100644 --- a/paddle/operators/clip_by_norm_op.cu +++ b/paddle/operators/clip_by_norm_op.cu @@ -15,5 +15,6 @@ #include "paddle/operators/clip_by_norm_op.h" namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL( - clip_by_norm, ops::ClipByNormKernel); +REGISTER_OP_CUDA_KERNEL( + clip_by_norm, + ops::ClipByNormKernel); diff --git a/paddle/operators/clip_by_norm_op.h b/paddle/operators/clip_by_norm_op.h index b26476cae9..d8db1566b0 100644 --- a/paddle/operators/clip_by_norm_op.h +++ b/paddle/operators/clip_by_norm_op.h @@ -26,7 +26,7 @@ template using EigenVector = framework::EigenVector; -template +template class ClipByNormKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { @@ -38,7 +38,8 @@ class ClipByNormKernel : public framework::OpKernel { auto x = EigenVector::Flatten(*input); auto out = EigenVector::Flatten(*output); auto x_norm = x.square().sum().sqrt(); - auto place = context.GetEigenDevice(); + auto& place = + *context.template device_context().eigen_device(); auto temp = (x_norm <= max_norm).template cast().eval(); auto scaling = temp + (static_cast(1) - temp) * max_norm / x_norm; diff --git a/paddle/operators/clip_op.cc b/paddle/operators/clip_op.cc index 4ddf24dea3..6092212de4 100644 --- a/paddle/operators/clip_op.cc +++ b/paddle/operators/clip_op.cc @@ -83,7 +83,7 @@ class ClipOpGrad : public framework::OperatorWithKernel { namespace ops = paddle::operators; REGISTER_OP(clip, ops::ClipOp, ops::ClipOpMaker, clip_grad, ops::ClipOpGrad); -REGISTER_OP_CPU_KERNEL(clip, - ops::ClipKernel); -REGISTER_OP_CPU_KERNEL(clip_grad, - ops::ClipGradKernel); +REGISTER_OP_CPU_KERNEL( + clip, ops::ClipKernel); +REGISTER_OP_CPU_KERNEL( + clip_grad, ops::ClipGradKernel); diff --git a/paddle/operators/clip_op.cu b/paddle/operators/clip_op.cu index ca9701298f..bb7dcc671a 100644 --- a/paddle/operators/clip_op.cu +++ b/paddle/operators/clip_op.cu @@ -15,7 +15,7 @@ #include "paddle/operators/clip_op.h" namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL(clip, - ops::ClipKernel); -REGISTER_OP_GPU_KERNEL(clip_grad, - ops::ClipGradKernel); +REGISTER_OP_CUDA_KERNEL( + clip, ops::ClipKernel); +REGISTER_OP_CUDA_KERNEL( + clip_grad, ops::ClipGradKernel); diff --git a/paddle/operators/clip_op.h b/paddle/operators/clip_op.h index ac702e9935..0c40797410 100644 --- a/paddle/operators/clip_op.h +++ b/paddle/operators/clip_op.h @@ -55,7 +55,7 @@ class ClipGradFunctor { T max_; }; -template +template class ClipKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { @@ -66,13 +66,13 @@ class ClipKernel : public framework::OpKernel { T* out_data = out->mutable_data(context.GetPlace()); const T* x_data = x->data(); int64_t numel = x->numel(); - Transform trans; - trans(context.device_context(), x_data, x_data + numel, out_data, - ClipFunctor(min, max)); + Transform trans; + trans(context.template device_context(), x_data, + x_data + numel, out_data, ClipFunctor(min, max)); } }; -template +template class ClipGradKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { @@ -86,9 +86,9 @@ class ClipGradKernel : public framework::OpKernel { auto* d_x_data = d_x->mutable_data(context.GetPlace()); const T* d_out_data = d_out->data(); const T* x_data = x->data(); - Transform trans; - trans(context.device_context(), d_out_data, d_out_data + numel, x_data, - d_x_data, ClipGradFunctor(min, max)); + Transform trans; + trans(context.template device_context(), d_out_data, + d_out_data + numel, x_data, d_x_data, ClipGradFunctor(min, max)); } } }; diff --git a/paddle/operators/compare_op.cu b/paddle/operators/compare_op.cu index 6ac8c124b9..596a878bcf 100644 --- a/paddle/operators/compare_op.cu +++ b/paddle/operators/compare_op.cu @@ -14,10 +14,10 @@ #include "paddle/operators/compare_op.h" -REGISTER_LOGICAL_KERNEL(less_than, GPU, paddle::operators::LessThanFunctor); -REGISTER_LOGICAL_KERNEL(less_equal, GPU, paddle::operators::LessEqualFunctor); -REGISTER_LOGICAL_KERNEL(greater_than, GPU, +REGISTER_LOGICAL_KERNEL(less_than, CUDA, paddle::operators::LessThanFunctor); +REGISTER_LOGICAL_KERNEL(less_equal, CUDA, paddle::operators::LessEqualFunctor); +REGISTER_LOGICAL_KERNEL(greater_than, CUDA, paddle::operators::GreaterThanFunctor); -REGISTER_LOGICAL_KERNEL(greater_equal, GPU, +REGISTER_LOGICAL_KERNEL(greater_equal, CUDA, paddle::operators::GreaterEqualFunctor); -REGISTER_LOGICAL_KERNEL(equal, GPU, paddle::operators::EqualFunctor); +REGISTER_LOGICAL_KERNEL(equal, CUDA, paddle::operators::EqualFunctor); diff --git a/paddle/operators/compare_op.h b/paddle/operators/compare_op.h index afdf3ab3e0..a56536e155 100644 --- a/paddle/operators/compare_op.h +++ b/paddle/operators/compare_op.h @@ -59,7 +59,7 @@ struct EqualFunctor { } }; -template +template class CompareOpKernel : public framework::OpKernel { public: @@ -69,24 +69,23 @@ class CompareOpKernel auto* y = context.Input("Y"); auto* out = context.Output("Out"); Functor binary_func; - platform::Transform trans; - trans(context.device_context(), x->data(), x->data() + x->numel(), - y->data(), out->mutable_data(context.GetPlace()), - binary_func); + platform::Transform trans; + trans(context.template device_context(), x->data(), + x->data() + x->numel(), y->data(), + out->mutable_data(context.GetPlace()), binary_func); } }; } // namespace operators } // namespace paddle -#define REGISTER_LOGICAL_KERNEL(op_type, dev, functor) \ - REGISTER_OP_##dev##_KERNEL( \ - op_type, \ - ::paddle::operators::CompareOpKernel<::paddle::platform::dev##Place, \ - functor>, \ - ::paddle::operators::CompareOpKernel<::paddle::platform::dev##Place, \ - functor>, \ - ::paddle::operators::CompareOpKernel<::paddle::platform::dev##Place, \ - functor>, \ - ::paddle::operators::CompareOpKernel<::paddle::platform::dev##Place, \ - functor>); +#define REGISTER_LOGICAL_KERNEL(op_type, dev, functor) \ + REGISTER_OP_##dev##_KERNEL( \ + op_type, ::paddle::operators::CompareOpKernel< \ + ::paddle::platform::dev##DeviceContext, functor>, \ + ::paddle::operators::CompareOpKernel< \ + ::paddle::platform::dev##DeviceContext, functor>, \ + ::paddle::operators::CompareOpKernel< \ + ::paddle::platform::dev##DeviceContext, functor>, \ + ::paddle::operators::CompareOpKernel< \ + ::paddle::platform::dev##DeviceContext, functor>); diff --git a/paddle/operators/concat_op.cu.cc b/paddle/operators/concat_op.cu.cc index ede832ddcd..7b46452d3d 100644 --- a/paddle/operators/concat_op.cu.cc +++ b/paddle/operators/concat_op.cu.cc @@ -14,7 +14,8 @@ limitations under the License. */ #include "paddle/operators/concat_op.h" namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL(concat, - ops::ConcatKernel); -REGISTER_OP_GPU_KERNEL( - concat_grad, ops::ConcatGradKernel); +REGISTER_OP_CUDA_KERNEL( + concat, ops::ConcatKernel); +REGISTER_OP_CUDA_KERNEL( + concat_grad, + ops::ConcatGradKernel); diff --git a/paddle/operators/concat_op.h b/paddle/operators/concat_op.h index c113f19fb5..de4011585a 100644 --- a/paddle/operators/concat_op.h +++ b/paddle/operators/concat_op.h @@ -21,7 +21,7 @@ limitations under the License. */ namespace paddle { namespace operators { -template +template class ConcatKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& ctx) const override { @@ -43,7 +43,7 @@ class ConcatKernel : public framework::OpKernel { } }; -template +template class ConcatGradKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& ctx) const { diff --git a/paddle/operators/conv_cudnn_op.cc b/paddle/operators/conv_cudnn_op.cc index 0dd8c13b2a..008bf01885 100644 --- a/paddle/operators/conv_cudnn_op.cc +++ b/paddle/operators/conv_cudnn_op.cc @@ -57,18 +57,20 @@ REGISTER_OP(conv2d_cudnn, ops::ConvOp, ops::CudnnConv2DOpMaker, REGISTER_OP(conv3d_cudnn, ops::ConvOp, ops::CudnnConv3DOpMaker, conv3d_cudnn_grad, ops::ConvOpGrad); -REGISTER_OP_CPU_KERNEL(conv2d_cudnn, - ops::GemmConvKernel, - ops::GemmConvKernel); +REGISTER_OP_CPU_KERNEL( + conv2d_cudnn, + ops::GemmConvKernel, + ops::GemmConvKernel); REGISTER_OP_CPU_KERNEL( conv2d_cudnn_grad, - ops::GemmConvGradKernel, - ops::GemmConvGradKernel); + ops::GemmConvGradKernel, + ops::GemmConvGradKernel); -REGISTER_OP_CPU_KERNEL(conv3d_cudnn, - ops::GemmConvKernel, - ops::GemmConvKernel); +REGISTER_OP_CPU_KERNEL( + conv3d_cudnn, + ops::GemmConvKernel, + ops::GemmConvKernel); REGISTER_OP_CPU_KERNEL( conv3d_cudnn_grad, - ops::GemmConvGradKernel, - ops::GemmConvGradKernel); + ops::GemmConvGradKernel, + ops::GemmConvGradKernel); diff --git a/paddle/operators/conv_cudnn_op.cu.cc b/paddle/operators/conv_cudnn_op.cu.cc index bc265dcc4f..3da0a9001a 100644 --- a/paddle/operators/conv_cudnn_op.cu.cc +++ b/paddle/operators/conv_cudnn_op.cu.cc @@ -118,7 +118,8 @@ class CudnnConvOpKernel : public framework::OpKernel { } // ------------------- cudnn conv algorithm --------------------- cudnnConvolutionFwdAlgo_t algo; - auto handle = ctx.cuda_device_context().cudnn_handle(); + auto& dev_ctx = ctx.template device_context(); + auto handle = dev_ctx.cudnn_handle(); PADDLE_ENFORCE(platform::dynload::cudnnGetConvolutionForwardAlgorithm( handle, cudnn_input_desc, cudnn_filter_desc, cudnn_conv_desc, @@ -238,7 +239,8 @@ class CudnnConvGradOpKernel : public framework::OpKernel { workspace_size_limit = user_workspace_size * 1024 * 1024; } - auto handle = ctx.cuda_device_context().cudnn_handle(); + auto& dev_ctx = ctx.template device_context(); + auto handle = dev_ctx.cudnn_handle(); if (input_grad) { PADDLE_ENFORCE( platform::dynload::cudnnGetConvolutionBackwardDataAlgorithm( @@ -313,16 +315,16 @@ class CudnnConvGradOpKernel : public framework::OpKernel { } // namespace operators } // namespace paddle -REGISTER_OP_GPU_KERNEL(conv2d_cudnn, - paddle::operators::CudnnConvOpKernel, - paddle::operators::CudnnConvOpKernel); -REGISTER_OP_GPU_KERNEL(conv2d_cudnn_grad, - paddle::operators::CudnnConvGradOpKernel, - paddle::operators::CudnnConvGradOpKernel); - -REGISTER_OP_GPU_KERNEL(conv3d_cudnn, - paddle::operators::CudnnConvOpKernel, - paddle::operators::CudnnConvOpKernel); -REGISTER_OP_GPU_KERNEL(conv3d_cudnn_grad, - paddle::operators::CudnnConvGradOpKernel, - paddle::operators::CudnnConvGradOpKernel); +REGISTER_OP_CUDA_KERNEL(conv2d_cudnn, + paddle::operators::CudnnConvOpKernel, + paddle::operators::CudnnConvOpKernel); +REGISTER_OP_CUDA_KERNEL(conv2d_cudnn_grad, + paddle::operators::CudnnConvGradOpKernel, + paddle::operators::CudnnConvGradOpKernel); + +REGISTER_OP_CUDA_KERNEL(conv3d_cudnn, + paddle::operators::CudnnConvOpKernel, + paddle::operators::CudnnConvOpKernel); +REGISTER_OP_CUDA_KERNEL(conv3d_cudnn_grad, + paddle::operators::CudnnConvGradOpKernel, + paddle::operators::CudnnConvGradOpKernel); diff --git a/paddle/operators/conv_op.cc b/paddle/operators/conv_op.cc index 462e6d9cbc..7ef805fd44 100644 --- a/paddle/operators/conv_op.cc +++ b/paddle/operators/conv_op.cc @@ -235,16 +235,18 @@ namespace ops = paddle::operators; REGISTER_OP(conv3d, ops::ConvOp, ops::Conv3DOpMaker, conv3d_grad, ops::ConvOpGrad); -REGISTER_OP_CPU_KERNEL(conv2d, - ops::GemmConvKernel, - ops::GemmConvKernel); REGISTER_OP_CPU_KERNEL( - conv2d_grad, ops::GemmConvGradKernel, - ops::GemmConvGradKernel); + conv2d, ops::GemmConvKernel, + ops::GemmConvKernel); +REGISTER_OP_CPU_KERNEL( + conv2d_grad, + ops::GemmConvGradKernel, + ops::GemmConvGradKernel); -REGISTER_OP_CPU_KERNEL(conv3d, - ops::GemmConvKernel, - ops::GemmConvKernel); REGISTER_OP_CPU_KERNEL( - conv3d_grad, ops::GemmConvGradKernel, - ops::GemmConvGradKernel); + conv3d, ops::GemmConvKernel, + ops::GemmConvKernel); +REGISTER_OP_CPU_KERNEL( + conv3d_grad, + ops::GemmConvGradKernel, + ops::GemmConvGradKernel); diff --git a/paddle/operators/conv_op.cu.cc b/paddle/operators/conv_op.cu.cc index 546451234a..38615a8bef 100644 --- a/paddle/operators/conv_op.cu.cc +++ b/paddle/operators/conv_op.cu.cc @@ -16,16 +16,18 @@ namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL(conv2d, - ops::GemmConvKernel, - ops::GemmConvKernel); -REGISTER_OP_GPU_KERNEL( - conv2d_grad, ops::GemmConvGradKernel, - ops::GemmConvGradKernel); +REGISTER_OP_CUDA_KERNEL( + conv2d, ops::GemmConvKernel, + ops::GemmConvKernel); +REGISTER_OP_CUDA_KERNEL( + conv2d_grad, + ops::GemmConvGradKernel, + ops::GemmConvGradKernel); -REGISTER_OP_GPU_KERNEL(conv3d, - ops::GemmConvKernel, - ops::GemmConvKernel); -REGISTER_OP_GPU_KERNEL( - conv3d_grad, ops::GemmConvGradKernel, - ops::GemmConvGradKernel); +REGISTER_OP_CUDA_KERNEL( + conv3d, ops::GemmConvKernel, + ops::GemmConvKernel); +REGISTER_OP_CUDA_KERNEL( + conv3d_grad, + ops::GemmConvGradKernel, + ops::GemmConvGradKernel); diff --git a/paddle/operators/conv_op.h b/paddle/operators/conv_op.h index 09bff0a68d..749258183b 100644 --- a/paddle/operators/conv_op.h +++ b/paddle/operators/conv_op.h @@ -72,7 +72,7 @@ class ConvOpGrad : public framework::OperatorWithKernel { void InferShape(framework::InferShapeContext* ctx) const override; }; -template +template class GemmConvKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { @@ -141,9 +141,10 @@ class GemmConvKernel : public framework::OpKernel { int in_step = static_cast(input->dims()[1]) / groups; int out_step = static_cast(output->dims()[1]) / groups; - math::Vol2ColFunctor vol2col; - math::Im2ColFunctor im2col; + math::Vol2ColFunctor vol2col; + math::Im2ColFunctor im2col; + auto& dev_ctx = context.template device_context(); for (int i = 0; i < batch_size; i++) { Tensor in_batch = input->Slice(i, i + 1).Resize(input_shape); Tensor out_batch = output->Slice(i, i + 1).Resize(output_matrix_shape); @@ -157,27 +158,26 @@ class GemmConvKernel : public framework::OpKernel { col_matrix.Resize(col_matrix_shape); } else if (data_dim == 2U) { // im2col - im2col(context.device_context(), in_slice, dilations, strides, + im2col(dev_ctx, in_slice, dilations, strides, std::vector{paddings[0], paddings[1], paddings[0], paddings[1]}, &col); } else if (data_dim == 3U) { // vol2col - vol2col(context.device_context(), in_slice, dilations, strides, - paddings, &col); + vol2col(dev_ctx, in_slice, dilations, strides, paddings, &col); } // gemm Tensor out_slice = out_batch.Slice(g * out_step, (g + 1) * out_step); Tensor filter_slice = filter.Slice(g * out_step, (g + 1) * out_step); - math::matmul(context.device_context(), filter_slice, false, - col_matrix, false, T(1.0), &out_slice, T(0.0)); + math::matmul(dev_ctx, filter_slice, false, col_matrix, + false, T(1.0), &out_slice, T(0.0)); } } } }; -template +template class GemmConvGradKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { @@ -256,14 +256,15 @@ class GemmConvGradKernel : public framework::OpKernel { col_matrix.Resize(col_matrix_shape); } - math::SetConstant set_zero; + math::SetConstant set_zero; + auto& dev_ctx = context.template device_context(); if (input_grad) { input_grad->mutable_data(context.GetPlace()); - set_zero(context.device_context(), input_grad, static_cast(0)); + set_zero(dev_ctx, input_grad, static_cast(0)); - math::Col2VolFunctor col2vol; - math::Col2ImFunctor col2im; + math::Col2VolFunctor col2vol; + math::Col2ImFunctor col2im; for (int i = 0; i < batch_size; i++) { Tensor out_grad_batch = @@ -282,18 +283,17 @@ class GemmConvGradKernel : public framework::OpKernel { col_matrix.ShareDataWith(in_grad_slice); col_matrix.Resize(col_matrix_shape); } - math::matmul(context.device_context(), filter_slice, true, - out_grad_slice, false, T(1.0), &col_matrix, - T(0.0)); + math::matmul(dev_ctx, filter_slice, true, + out_grad_slice, false, T(1.0), + &col_matrix, T(0.0)); if (is_expand && data_dim == 2U) { - col2im(context.device_context(), col, dilations, strides, + col2im(dev_ctx, col, dilations, strides, std::vector{paddings[0], paddings[1], paddings[0], paddings[1]}, &in_grad_slice); } else if (is_expand && data_dim == 3U) { - col2vol(context.device_context(), col, dilations, strides, paddings, - &in_grad_slice); + col2vol(dev_ctx, col, dilations, strides, paddings, &in_grad_slice); } } } @@ -303,9 +303,9 @@ class GemmConvGradKernel : public framework::OpKernel { filter_grad->mutable_data(context.GetPlace()); Tensor filter_grad_ = *filter_grad; filter_grad_.Resize(filter_matrix_shape); - set_zero(context.device_context(), filter_grad, static_cast(0)); - math::Im2ColFunctor im2col; - math::Vol2ColFunctor vol2col; + set_zero(dev_ctx, filter_grad, static_cast(0)); + math::Im2ColFunctor im2col; + math::Vol2ColFunctor vol2col; for (int i = 0; i < batch_size; i++) { Tensor out_grad_batch = output_grad->Slice(i, i + 1).Resize(output_matrix_shape); @@ -321,21 +321,20 @@ class GemmConvGradKernel : public framework::OpKernel { col_matrix.ShareDataWith(col); col_matrix.Resize(col_matrix_shape); } else if (data_dim == 2U) { - im2col(context.device_context(), in_slice, dilations, strides, + im2col(dev_ctx, in_slice, dilations, strides, std::vector{paddings[0], paddings[1], paddings[0], paddings[1]}, &col); } else if (data_dim == 3U) { - vol2col(context.device_context(), in_slice, dilations, strides, - paddings, &col); + vol2col(dev_ctx, in_slice, dilations, strides, paddings, &col); } // gemm Tensor filter_grad_slice = filter_grad_.Slice(g * out_step, (g + 1) * out_step); - math::matmul(context.device_context(), out_grad_slice, - false, col_matrix, true, T(1.0), - &filter_grad_slice, T(1.0)); + math::matmul(dev_ctx, out_grad_slice, false, + col_matrix, true, T(1.0), + &filter_grad_slice, T(1.0)); } } } diff --git a/paddle/operators/conv_shift_op.cu b/paddle/operators/conv_shift_op.cu index 95e13c38a8..f7ca82ce26 100644 --- a/paddle/operators/conv_shift_op.cu +++ b/paddle/operators/conv_shift_op.cu @@ -111,7 +111,8 @@ __global__ void ConvShiftDy(const T *x, const T *dout, int x_width, int y_width, } // namespace template -class ConvShiftKernel : public framework::OpKernel { +class ConvShiftKernel + : public framework::OpKernel { public: void Compute(const framework::ExecutionContext &context) const override { const Tensor *X = context.Input("X"); @@ -132,7 +133,8 @@ class ConvShiftKernel : public framework::OpKernel { dim3 grid_dim(num_x_blocks, batch_size); - auto stream = context.cuda_device_context().stream(); + auto stream = + context.template device_context().stream(); ConvShiftForward<<>>( x_data, y_data, x_width, y_width, y_half_width, batch_size, out_data); @@ -140,7 +142,7 @@ class ConvShiftKernel : public framework::OpKernel { }; template -class ConvShiftGradKernel +class ConvShiftGradKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext &context) const override { @@ -159,8 +161,9 @@ class ConvShiftGradKernel int y_width = Y->dims()[1]; int y_half_width = (y_width - 1) / 2; - auto &device_ctx = context.cuda_device_context(); - math::SetConstant zero; + auto &device_ctx = + context.template device_context(); + math::SetConstant zero; const int x_per_block = 256; int num_x_blocks = DivUp(x_width, x_per_block); @@ -186,8 +189,9 @@ class ConvShiftGradKernel } // namespace paddle namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL(conv_shift, - ops::ConvShiftKernel); -REGISTER_OP_GPU_KERNEL( +REGISTER_OP_CUDA_KERNEL( + conv_shift, + ops::ConvShiftKernel); +REGISTER_OP_CUDA_KERNEL( conv_shift_grad, - ops::ConvShiftGradKernel); + ops::ConvShiftGradKernel); diff --git a/paddle/operators/conv_shift_op.h b/paddle/operators/conv_shift_op.h index 5a160b0f16..1a70b38a0d 100644 --- a/paddle/operators/conv_shift_op.h +++ b/paddle/operators/conv_shift_op.h @@ -18,13 +18,13 @@ namespace paddle { namespace operators { -template +template class ConvShiftKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext &context) const override; }; -template +template class ConvShiftGradKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext &context) const override; diff --git a/paddle/operators/conv_transpose_cudnn_op.cc b/paddle/operators/conv_transpose_cudnn_op.cc index 0192178ce3..4cb6a2ccff 100644 --- a/paddle/operators/conv_transpose_cudnn_op.cc +++ b/paddle/operators/conv_transpose_cudnn_op.cc @@ -61,12 +61,13 @@ REGISTER_OP(conv2d_transpose_cudnn, ops::ConvTransposeOp, REGISTER_OP_CPU_KERNEL( conv2d_transpose_cudnn, - ops::GemmConvTransposeKernel, - ops::GemmConvTransposeKernel); + ops::GemmConvTransposeKernel, + ops::GemmConvTransposeKernel); REGISTER_OP_CPU_KERNEL( conv2d_transpose_cudnn_grad, - ops::GemmConvTransposeGradKernel, - ops::GemmConvTransposeGradKernel); + ops::GemmConvTransposeGradKernel, + ops::GemmConvTransposeGradKernel); REGISTER_OP(conv3d_transpose_cudnn, ops::ConvTransposeOp, ops::CudnnConv3DTransposeOpMaker, conv3d_transpose_cudnn_grad, @@ -74,9 +75,10 @@ REGISTER_OP(conv3d_transpose_cudnn, ops::ConvTransposeOp, REGISTER_OP_CPU_KERNEL( conv3d_transpose_cudnn, - ops::GemmConvTransposeKernel, - ops::GemmConvTransposeKernel); + ops::GemmConvTransposeKernel, + ops::GemmConvTransposeKernel); REGISTER_OP_CPU_KERNEL( conv3d_transpose_cudnn_grad, - ops::GemmConvTransposeGradKernel, - ops::GemmConvTransposeGradKernel); + ops::GemmConvTransposeGradKernel, + ops::GemmConvTransposeGradKernel); diff --git a/paddle/operators/conv_transpose_cudnn_op.cu.cc b/paddle/operators/conv_transpose_cudnn_op.cu.cc index 494904fe52..f0297f6c40 100644 --- a/paddle/operators/conv_transpose_cudnn_op.cu.cc +++ b/paddle/operators/conv_transpose_cudnn_op.cu.cc @@ -83,7 +83,8 @@ class CudnnConvTransposeOpKernel : public framework::OpKernel { } // ------------------- cudnn conv algorithm --------------------- cudnnConvolutionBwdDataAlgo_t algo; - auto handle = ctx.cuda_device_context().cudnn_handle(); + auto& dev_ctx = ctx.template device_context(); + auto handle = dev_ctx.cudnn_handle(); // Get the algorithm PADDLE_ENFORCE(platform::dynload::cudnnGetConvolutionBackwardDataAlgorithm( handle, cudnn_filter_desc, cudnn_input_desc, cudnn_conv_desc, @@ -165,7 +166,8 @@ class CudnnConvTransposeGradOpKernel : public framework::OpKernel { workspace_size_limit = user_workspace_size * 1024 * 1024; } - auto handle = ctx.cuda_device_context().cudnn_handle(); + auto& dev_ctx = ctx.template device_context(); + auto handle = dev_ctx.cudnn_handle(); if (input_grad) { // choose backward algorithm for data PADDLE_ENFORCE(platform::dynload::cudnnGetConvolutionForwardAlgorithm( @@ -234,16 +236,16 @@ class CudnnConvTransposeGradOpKernel : public framework::OpKernel { namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL(conv2d_transpose_cudnn, - ops::CudnnConvTransposeOpKernel, - ops::CudnnConvTransposeOpKernel); -REGISTER_OP_GPU_KERNEL(conv2d_transpose_cudnn_grad, - ops::CudnnConvTransposeGradOpKernel, - ops::CudnnConvTransposeGradOpKernel); - -REGISTER_OP_GPU_KERNEL(conv3d_transpose_cudnn, - ops::CudnnConvTransposeOpKernel, - ops::CudnnConvTransposeOpKernel); -REGISTER_OP_GPU_KERNEL(conv3d_transpose_cudnn_grad, - ops::CudnnConvTransposeGradOpKernel, - ops::CudnnConvTransposeGradOpKernel); +REGISTER_OP_CUDA_KERNEL(conv2d_transpose_cudnn, + ops::CudnnConvTransposeOpKernel, + ops::CudnnConvTransposeOpKernel); +REGISTER_OP_CUDA_KERNEL(conv2d_transpose_cudnn_grad, + ops::CudnnConvTransposeGradOpKernel, + ops::CudnnConvTransposeGradOpKernel); + +REGISTER_OP_CUDA_KERNEL(conv3d_transpose_cudnn, + ops::CudnnConvTransposeOpKernel, + ops::CudnnConvTransposeOpKernel); +REGISTER_OP_CUDA_KERNEL(conv3d_transpose_cudnn_grad, + ops::CudnnConvTransposeGradOpKernel, + ops::CudnnConvTransposeGradOpKernel); diff --git a/paddle/operators/conv_transpose_op.cc b/paddle/operators/conv_transpose_op.cc index 678b192dea..ca063e94bb 100644 --- a/paddle/operators/conv_transpose_op.cc +++ b/paddle/operators/conv_transpose_op.cc @@ -197,21 +197,23 @@ REGISTER_OP(conv2d_transpose, ops::ConvTransposeOp, ops::Conv2DTransposeOpMaker, REGISTER_OP_CPU_KERNEL( conv2d_transpose, - ops::GemmConvTransposeKernel, - ops::GemmConvTransposeKernel); + ops::GemmConvTransposeKernel, + ops::GemmConvTransposeKernel); REGISTER_OP_CPU_KERNEL( conv2d_transpose_grad, - ops::GemmConvTransposeGradKernel, - ops::GemmConvTransposeGradKernel); + ops::GemmConvTransposeGradKernel, + ops::GemmConvTransposeGradKernel); REGISTER_OP(conv3d_transpose, ops::ConvTransposeOp, ops::Conv3DTransposeOpMaker, conv3d_transpose_grad, ops::ConvTransposeOpGrad); REGISTER_OP_CPU_KERNEL( conv3d_transpose, - ops::GemmConvTransposeKernel, - ops::GemmConvTransposeKernel); + ops::GemmConvTransposeKernel, + ops::GemmConvTransposeKernel); REGISTER_OP_CPU_KERNEL( conv3d_transpose_grad, - ops::GemmConvTransposeGradKernel, - ops::GemmConvTransposeGradKernel); + ops::GemmConvTransposeGradKernel, + ops::GemmConvTransposeGradKernel); diff --git a/paddle/operators/conv_transpose_op.cu.cc b/paddle/operators/conv_transpose_op.cu.cc index 4165eb0c7b..b91ebd7922 100644 --- a/paddle/operators/conv_transpose_op.cu.cc +++ b/paddle/operators/conv_transpose_op.cu.cc @@ -16,20 +16,24 @@ namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL( +REGISTER_OP_CUDA_KERNEL( conv2d_transpose, - ops::GemmConvTransposeKernel, - ops::GemmConvTransposeKernel); -REGISTER_OP_GPU_KERNEL( + ops::GemmConvTransposeKernel, + ops::GemmConvTransposeKernel); +REGISTER_OP_CUDA_KERNEL( conv2d_transpose_grad, - ops::GemmConvTransposeGradKernel, - ops::GemmConvTransposeGradKernel); + ops::GemmConvTransposeGradKernel, + ops::GemmConvTransposeGradKernel); -REGISTER_OP_GPU_KERNEL( +REGISTER_OP_CUDA_KERNEL( conv3d_transpose, - ops::GemmConvTransposeKernel, - ops::GemmConvTransposeKernel); -REGISTER_OP_GPU_KERNEL( + ops::GemmConvTransposeKernel, + ops::GemmConvTransposeKernel); +REGISTER_OP_CUDA_KERNEL( conv3d_transpose_grad, - ops::GemmConvTransposeGradKernel, - ops::GemmConvTransposeGradKernel); + ops::GemmConvTransposeGradKernel, + ops::GemmConvTransposeGradKernel); diff --git a/paddle/operators/conv_transpose_op.h b/paddle/operators/conv_transpose_op.h index 1cacb770e6..80600b5361 100644 --- a/paddle/operators/conv_transpose_op.h +++ b/paddle/operators/conv_transpose_op.h @@ -52,7 +52,7 @@ class ConvTransposeOpGrad : public framework::OperatorWithKernel { void InferShape(framework::InferShapeContext* ctx) const override; }; -template +template class GemmConvTransposeKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { @@ -109,11 +109,12 @@ class GemmConvTransposeKernel : public framework::OpKernel { filter.Resize(filter_matrix_shape); output->mutable_data(context.GetPlace()); - math::SetConstant set_zero; - set_zero(context.device_context(), output, static_cast(0)); + math::SetConstant set_zero; + auto& dev_ctx = context.template device_context(); + set_zero(dev_ctx, output, static_cast(0)); - math::Col2ImFunctor col2im; - math::Col2VolFunctor col2vol; + math::Col2ImFunctor col2im; + math::Col2VolFunctor col2vol; std::vector dilations({1, 1, 1}); // convolution transpose: gemm + col2im or col2vol (similar to conv-backward @@ -127,29 +128,27 @@ class GemmConvTransposeKernel : public framework::OpKernel { // col_matrix = filter * input_batch // of shape (c * k_h * k_w, h * w) or (c * k_d * k_h * k_w, d * h * w) - math::matmul(context.device_context(), filter, true, - input_batch, false, static_cast(1.0), - &col_matrix, static_cast(0.0)); + math::matmul(dev_ctx, filter, true, input_batch, false, + static_cast(1.0), &col_matrix, + static_cast(0.0)); if (data_dim == 2U) { // col2im: col_matrix -> dy // from (c * k_h * k_w, h * w) to (c, o_h, o_w) - col2im(context.device_context(), col, - std::vector{dilations[0], dilations[1]}, strides, - std::vector{paddings[0], paddings[1], paddings[0], - paddings[1]}, + col2im(dev_ctx, col, std::vector{dilations[0], dilations[1]}, + strides, std::vector{paddings[0], paddings[1], paddings[0], + paddings[1]}, &output_batch); } else if (data_dim == 3U) { // col2vol: col_matrix -> dy // from (c * k_d * k_h * k_w, d * h * w) to (c, o_d, o_h, o_w) - col2vol(context.device_context(), col, dilations, strides, paddings, - &output_batch); + col2vol(dev_ctx, col, dilations, strides, paddings, &output_batch); } } } }; -template +template class GemmConvTransposeGradKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { @@ -206,6 +205,7 @@ class GemmConvTransposeGradKernel : public framework::OpKernel { // convolution transpose grad on input: // im2col + gemm (similar to conv-forward) // input need to compute gradient + auto& dev_ctx = context.template device_context(); if (input_grad || filter_grad) { Tensor col; col.mutable_data(col_shape, context.GetPlace()); @@ -217,19 +217,19 @@ class GemmConvTransposeGradKernel : public framework::OpKernel { col_matrix.Resize(col_matrix_shape); Tensor filter_grad_; - math::SetConstant set_zero; + math::SetConstant set_zero; - math::Im2ColFunctor im2col; - math::Vol2ColFunctor vol2col; + math::Im2ColFunctor im2col; + math::Vol2ColFunctor vol2col; std::vector dilations({1, 1, 1}); if (input_grad) { input_grad->mutable_data(context.GetPlace()); - set_zero(context.device_context(), input_grad, static_cast(0)); + set_zero(dev_ctx, input_grad, static_cast(0)); } if (filter_grad) { // filter size (m, c, k_h, k_w) filter_grad->mutable_data(context.GetPlace()); - set_zero(context.device_context(), filter_grad, static_cast(0)); + set_zero(dev_ctx, filter_grad, static_cast(0)); filter_grad_ = *filter_grad; filter_grad_.Resize(filter_matrix_shape); } @@ -242,7 +242,7 @@ class GemmConvTransposeGradKernel : public framework::OpKernel { if (data_dim == 2U) { // im2col: dy -> col matrix // from (c, o_h, o_w) to (c * k_h * k_w, h * w) - im2col(context.device_context(), output_grad_batch, + im2col(dev_ctx, output_grad_batch, std::vector{dilations[0], dilations[1]}, strides, std::vector{paddings[0], paddings[1], paddings[0], paddings[1]}, @@ -250,8 +250,8 @@ class GemmConvTransposeGradKernel : public framework::OpKernel { } else if (data_dim == 3U) { // vol2col: dy -> col_matrix // from (c, o_d, o_h, o_w) to (c * k_d * k_h * k_w, d * h * w) - vol2col(context.device_context(), output_grad_batch, dilations, - strides, paddings, &col); + vol2col(dev_ctx, output_grad_batch, dilations, strides, paddings, + &col); } if (input_grad) { @@ -263,9 +263,9 @@ class GemmConvTransposeGradKernel : public framework::OpKernel { // or // (m, c * k_d * k_h * k_w) * (c * k_d * k_h * k_w, d * h * w) -> (m, // d, h, w) - math::matmul(context.device_context(), filter, false, - col_matrix, false, static_cast(1.0), - &input_grad_batch, static_cast(0.0)); + math::matmul( + dev_ctx, filter, false, col_matrix, false, static_cast(1.0), + &input_grad_batch, static_cast(0.0)); } if (filter_grad) { // input batch @@ -275,9 +275,9 @@ class GemmConvTransposeGradKernel : public framework::OpKernel { // or // (m, d * h * w) * (d * h * w, c * k_d * k_h * k_w) -> (m, c * k_d * // k_h * k_w) - math::matmul(context.device_context(), in_batch, false, - col_matrix, true, static_cast(1.0), - &filter_grad_, static_cast(1.0)); + math::matmul(dev_ctx, in_batch, false, col_matrix, + true, static_cast(1.0), + &filter_grad_, static_cast(1.0)); } } } diff --git a/paddle/operators/cos_sim_op.cc b/paddle/operators/cos_sim_op.cc index 312264ccd4..440c427cba 100644 --- a/paddle/operators/cos_sim_op.cc +++ b/paddle/operators/cos_sim_op.cc @@ -155,7 +155,8 @@ class CosSimOpGrad : public framework::OperatorWithKernel { namespace ops = paddle::operators; REGISTER_OP(cos_sim, ops::CosSimOp, ops::CosSimOpMaker, cos_sim_grad, ops::CosSimOpGrad); -REGISTER_OP_CPU_KERNEL(cos_sim, - ops::CosSimKernel); REGISTER_OP_CPU_KERNEL( - cos_sim_grad, ops::CosSimGradKernel); + cos_sim, ops::CosSimKernel); +REGISTER_OP_CPU_KERNEL( + cos_sim_grad, + ops::CosSimGradKernel); diff --git a/paddle/operators/cos_sim_op.cu b/paddle/operators/cos_sim_op.cu index 0cb8fd26de..1cb01f5945 100644 --- a/paddle/operators/cos_sim_op.cu +++ b/paddle/operators/cos_sim_op.cu @@ -16,7 +16,8 @@ #include "paddle/operators/cos_sim_op.h" namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL(cos_sim, - ops::CosSimKernel); -REGISTER_OP_GPU_KERNEL( - cos_sim_grad, ops::CosSimGradKernel); +REGISTER_OP_CUDA_KERNEL( + cos_sim, ops::CosSimKernel); +REGISTER_OP_CUDA_KERNEL( + cos_sim_grad, + ops::CosSimGradKernel); diff --git a/paddle/operators/cos_sim_op.h b/paddle/operators/cos_sim_op.h index 62a4e484ec..fecb5a79b2 100644 --- a/paddle/operators/cos_sim_op.h +++ b/paddle/operators/cos_sim_op.h @@ -27,7 +27,7 @@ template using EigenVector = framework::EigenVector; -template +template class CosSimKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { @@ -51,7 +51,8 @@ class CosSimKernel : public framework::OpKernel { auto y_norm = EigenVector::Flatten(*out_y_norm); // compute - auto place = context.GetEigenDevice(); + auto& place = + *context.template device_context().eigen_device(); auto row_along = Eigen::array({{1}}); x_norm.device(place) = x.square().sum(row_along).sqrt(); y_norm.device(place) = y.square().sum(row_along).sqrt(); @@ -66,7 +67,7 @@ class CosSimKernel : public framework::OpKernel { } }; -template +template class CosSimGradKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { @@ -96,7 +97,8 @@ class CosSimGradKernel : public framework::OpKernel { auto z_bcast = z.broadcast(bcast_cols); auto dz_bcast = dz.broadcast(bcast_cols); auto x_snorm_bcast = x_norm.square().eval().broadcast(bcast_cols); - auto place = context.GetEigenDevice(); + auto& place = + *context.template device_context().eigen_device(); if (rows_x == rows_y) { auto y_snorm_bcast = y_norm.square().eval().broadcast(bcast_cols); auto norm_prod_bcast = (x_norm * y_norm).eval().broadcast(bcast_cols); diff --git a/paddle/operators/crf_decoding_op.cc b/paddle/operators/crf_decoding_op.cc index 291b23ed1b..1ce189fa6e 100644 --- a/paddle/operators/crf_decoding_op.cc +++ b/paddle/operators/crf_decoding_op.cc @@ -135,5 +135,6 @@ namespace ops = paddle::operators; REGISTER_OP_WITHOUT_GRADIENT(crf_decoding, ops::CRFDecodingOp, ops::CRFDecodingOpMaker); REGISTER_OP_CPU_KERNEL( - crf_decoding, ops::CRFDecodingOpKernel, - ops::CRFDecodingOpKernel); + crf_decoding, + ops::CRFDecodingOpKernel, + ops::CRFDecodingOpKernel); diff --git a/paddle/operators/crf_decoding_op.h b/paddle/operators/crf_decoding_op.h index 57b5e21b3a..f6827b7b11 100644 --- a/paddle/operators/crf_decoding_op.h +++ b/paddle/operators/crf_decoding_op.h @@ -24,7 +24,7 @@ using framework::LoDTensor; using framework::LoD; using framework::Tensor; -template +template class CRFDecodingOpKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& ctx) const override { @@ -44,8 +44,8 @@ class CRFDecodingOpKernel : public framework::OpKernel { const size_t seq_num = lod[level].size() - 1; int64_t* path = decoded_path->mutable_data(platform::CPUPlace()); - math::SetConstant()(ctx.device_context(), - decoded_path, 0); + math::SetConstant()( + ctx.template device_context(), decoded_path, 0); for (size_t i = 0; i < seq_num; ++i) { int start_pos = static_cast(lod[level][i]); int end_pos = static_cast(lod[level][i + 1]); diff --git a/paddle/operators/crop_op.cc b/paddle/operators/crop_op.cc index 6752eb8c1c..7c2a0ac7a7 100644 --- a/paddle/operators/crop_op.cc +++ b/paddle/operators/crop_op.cc @@ -133,5 +133,5 @@ class CropOpGrad : public framework::OperatorWithKernel { namespace ops = paddle::operators; REGISTER_OP(crop, ops::CropOp, ops::CropOpMaker, crop_grad, ops::CropOpGrad); REGISTER_OP_CPU_KERNEL(crop, ops::CropKernel); -REGISTER_OP_CPU_KERNEL(crop_grad, - ops::CropGradKernel); +REGISTER_OP_CPU_KERNEL( + crop_grad, ops::CropGradKernel); diff --git a/paddle/operators/crop_op.cu b/paddle/operators/crop_op.cu index f8ee18a1d6..90fd83ca10 100644 --- a/paddle/operators/crop_op.cu +++ b/paddle/operators/crop_op.cu @@ -16,6 +16,6 @@ #include "paddle/operators/crop_op.h" namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL(crop, ops::CropKernel); -REGISTER_OP_GPU_KERNEL(crop_grad, - ops::CropGradKernel); +REGISTER_OP_CUDA_KERNEL(crop, ops::CropKernel); +REGISTER_OP_CUDA_KERNEL( + crop_grad, ops::CropGradKernel); diff --git a/paddle/operators/crop_op.h b/paddle/operators/crop_op.h index 2e72583d68..d531a19c78 100644 --- a/paddle/operators/crop_op.h +++ b/paddle/operators/crop_op.h @@ -49,7 +49,7 @@ class CropKernel : public framework::OpKernel { } }; -template +template void CropGradFunction(const framework::ExecutionContext& context) { auto* d_x = context.Output(framework::GradVarName("X")); if (d_x != nullptr) { @@ -63,12 +63,13 @@ void CropGradFunction(const framework::ExecutionContext& context) { } auto d_x_tensor = EigenTensor::From(*d_x); auto d_out_tensor = EigenTensor::From(*d_out); - d_x_tensor.device(context.GetEigenDevice()) = + d_x_tensor.device( + *context.template device_context().eigen_device()) = d_out_tensor.pad(paddings, 0); } } -template +template class CropGradKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { @@ -76,22 +77,22 @@ class CropGradKernel : public framework::OpKernel { context.Input(framework::GradVarName("Out"))->dims().size(); switch (rank) { case 1: - CropGradFunction(context); + CropGradFunction(context); break; case 2: - CropGradFunction(context); + CropGradFunction(context); break; case 3: - CropGradFunction(context); + CropGradFunction(context); break; case 4: - CropGradFunction(context); + CropGradFunction(context); break; case 5: - CropGradFunction(context); + CropGradFunction(context); break; case 6: - CropGradFunction(context); + CropGradFunction(context); break; default: PADDLE_THROW( diff --git a/paddle/operators/cross_entropy_op.cu b/paddle/operators/cross_entropy_op.cu index 6212e39dfd..0546964588 100644 --- a/paddle/operators/cross_entropy_op.cu +++ b/paddle/operators/cross_entropy_op.cu @@ -53,8 +53,9 @@ class CrossEntropyOpCUDAKernel : public framework::OpKernel { Tensor* y = ctx.Output("Y"); y->mutable_data(ctx.GetPlace()); - math::CrossEntropyFunctor()( - ctx.device_context(), y, x, label, ctx.Attr("soft_label")); + math::CrossEntropyFunctor()( + ctx.template device_context(), y, x, label, + ctx.Attr("soft_label")); } }; @@ -80,15 +81,17 @@ class CrossEntropyGradientOpCUDAKernel : public framework::OpKernel { int block = 512; int grid = (batch_size * class_num + block - 1) / block; - auto stream = ctx.cuda_device_context().stream(); + + auto& dev_ctx = ctx.template device_context(); + auto stream = dev_ctx.stream(); if (ctx.Attr("soft_label")) { auto* label_data = label->data(); SoftCrossEntropyGradientKernel<<>>( dx_data, dy_data, x_data, label_data, batch_size, class_num); } else { - math::SetConstant functor; - functor(ctx.device_context(), dx, 0); + math::SetConstant functor; + functor(dev_ctx, dx, 0); auto* label_data = label->data(); grid = (batch_size + block - 1) / block; CrossEntropyGradientKernel<<>>( @@ -101,8 +104,8 @@ class CrossEntropyGradientOpCUDAKernel : public framework::OpKernel { } // namespace paddle namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL(cross_entropy, ops::CrossEntropyOpCUDAKernel, - ops::CrossEntropyOpCUDAKernel); -REGISTER_OP_GPU_KERNEL(cross_entropy_grad, - ops::CrossEntropyGradientOpCUDAKernel, - ops::CrossEntropyGradientOpCUDAKernel); +REGISTER_OP_CUDA_KERNEL(cross_entropy, ops::CrossEntropyOpCUDAKernel, + ops::CrossEntropyOpCUDAKernel); +REGISTER_OP_CUDA_KERNEL(cross_entropy_grad, + ops::CrossEntropyGradientOpCUDAKernel, + ops::CrossEntropyGradientOpCUDAKernel); diff --git a/paddle/operators/cross_entropy_op.h b/paddle/operators/cross_entropy_op.h index 37db0a930a..5623d2ded1 100644 --- a/paddle/operators/cross_entropy_op.h +++ b/paddle/operators/cross_entropy_op.h @@ -37,8 +37,9 @@ class CrossEntropyOpKernel : public framework::OpKernel { Tensor* y = ctx.Output("Y"); y->mutable_data(ctx.GetPlace()); - math::CrossEntropyFunctor()( - ctx.device_context(), y, x, labels, ctx.Attr("soft_label")); + math::CrossEntropyFunctor()( + ctx.template device_context(), y, x, labels, + ctx.Attr("soft_label")); } }; @@ -61,7 +62,8 @@ class CrossEntropyGradientOpKernel : public framework::OpKernel { auto lbl_mat = EigenMatrix::From(*label); auto dx_mat = EigenMatrix::From(*dx); - dx_mat.device(ctx.GetEigenDevice()) = + dx_mat.device(*ctx.template device_context() + .eigen_device()) = -(lbl_mat * dy_mat.broadcast(Eigen::DSizes(1, class_num)) / x_mat); } else { @@ -70,8 +72,8 @@ class CrossEntropyGradientOpKernel : public framework::OpKernel { const T* x_data = x->data(); const int64_t* label_data = label->data(); - math::SetConstant functor; - functor(ctx.device_context(), dx, 0); + math::SetConstant functor; + functor(ctx.template device_context(), dx, 0); for (int64_t i = 0; i < batch_size; ++i) { PADDLE_ASSERT(label_data[i] >= 0 || label_data[i] < class_num); diff --git a/paddle/operators/decayed_adagrad_op.cc b/paddle/operators/decayed_adagrad_op.cc index 640b4e7744..fd29c7270b 100644 --- a/paddle/operators/decayed_adagrad_op.cc +++ b/paddle/operators/decayed_adagrad_op.cc @@ -99,4 +99,4 @@ REGISTER_OP_WITHOUT_GRADIENT(decayed_adagrad, ops::DecayedAdagradOp, ops::DecayedAdagradOpMaker); REGISTER_OP_CPU_KERNEL( decayed_adagrad, - ops::DecayedAdagradOpKernel); + ops::DecayedAdagradOpKernel); diff --git a/paddle/operators/decayed_adagrad_op.cu b/paddle/operators/decayed_adagrad_op.cu index 6fce77fe4e..282b90f275 100644 --- a/paddle/operators/decayed_adagrad_op.cu +++ b/paddle/operators/decayed_adagrad_op.cu @@ -16,6 +16,6 @@ #include "paddle/operators/decayed_adagrad_op.h" namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL( +REGISTER_OP_CUDA_KERNEL( decayed_adagrad, - ops::DecayedAdagradOpKernel); + ops::DecayedAdagradOpKernel); diff --git a/paddle/operators/decayed_adagrad_op.h b/paddle/operators/decayed_adagrad_op.h index 0fe0fc5acd..fec9705cfc 100644 --- a/paddle/operators/decayed_adagrad_op.h +++ b/paddle/operators/decayed_adagrad_op.h @@ -19,7 +19,7 @@ limitations under the License. */ namespace paddle { namespace operators { -template +template class DecayedAdagradOpKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& ctx) const override { @@ -43,7 +43,7 @@ class DecayedAdagradOpKernel : public framework::OpKernel { auto param_out = framework::EigenVector::Flatten(*param_out_tensor); auto moment_out = framework::EigenVector::Flatten(*moment_out_tensor); - auto place = ctx.GetEigenDevice(); + auto& place = *ctx.template device_context().eigen_device(); moment_out.device(place) = decay * moment + (1 - decay) * grad * grad; Eigen::DSizes m_dsize(moment_out_tensor->numel()); diff --git a/paddle/operators/dropout_op.cc b/paddle/operators/dropout_op.cc index 932c0bf8fb..acd526ae80 100644 --- a/paddle/operators/dropout_op.cc +++ b/paddle/operators/dropout_op.cc @@ -100,6 +100,8 @@ namespace ops = paddle::operators; REGISTER_OP(dropout, ops::DropoutOp, ops::DropoutOpMaker, dropout_grad, ops::DropoutOpGrad); REGISTER_OP_CPU_KERNEL( - dropout, ops::CPUDropoutKernel); + dropout, + ops::CPUDropoutKernel); REGISTER_OP_CPU_KERNEL( - dropout_grad, ops::DropoutGradKernel); + dropout_grad, + ops::DropoutGradKernel); diff --git a/paddle/operators/dropout_op.cu b/paddle/operators/dropout_op.cu index db3578b9bf..10c670751d 100644 --- a/paddle/operators/dropout_op.cu +++ b/paddle/operators/dropout_op.cu @@ -58,7 +58,7 @@ class GPUDropoutKernel : public framework::OpKernel { auto X = EigenMatrix::Reshape(*x, 1); auto Y = EigenMatrix::Reshape(*y, 1); - auto place = context.GetEigenDevice(); + auto& place = *context.template device_context().eigen_device(); if (!context.Attr("is_test")) { auto* mask = context.Output("Mask"); auto* mask_data = mask->mutable_data(context.GetPlace()); @@ -80,7 +80,9 @@ class GPUDropoutKernel : public framework::OpKernel { } // namespace paddle namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL( - dropout, ops::GPUDropoutKernel); -REGISTER_OP_GPU_KERNEL( - dropout_grad, ops::DropoutGradKernel); +REGISTER_OP_CUDA_KERNEL( + dropout, + ops::GPUDropoutKernel); +REGISTER_OP_CUDA_KERNEL( + dropout_grad, + ops::DropoutGradKernel); diff --git a/paddle/operators/dropout_op.h b/paddle/operators/dropout_op.h index d9a130fdc0..84ad39f0bb 100644 --- a/paddle/operators/dropout_op.h +++ b/paddle/operators/dropout_op.h @@ -25,7 +25,7 @@ template using EigenMatrix = framework::EigenMatrix; -template +template class CPUDropoutKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { @@ -55,13 +55,14 @@ class CPUDropoutKernel : public framework::OpKernel { } else { auto X = EigenMatrix::Reshape(*x, 1); auto Y = EigenMatrix::Reshape(*y, 1); - auto place = context.GetEigenDevice(); + auto& place = + *context.template device_context().eigen_device(); Y.device(place) = X * dropout_prob; } } }; -template +template class DropoutGradKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { @@ -77,7 +78,8 @@ class DropoutGradKernel : public framework::OpKernel { auto dX = EigenMatrix::Reshape(*grad_x, 1); auto dY = EigenMatrix::Reshape(*grad_y, 1); - auto place = context.GetEigenDevice(); + auto& place = + *context.template device_context().eigen_device(); dX.device(place) = dY * M; } }; diff --git a/paddle/operators/elementwise_add_op.cc b/paddle/operators/elementwise_add_op.cc index 432b9ba6f7..a62eeeeb95 100644 --- a/paddle/operators/elementwise_add_op.cc +++ b/paddle/operators/elementwise_add_op.cc @@ -34,13 +34,13 @@ REGISTER_OP(elementwise_add, ops::ElementwiseOp, ops::ElementwiseAddOpMaker, elementwise_add_grad, ops::ElementwiseOpGrad); REGISTER_OP_CPU_KERNEL( elementwise_add, - ops::ElementwiseAddKernel, - ops::ElementwiseAddKernel, - ops::ElementwiseAddKernel, - ops::ElementwiseAddKernel); + ops::ElementwiseAddKernel, + ops::ElementwiseAddKernel, + ops::ElementwiseAddKernel, + ops::ElementwiseAddKernel); REGISTER_OP_CPU_KERNEL( elementwise_add_grad, - ops::ElementwiseAddGradKernel, - ops::ElementwiseAddGradKernel, - ops::ElementwiseAddGradKernel, - ops::ElementwiseAddGradKernel); + ops::ElementwiseAddGradKernel, + ops::ElementwiseAddGradKernel, + ops::ElementwiseAddGradKernel, + ops::ElementwiseAddGradKernel); diff --git a/paddle/operators/elementwise_add_op.cu b/paddle/operators/elementwise_add_op.cu index 7591428ac7..78642bb424 100644 --- a/paddle/operators/elementwise_add_op.cu +++ b/paddle/operators/elementwise_add_op.cu @@ -17,15 +17,16 @@ namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL( +REGISTER_OP_CUDA_KERNEL( elementwise_add, - ops::ElementwiseAddKernel, - ops::ElementwiseAddKernel, - ops::ElementwiseAddKernel, - ops::ElementwiseAddKernel); -REGISTER_OP_GPU_KERNEL( + ops::ElementwiseAddKernel, + ops::ElementwiseAddKernel, + ops::ElementwiseAddKernel, + ops::ElementwiseAddKernel); +REGISTER_OP_CUDA_KERNEL( elementwise_add_grad, - ops::ElementwiseAddGradKernel, - ops::ElementwiseAddGradKernel, - ops::ElementwiseAddGradKernel, - ops::ElementwiseAddGradKernel); + ops::ElementwiseAddGradKernel, + ops::ElementwiseAddGradKernel, + ops::ElementwiseAddGradKernel, + ops::ElementwiseAddGradKernel); diff --git a/paddle/operators/elementwise_add_op.h b/paddle/operators/elementwise_add_op.h index 921dc5f6a6..069bdaf0ab 100644 --- a/paddle/operators/elementwise_add_op.h +++ b/paddle/operators/elementwise_add_op.h @@ -24,7 +24,7 @@ struct AddFunctor { inline HOSTDEVICE T operator()(T a, T b) const { return a + b; } }; -template +template class ElementwiseAddKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& ctx) const override { @@ -34,8 +34,8 @@ class ElementwiseAddKernel : public framework::OpKernel { auto* y = ctx.Input("Y"); auto* z = ctx.Output("Out"); z->mutable_data(ctx.GetPlace()); - TransformFunctor, T, Place> functor( - x, y, z, ctx.device_context(), AddFunctor()); + TransformFunctor, T, DeviceContext> functor( + x, y, z, ctx.template device_context(), AddFunctor()); auto x_dims = x->dims(); auto y_dims = y->dims(); @@ -137,11 +137,11 @@ struct ElementwiseAddBroadCast2GradFunctor { } }; -template +template class ElementwiseAddGradKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& ctx) const override { - ElementwiseGradCompute, + ElementwiseGradCompute, ElementwiseAddOneGradFunctor, ElementwiseAddBroadCastGradFunctor, ElementwiseAddBroadCast2GradFunctor>(ctx); diff --git a/paddle/operators/elementwise_div_op.cc b/paddle/operators/elementwise_div_op.cc index 7a325199bd..1c3e9e70ee 100644 --- a/paddle/operators/elementwise_div_op.cc +++ b/paddle/operators/elementwise_div_op.cc @@ -35,13 +35,13 @@ REGISTER_OP(elementwise_div, ops::ElementwiseOp, ops::ElementwiseDivOpMaker, elementwise_div_grad, ops::ElementwiseOpGrad); REGISTER_OP_CPU_KERNEL( elementwise_div, - ops::ElementwiseDivKernel, - ops::ElementwiseDivKernel, - ops::ElementwiseDivKernel, - ops::ElementwiseDivKernel); + ops::ElementwiseDivKernel, + ops::ElementwiseDivKernel, + ops::ElementwiseDivKernel, + ops::ElementwiseDivKernel); REGISTER_OP_CPU_KERNEL( elementwise_div_grad, - ops::ElementwiseDivGradKernel, - ops::ElementwiseDivGradKernel, - ops::ElementwiseDivGradKernel, - ops::ElementwiseDivGradKernel); + ops::ElementwiseDivGradKernel, + ops::ElementwiseDivGradKernel, + ops::ElementwiseDivGradKernel, + ops::ElementwiseDivGradKernel); diff --git a/paddle/operators/elementwise_div_op.cu b/paddle/operators/elementwise_div_op.cu index de4d0c3344..502c528936 100644 --- a/paddle/operators/elementwise_div_op.cu +++ b/paddle/operators/elementwise_div_op.cu @@ -17,15 +17,16 @@ namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL( +REGISTER_OP_CUDA_KERNEL( elementwise_div, - ops::ElementwiseDivKernel, - ops::ElementwiseDivKernel, - ops::ElementwiseDivKernel, - ops::ElementwiseDivKernel); -REGISTER_OP_GPU_KERNEL( + ops::ElementwiseDivKernel, + ops::ElementwiseDivKernel, + ops::ElementwiseDivKernel, + ops::ElementwiseDivKernel); +REGISTER_OP_CUDA_KERNEL( elementwise_div_grad, - ops::ElementwiseDivGradKernel, - ops::ElementwiseDivGradKernel, - ops::ElementwiseDivGradKernel, - ops::ElementwiseDivGradKernel); + ops::ElementwiseDivGradKernel, + ops::ElementwiseDivGradKernel, + ops::ElementwiseDivGradKernel, + ops::ElementwiseDivGradKernel); diff --git a/paddle/operators/elementwise_div_op.h b/paddle/operators/elementwise_div_op.h index 8946ff3d25..d91313db42 100644 --- a/paddle/operators/elementwise_div_op.h +++ b/paddle/operators/elementwise_div_op.h @@ -19,11 +19,11 @@ namespace paddle { namespace operators { -template +template class ElementwiseDivKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& ctx) const override { - ElementwiseCompute(ctx); + ElementwiseCompute(ctx); } }; @@ -102,11 +102,11 @@ struct ElementwiseDivBroadCast2GradFunctor { } }; -template +template class ElementwiseDivGradKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& ctx) const override { - ElementwiseGradCompute, + ElementwiseGradCompute, ElementwiseDivGradFunctor, ElementwiseDivBroadCastGradFunctor, ElementwiseDivBroadCast2GradFunctor>(ctx); diff --git a/paddle/operators/elementwise_mul_op.cc b/paddle/operators/elementwise_mul_op.cc index 8851267a52..aadb95cbe3 100644 --- a/paddle/operators/elementwise_mul_op.cc +++ b/paddle/operators/elementwise_mul_op.cc @@ -36,13 +36,13 @@ REGISTER_OP(elementwise_mul, ops::ElementwiseOp, ops::ElementwiseMulOpMaker, elementwise_mul_grad, ops::ElementwiseOpGrad); REGISTER_OP_CPU_KERNEL( elementwise_mul, - ops::ElementwiseMulKernel, - ops::ElementwiseMulKernel, - ops::ElementwiseMulKernel, - ops::ElementwiseMulKernel); + ops::ElementwiseMulKernel, + ops::ElementwiseMulKernel, + ops::ElementwiseMulKernel, + ops::ElementwiseMulKernel); REGISTER_OP_CPU_KERNEL( elementwise_mul_grad, - ops::ElementwiseMulGradKernel, - ops::ElementwiseMulGradKernel, - ops::ElementwiseMulGradKernel, - ops::ElementwiseMulGradKernel); + ops::ElementwiseMulGradKernel, + ops::ElementwiseMulGradKernel, + ops::ElementwiseMulGradKernel, + ops::ElementwiseMulGradKernel); diff --git a/paddle/operators/elementwise_mul_op.cu b/paddle/operators/elementwise_mul_op.cu index b0dfdee1cc..089451b3e1 100644 --- a/paddle/operators/elementwise_mul_op.cu +++ b/paddle/operators/elementwise_mul_op.cu @@ -17,15 +17,16 @@ namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL( +REGISTER_OP_CUDA_KERNEL( elementwise_mul, - ops::ElementwiseMulKernel, - ops::ElementwiseMulKernel, - ops::ElementwiseMulKernel, - ops::ElementwiseMulKernel); -REGISTER_OP_GPU_KERNEL( + ops::ElementwiseMulKernel, + ops::ElementwiseMulKernel, + ops::ElementwiseMulKernel, + ops::ElementwiseMulKernel); +REGISTER_OP_CUDA_KERNEL( elementwise_mul_grad, - ops::ElementwiseMulGradKernel, - ops::ElementwiseMulGradKernel, - ops::ElementwiseMulGradKernel, - ops::ElementwiseMulGradKernel); + ops::ElementwiseMulGradKernel, + ops::ElementwiseMulGradKernel, + ops::ElementwiseMulGradKernel, + ops::ElementwiseMulGradKernel); diff --git a/paddle/operators/elementwise_mul_op.h b/paddle/operators/elementwise_mul_op.h index 4469b07eaa..16fa5ec4b3 100644 --- a/paddle/operators/elementwise_mul_op.h +++ b/paddle/operators/elementwise_mul_op.h @@ -18,11 +18,11 @@ namespace paddle { namespace operators { -template +template class ElementwiseMulKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& ctx) const override { - ElementwiseCompute(ctx); + ElementwiseCompute(ctx); } }; @@ -101,11 +101,11 @@ struct ElementwiseMulBroadCast2GradFunctor { } }; -template +template class ElementwiseMulGradKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& ctx) const override { - ElementwiseGradCompute, + ElementwiseGradCompute, ElementwiseMulGradFunctor, ElementwiseMulBroadCastGradFunctor, ElementwiseMulBroadCast2GradFunctor>(ctx); diff --git a/paddle/operators/elementwise_op_function.h b/paddle/operators/elementwise_op_function.h index ca3542e783..7ebfc7df8c 100644 --- a/paddle/operators/elementwise_op_function.h +++ b/paddle/operators/elementwise_op_function.h @@ -59,17 +59,17 @@ inline void get_mid_dims(const framework::DDim& x_dims, } } -template +template class RowwiseTransformIterator; -template +template class MidWiseTransformIterator; template -class RowwiseTransformIterator { +class RowwiseTransformIterator { public: RowwiseTransformIterator(const T* ptr, int n) : ptr_(ptr), i_(0), n_(n) {} - RowwiseTransformIterator& operator++() { + RowwiseTransformIterator& operator++() { ++i_; if (UNLIKELY(i_ == n_)) { i_ = 0; @@ -77,13 +77,13 @@ class RowwiseTransformIterator { return *this; } - bool operator==( - const RowwiseTransformIterator& rhs) const { + bool operator==(const RowwiseTransformIterator& + rhs) const { return (ptr_ + i_) == &(*rhs); } - bool operator!=( - const RowwiseTransformIterator& rhs) const { + bool operator!=(const RowwiseTransformIterator& + rhs) const { return (ptr_ + i_) != &(*rhs); } @@ -96,12 +96,12 @@ class RowwiseTransformIterator { }; template -class MidWiseTransformIterator { +class MidWiseTransformIterator { public: MidWiseTransformIterator(const T* ptr, int n, int post) : ptr_(ptr), i_(0), j_(0), n_(n), post_(post) {} - MidWiseTransformIterator& operator++() { + MidWiseTransformIterator& operator++() { ++j_; i_ = j_ / post_; if (UNLIKELY(i_ == n_)) { @@ -111,13 +111,13 @@ class MidWiseTransformIterator { return *this; } - bool operator==( - const MidWiseTransformIterator& rhs) const { + bool operator==(const MidWiseTransformIterator& + rhs) const { return (ptr_ + i_) == &(*rhs); } - bool operator!=( - const MidWiseTransformIterator& rhs) const { + bool operator!=(const MidWiseTransformIterator& + rhs) const { return (ptr_ + i_) != &(*rhs); } @@ -133,12 +133,12 @@ class MidWiseTransformIterator { #ifdef __NVCC__ template -class RowwiseTransformIterator +class RowwiseTransformIterator : public thrust::iterator_adaptor< - RowwiseTransformIterator, const T*> { + RowwiseTransformIterator, const T*> { public: typedef thrust::iterator_adaptor< - RowwiseTransformIterator, const T*> + RowwiseTransformIterator, const T*> super_t; HOSTDEVICE RowwiseTransformIterator(const T* x, int n) : super_t(x), begin_(x), n_(n){}; @@ -153,12 +153,12 @@ class RowwiseTransformIterator }; template -class MidWiseTransformIterator +class MidWiseTransformIterator : public thrust::iterator_adaptor< - MidWiseTransformIterator, const T*> { + MidWiseTransformIterator, const T*> { public: typedef thrust::iterator_adaptor< - MidWiseTransformIterator, const T*> + MidWiseTransformIterator, const T*> super_t; HOSTDEVICE MidWiseTransformIterator(const T* x, int n, int post) : super_t(x), begin_(x), n_(n), post_(post){}; @@ -174,12 +174,11 @@ class MidWiseTransformIterator }; #endif -template +template class TransformFunctor { public: TransformFunctor(const framework::Tensor* x, const framework::Tensor* y, - framework::Tensor* z, const platform::DeviceContext& ctx, - Functor func) + framework::Tensor* z, const DeviceContext& ctx, Functor func) : x_(x->data()), y_(y->data()), z_(z->mutable_data(ctx.GetPlace())), @@ -188,20 +187,20 @@ class TransformFunctor { func_(func) {} inline void Run() const { - platform::Transform trans; + platform::Transform trans; trans(ctx_, x_, x_ + nx_, y_, z_, func_); } inline void RunRowWise(int n, int pre) const { - platform::Transform trans; - trans(ctx_, x_, x_ + nx_, RowwiseTransformIterator(y_, n), z_, - func_); + platform::Transform trans; + trans(ctx_, x_, x_ + nx_, RowwiseTransformIterator(y_, n), + z_, func_); } inline void RunMidWise(int n, int pre, int post) const { - platform::Transform trans; - trans(ctx_, x_, x_ + nx_, MidWiseTransformIterator(y_, n, post), - z_, func_); + platform::Transform trans; + trans(ctx_, x_, x_ + nx_, + MidWiseTransformIterator(y_, n, post), z_, func_); } private: @@ -209,22 +208,24 @@ class TransformFunctor { const T* y_; T* z_; int64_t nx_; - const platform::DeviceContext& ctx_; + const DeviceContext& ctx_; Functor func_; }; #define EIGEN_FUNCTOR(name, eigen_op) \ struct Eigen##name##Functor { \ - template \ + template \ inline void Run(const framework::Tensor* x, const framework::Tensor* y, \ framework::Tensor* z, \ const framework::ExecutionContext& ctx) { \ auto x_e = framework::EigenVector::Flatten(*x); \ auto y_e = framework::EigenVector::Flatten(*y); \ auto z_e = framework::EigenVector::Flatten(*z); \ - z_e.device(ctx.GetEigenDevice()) = eigen_op(x_e, y_e); \ + z_e.device( \ + *ctx.template device_context().eigen_device()) = \ + eigen_op(x_e, y_e); \ } \ - template \ + template \ inline void RunBroadCast(const framework::Tensor* x, \ const framework::Tensor* y, framework::Tensor* z, \ const framework::ExecutionContext& ctx, int pre, \ @@ -235,9 +236,11 @@ class TransformFunctor { auto y_bcast = y_e.reshape(Eigen::DSizes(1, n)) \ .broadcast(Eigen::DSizes(pre, 1)) \ .reshape(Eigen::DSizes(x_e.size())); \ - z_e.device(ctx.GetEigenDevice()) = eigen_op(x_e, y_bcast); \ + z_e.device( \ + *ctx.template device_context().eigen_device()) = \ + eigen_op(x_e, y_bcast); \ } \ - template \ + template \ inline void RunBroadCast2(const framework::Tensor* x, \ const framework::Tensor* y, \ framework::Tensor* z, \ @@ -249,11 +252,13 @@ class TransformFunctor { auto y_bcast = y_e.reshape(Eigen::DSizes(1, n, 1)) \ .broadcast(Eigen::DSizes(pre, 1, post)) \ .reshape(Eigen::DSizes(x_e.size())); \ - z_e.device(ctx.GetEigenDevice()) = eigen_op(x_e, y_bcast); \ + z_e.device( \ + *ctx.template device_context().eigen_device()) = \ + eigen_op(x_e, y_bcast); \ } \ } -template +template void ElementwiseCompute(const framework::ExecutionContext& ctx) { using Tensor = framework::Tensor; @@ -269,7 +274,7 @@ void ElementwiseCompute(const framework::ExecutionContext& ctx) { if (x_dims == y_dims) { functor f; - f.template Run(x, y, z, ctx); + f.template Run(x, y, z, ctx); return; } @@ -282,11 +287,11 @@ void ElementwiseCompute(const framework::ExecutionContext& ctx) { get_mid_dims(x_dims, y_dims, axis, pre, n, post); if (post == 1) { functor f; - f.template RunBroadCast(x, y, z, ctx, pre, n); + f.template RunBroadCast(x, y, z, ctx, pre, n); return; } else { functor f; - f.template RunBroadCast2(x, y, z, ctx, pre, n, post); + f.template RunBroadCast2(x, y, z, ctx, pre, n, post); return; } } @@ -303,8 +308,9 @@ EIGEN_FUNCTOR(Mul, EIGEN_MUL); #define EIGEN_DIV(x, y) ((x) / (y)) EIGEN_FUNCTOR(Div, EIGEN_DIV); -template +template void ElementwiseGradCompute(const framework::ExecutionContext& ctx) { using Tensor = framework::Tensor; @@ -313,7 +319,7 @@ void ElementwiseGradCompute(const framework::ExecutionContext& ctx) { auto* out = ctx.Input("Out"); auto* dout = ctx.Input(framework::GradVarName("Out")); - auto place = ctx.GetEigenDevice(); + auto& place = *ctx.template device_context().eigen_device(); auto x_dims = x->dims(); auto y_dims = y->dims(); diff --git a/paddle/operators/elementwise_sub_op.cc b/paddle/operators/elementwise_sub_op.cc index 95d7979e39..3e4d19361e 100644 --- a/paddle/operators/elementwise_sub_op.cc +++ b/paddle/operators/elementwise_sub_op.cc @@ -34,13 +34,13 @@ REGISTER_OP(elementwise_sub, ops::ElementwiseOp, ops::ElementwiseSubOpMaker, elementwise_sub_grad, ops::ElementwiseOpGrad); REGISTER_OP_CPU_KERNEL( elementwise_sub, - ops::ElementwiseSubKernel, - ops::ElementwiseSubKernel, - ops::ElementwiseSubKernel, - ops::ElementwiseSubKernel); + ops::ElementwiseSubKernel, + ops::ElementwiseSubKernel, + ops::ElementwiseSubKernel, + ops::ElementwiseSubKernel); REGISTER_OP_CPU_KERNEL( elementwise_sub_grad, - ops::ElementwiseSubGradKernel, - ops::ElementwiseSubGradKernel, - ops::ElementwiseSubGradKernel, - ops::ElementwiseSubGradKernel); + ops::ElementwiseSubGradKernel, + ops::ElementwiseSubGradKernel, + ops::ElementwiseSubGradKernel, + ops::ElementwiseSubGradKernel); diff --git a/paddle/operators/elementwise_sub_op.cu b/paddle/operators/elementwise_sub_op.cu index ec23bec35f..0b2f0f7d4d 100644 --- a/paddle/operators/elementwise_sub_op.cu +++ b/paddle/operators/elementwise_sub_op.cu @@ -17,15 +17,16 @@ namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL( +REGISTER_OP_CUDA_KERNEL( elementwise_sub, - ops::ElementwiseSubKernel, - ops::ElementwiseSubKernel, - ops::ElementwiseSubKernel, - ops::ElementwiseSubKernel); -REGISTER_OP_GPU_KERNEL( + ops::ElementwiseSubKernel, + ops::ElementwiseSubKernel, + ops::ElementwiseSubKernel, + ops::ElementwiseSubKernel); +REGISTER_OP_CUDA_KERNEL( elementwise_sub_grad, - ops::ElementwiseSubGradKernel, - ops::ElementwiseSubGradKernel, - ops::ElementwiseSubGradKernel, - ops::ElementwiseSubGradKernel); + ops::ElementwiseSubGradKernel, + ops::ElementwiseSubGradKernel, + ops::ElementwiseSubGradKernel, + ops::ElementwiseSubGradKernel); diff --git a/paddle/operators/elementwise_sub_op.h b/paddle/operators/elementwise_sub_op.h index 3f40c1c5bc..731a30c5e3 100644 --- a/paddle/operators/elementwise_sub_op.h +++ b/paddle/operators/elementwise_sub_op.h @@ -18,11 +18,11 @@ namespace paddle { namespace operators { -template +template class ElementwiseSubKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& ctx) const override { - ElementwiseCompute(ctx); + ElementwiseCompute(ctx); } }; @@ -101,11 +101,11 @@ struct ElementwiseSubBroadCast2GradFunctor { } }; -template +template class ElementwiseSubGradKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& ctx) const override { - ElementwiseGradCompute, + ElementwiseGradCompute, ElementwiseSubOneGradFunctor, ElementwiseSubBroadCastGradFunctor, ElementwiseSubBroadCast2GradFunctor>(ctx); diff --git a/paddle/operators/expand_op.cc b/paddle/operators/expand_op.cc index 282775fcda..8b3cddbb94 100644 --- a/paddle/operators/expand_op.cc +++ b/paddle/operators/expand_op.cc @@ -130,7 +130,8 @@ class ExpandGradOp : public framework::OperatorWithKernel { namespace ops = paddle::operators; REGISTER_OP(expand, ops::ExpandOp, ops::ExpandOpMaker, expand_grad, ops::ExpandGradOp); -REGISTER_OP_CPU_KERNEL(expand, - ops::ExpandKernel); REGISTER_OP_CPU_KERNEL( - expand_grad, ops::ExpandGradKernel); + expand, ops::ExpandKernel); +REGISTER_OP_CPU_KERNEL( + expand_grad, + ops::ExpandGradKernel); diff --git a/paddle/operators/expand_op.cu b/paddle/operators/expand_op.cu index 6744562b6c..99ee584d08 100644 --- a/paddle/operators/expand_op.cu +++ b/paddle/operators/expand_op.cu @@ -17,7 +17,8 @@ #include "paddle/operators/expand_op.h" namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL(expand, - ops::ExpandKernel); -REGISTER_OP_GPU_KERNEL( - expand_grad, ops::ExpandGradKernel); +REGISTER_OP_CUDA_KERNEL( + expand, ops::ExpandKernel); +REGISTER_OP_CUDA_KERNEL( + expand_grad, + ops::ExpandGradKernel); diff --git a/paddle/operators/expand_op.h b/paddle/operators/expand_op.h index 4d7996ad1e..14ef8b0912 100644 --- a/paddle/operators/expand_op.h +++ b/paddle/operators/expand_op.h @@ -56,7 +56,7 @@ template using EigenTensor = framework::EigenTensor; -template +template class ExpandKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { @@ -83,12 +83,13 @@ class ExpandKernel : public framework::OpKernel { auto x = EigenTensor::From(*in0); out0->mutable_data(context.GetPlace()); auto y = EigenTensor::From(*out0); - auto place = context.GetEigenDevice(); + auto& place = + *context.template device_context().eigen_device(); y.device(place) = x.broadcast(bcast_dims); } }; -template +template class ExpandGradKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { @@ -164,7 +165,8 @@ class ExpandGradKernel : public framework::OpKernel { reduce_dims[i] = reduce_dims_vec[i]; } auto out_grad = EigenVector::Flatten(*in0); - x_grad.device(context.GetEigenDevice()) = + x_grad.device( + *context.template device_context().eigen_device()) = out_grad.reshape(reshape_dims).sum(reduce_dims).reshape(x.dimensions()); } }; diff --git a/paddle/operators/fill_constant_batch_size_like_op.cc b/paddle/operators/fill_constant_batch_size_like_op.cc index 892922cd3a..7fb74e2b95 100644 --- a/paddle/operators/fill_constant_batch_size_like_op.cc +++ b/paddle/operators/fill_constant_batch_size_like_op.cc @@ -100,8 +100,11 @@ REGISTER_OPERATOR(fill_constant_batch_size_like, ops::FillConstantBatchSizeLikeOpMaker); REGISTER_OP_CPU_KERNEL( fill_constant_batch_size_like, - ops::FillConstantBatchSizeLikeOpKernel, - ops::FillConstantBatchSizeLikeOpKernel, - ops::FillConstantBatchSizeLikeOpKernel, - ops::FillConstantBatchSizeLikeOpKernel, + ops::FillConstantBatchSizeLikeOpKernel, + ops::FillConstantBatchSizeLikeOpKernel, + ops::FillConstantBatchSizeLikeOpKernel); diff --git a/paddle/operators/fill_constant_batch_size_like_op.cu.cc b/paddle/operators/fill_constant_batch_size_like_op.cu.cc index 9e7a1eeab8..2e0e15f36b 100644 --- a/paddle/operators/fill_constant_batch_size_like_op.cu.cc +++ b/paddle/operators/fill_constant_batch_size_like_op.cu.cc @@ -16,10 +16,13 @@ #include "paddle/framework/op_registry.h" namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL( +REGISTER_OP_CUDA_KERNEL( fill_constant_batch_size_like, - ops::FillConstantBatchSizeLikeOpKernel, - ops::FillConstantBatchSizeLikeOpKernel, - ops::FillConstantBatchSizeLikeOpKernel, - ops::FillConstantBatchSizeLikeOpKernel, + ops::FillConstantBatchSizeLikeOpKernel, + ops::FillConstantBatchSizeLikeOpKernel, + ops::FillConstantBatchSizeLikeOpKernel); diff --git a/paddle/operators/fill_constant_batch_size_like_op.h b/paddle/operators/fill_constant_batch_size_like_op.h index 339d97a30a..66da9d0307 100644 --- a/paddle/operators/fill_constant_batch_size_like_op.h +++ b/paddle/operators/fill_constant_batch_size_like_op.h @@ -19,7 +19,7 @@ limitations under the License. */ namespace paddle { namespace operators { -template +template class FillConstantBatchSizeLikeOpKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& ctx) const override { @@ -27,8 +27,9 @@ class FillConstantBatchSizeLikeOpKernel : public framework::OpKernel { out->mutable_data(ctx.GetPlace()); auto value = ctx.Attr("value"); - math::SetConstant setter; - setter(ctx.device_context(), out, static_cast(value)); + math::SetConstant setter; + setter(ctx.template device_context(), out, + static_cast(value)); } }; diff --git a/paddle/operators/fill_zeros_like_op.cc b/paddle/operators/fill_zeros_like_op.cc index 95fb5932b8..720c11f5f1 100644 --- a/paddle/operators/fill_zeros_like_op.cc +++ b/paddle/operators/fill_zeros_like_op.cc @@ -54,8 +54,9 @@ namespace ops = paddle::operators; REGISTER_OP_WITHOUT_GRADIENT(fill_zeros_like, ops::FillZerosLikeOp, ops::FillZerosLikeOpMaker); REGISTER_OP_CPU_KERNEL( - fill_zeros_like, ops::FillZerosLikeKernel, - ops::FillZerosLikeKernel, - ops::FillZerosLikeKernel, - ops::FillZerosLikeKernel, - ops::FillZerosLikeKernel); + fill_zeros_like, + ops::FillZerosLikeKernel, + ops::FillZerosLikeKernel, + ops::FillZerosLikeKernel, + ops::FillZerosLikeKernel, + ops::FillZerosLikeKernel); diff --git a/paddle/operators/fill_zeros_like_op.cu.cc b/paddle/operators/fill_zeros_like_op.cu.cc index 1501a17441..9f412306bb 100644 --- a/paddle/operators/fill_zeros_like_op.cu.cc +++ b/paddle/operators/fill_zeros_like_op.cu.cc @@ -16,9 +16,10 @@ #include "paddle/framework/op_registry.h" namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL( - fill_zeros_like, ops::FillZerosLikeKernel, - ops::FillZerosLikeKernel, - ops::FillZerosLikeKernel, - ops::FillZerosLikeKernel, - ops::FillZerosLikeKernel); +REGISTER_OP_CUDA_KERNEL( + fill_zeros_like, + ops::FillZerosLikeKernel, + ops::FillZerosLikeKernel, + ops::FillZerosLikeKernel, + ops::FillZerosLikeKernel, + ops::FillZerosLikeKernel); diff --git a/paddle/operators/fill_zeros_like_op.h b/paddle/operators/fill_zeros_like_op.h index 7e7d78eea2..a6e2941f52 100644 --- a/paddle/operators/fill_zeros_like_op.h +++ b/paddle/operators/fill_zeros_like_op.h @@ -19,15 +19,16 @@ limitations under the License. */ namespace paddle { namespace operators { -template +template class FillZerosLikeKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { auto* out = context.Output("Y"); out->mutable_data(context.GetPlace()); - math::SetConstant setter; - setter(context.device_context(), out, static_cast(0)); + math::SetConstant setter; + setter(context.template device_context(), out, + static_cast(0)); } }; diff --git a/paddle/operators/ftrl_op.cc b/paddle/operators/ftrl_op.cc index cb7ae69196..b14913ff21 100644 --- a/paddle/operators/ftrl_op.cc +++ b/paddle/operators/ftrl_op.cc @@ -135,5 +135,5 @@ The paper that proposed Follow The Regularized Leader (FTRL): namespace ops = paddle::operators; REGISTER_OP_WITHOUT_GRADIENT(ftrl, ops::FTRLOp, ops::FTRLOpMaker); -REGISTER_OP_CPU_KERNEL(ftrl, - ops::FTRLOpKernel); +REGISTER_OP_CPU_KERNEL( + ftrl, ops::FTRLOpKernel); diff --git a/paddle/operators/ftrl_op.cu b/paddle/operators/ftrl_op.cu index 97b36dade6..abbbe7adbe 100644 --- a/paddle/operators/ftrl_op.cu +++ b/paddle/operators/ftrl_op.cu @@ -15,5 +15,5 @@ specific language governing permissions and limitations under the License. */ #include "paddle/operators/ftrl_op.h" namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL(ftrl, - ops::FTRLOpKernel); +REGISTER_OP_CUDA_KERNEL( + ftrl, ops::FTRLOpKernel); diff --git a/paddle/operators/ftrl_op.h b/paddle/operators/ftrl_op.h index b040162f8d..4eea04cd8d 100644 --- a/paddle/operators/ftrl_op.h +++ b/paddle/operators/ftrl_op.h @@ -24,7 +24,7 @@ template using EigenVector = framework::EigenVector; -template +template class FTRLOpKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& ctx) const override { @@ -53,7 +53,7 @@ class FTRLOpKernel : public framework::OpKernel { auto p_out = EigenVector::Flatten(*param_out); auto s_acc_out = EigenVector::Flatten(*sq_accum_out); auto l_acc_out = EigenVector::Flatten(*lin_accum_out); - auto place = ctx.GetEigenDevice(); + auto& place = *ctx.template device_context().eigen_device(); Eigen::DSizes grad_dsize(grad->numel()); diff --git a/paddle/operators/gather.cu.h b/paddle/operators/gather.cu.h index 8d04ecd284..c806aa5f05 100644 --- a/paddle/operators/gather.cu.h +++ b/paddle/operators/gather.cu.h @@ -20,7 +20,7 @@ namespace paddle { namespace operators { using framework::Tensor; -using platform::Place; +using platform::DeviceContext; #define CUDA_1D_KERNEL_LOOP(i, n) \ for (int i = blockIdx.x * blockDim.x + threadIdx.x; i < (n); \ diff --git a/paddle/operators/gather_op.cu b/paddle/operators/gather_op.cu index 92219d6a43..b37f0576e2 100644 --- a/paddle/operators/gather_op.cu +++ b/paddle/operators/gather_op.cu @@ -49,7 +49,8 @@ class GatherGradOpCUDAKernel : public framework::OpKernel { dX->mutable_data(ctx.GetPlace()); auto dxt = framework::EigenVector::Flatten(*dX); - auto place = ctx.GetEigenDevice(); + auto &place = *ctx.template device_context() + .eigen_device(); dxt.device(place) = dxt.constant(static_cast(0)); GPUScatterAssign(ctx.device_context(), *dO, *Index, dX); @@ -60,5 +61,5 @@ class GatherGradOpCUDAKernel : public framework::OpKernel { } // namespace paddle namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL(gather, ops::GatherOpCUDAKernel); -REGISTER_OP_GPU_KERNEL(gather_grad, ops::GatherGradOpCUDAKernel); +REGISTER_OP_CUDA_KERNEL(gather, ops::GatherOpCUDAKernel); +REGISTER_OP_CUDA_KERNEL(gather_grad, ops::GatherGradOpCUDAKernel); diff --git a/paddle/operators/gather_op.h b/paddle/operators/gather_op.h index 8276ed0d3d..1a1ba0c41a 100644 --- a/paddle/operators/gather_op.h +++ b/paddle/operators/gather_op.h @@ -53,7 +53,8 @@ class GatherGradientOpKernel : public framework::OpKernel { dX->mutable_data(ctx.GetPlace()); auto dxt = framework::EigenVector::Flatten(*dX); - auto place = ctx.GetEigenDevice(); + auto &place = *ctx.template device_context() + .eigen_device(); dxt.device(place) = dxt.constant(static_cast(0)); ScatterAssign(ctx.device_context(), *dO, *Index, dX); diff --git a/paddle/operators/gaussian_random_op.cu b/paddle/operators/gaussian_random_op.cu index 315560bf1b..ffce6f7138 100644 --- a/paddle/operators/gaussian_random_op.cu +++ b/paddle/operators/gaussian_random_op.cu @@ -60,5 +60,5 @@ class GPUGaussianRandomKernel : public framework::OpKernel { } // namespace operators } // namespace paddle -REGISTER_OP_GPU_KERNEL(gaussian_random, - paddle::operators::GPUGaussianRandomKernel); +REGISTER_OP_CUDA_KERNEL(gaussian_random, + paddle::operators::GPUGaussianRandomKernel); diff --git a/paddle/operators/gru_op.cc b/paddle/operators/gru_op.cc index 5aa03f8916..311e7edcf1 100644 --- a/paddle/operators/gru_op.cc +++ b/paddle/operators/gru_op.cc @@ -213,8 +213,9 @@ class GRUGradOp : public framework::OperatorWithKernel { namespace ops = paddle::operators; REGISTER_OP(gru, ops::GRUOp, ops::GRUOpMaker, gru_grad, ops::GRUGradOp); -REGISTER_OP_CPU_KERNEL(gru, ops::GRUKernel, - ops::GRUKernel); -REGISTER_OP_CPU_KERNEL(gru_grad, - ops::GRUGradKernel, - ops::GRUGradKernel); +REGISTER_OP_CPU_KERNEL( + gru, ops::GRUKernel, + ops::GRUKernel); +REGISTER_OP_CPU_KERNEL( + gru_grad, ops::GRUGradKernel, + ops::GRUGradKernel); diff --git a/paddle/operators/gru_op.cu.cc b/paddle/operators/gru_op.cu.cc index 0ceff94ec3..458630ca61 100644 --- a/paddle/operators/gru_op.cu.cc +++ b/paddle/operators/gru_op.cu.cc @@ -15,8 +15,9 @@ #include "paddle/operators/gru_op.h" namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL(gru, ops::GRUKernel, - ops::GRUKernel); -REGISTER_OP_GPU_KERNEL(gru_grad, - ops::GRUGradKernel, - ops::GRUGradKernel); +REGISTER_OP_CUDA_KERNEL( + gru, ops::GRUKernel, + ops::GRUKernel); +REGISTER_OP_CUDA_KERNEL( + gru_grad, ops::GRUGradKernel, + ops::GRUGradKernel); diff --git a/paddle/operators/gru_op.h b/paddle/operators/gru_op.h index 564489d3a9..6d02dff578 100644 --- a/paddle/operators/gru_op.h +++ b/paddle/operators/gru_op.h @@ -27,16 +27,16 @@ namespace operators { using LoDTensor = framework::LoDTensor; using Tensor = framework::Tensor; -template -inline void ReorderInitState(const platform::DeviceContext& ctx, +template +inline void ReorderInitState(const DeviceContext& ctx, const framework::Tensor& src, const size_t* index, framework::Tensor* dst, bool indexed_src) { - math::CopyMatrixRowsFunctor row_shuffle; + math::CopyMatrixRowsFunctor row_shuffle; dst->mutable_data(src.dims(), ctx.GetPlace()); row_shuffle(ctx, src, index, *dst, indexed_src); } -template +template class GRUKernel : public framework::OpKernel { public: void BatchCompute(const framework::ExecutionContext& context) const { @@ -60,12 +60,12 @@ class GRUKernel : public framework::OpKernel { auto hidden_dims = hidden->dims(); bool is_reverse = context.Attr("is_reverse"); - math::LoDTensor2BatchFunctor to_batch; - auto& dev_ctx = context.device_context(); + math::LoDTensor2BatchFunctor to_batch; + auto& dev_ctx = context.template device_context(); to_batch(dev_ctx, *input, *batch_gate, true, is_reverse); if (bias) { - math::RowwiseAdd add_bias; + math::RowwiseAdd add_bias; add_bias(dev_ctx, *batch_gate, *bias, batch_gate); } @@ -80,8 +80,9 @@ class GRUKernel : public framework::OpKernel { // Since the batch computing for GRU reorders the input sequences // according to their length. The initialized cell state also needs // to reorder. - ReorderInitState(context.device_context(), *h0, order, - &ordered_h0, true); + ReorderInitState( + context.template device_context(), *h0, order, + &ordered_h0, true); gru_value.prev_out_value = ordered_h0.data(); } else { gru_value.prev_out_value = nullptr; @@ -99,14 +100,14 @@ class GRUKernel : public framework::OpKernel { gru_value.output_value = hidden_t.data(); gru_value.gate_value = gate_t.data(); gru_value.reset_output_value = reset_hidden_prev_t.data(); - math::GRUUnitFunctor::compute( + math::GRUUnitFunctor::compute( dev_ctx, gru_value, frame_size, cur_batch_size, math::ActiveType(context.Attr("activation")), math::ActiveType(context.Attr("gate_activation"))); gru_value.prev_out_value = gru_value.output_value; } - math::Batch2LoDTensorFunctor to_seq; + math::Batch2LoDTensorFunctor to_seq; batch_hidden->set_lod(batch_gate->lod()); to_seq(dev_ctx, *batch_hidden, *hidden); } @@ -116,7 +117,7 @@ class GRUKernel : public framework::OpKernel { } }; -template +template class GRUGradKernel : public framework::OpKernel { public: void BatchCompute(const framework::ExecutionContext& context) const { @@ -141,14 +142,14 @@ class GRUGradKernel : public framework::OpKernel { auto hidden_dims = hidden->dims(); int frame_size = hidden_dims[1]; - math::LoDTensor2BatchFunctor to_batch; + math::LoDTensor2BatchFunctor to_batch; LoDTensor batch_hidden_grad, batch_gate_grad, batch_reset_hidden_prev_grad; batch_hidden_grad.mutable_data(hidden_dims, context.GetPlace()); batch_gate_grad.mutable_data(gate_dims, context.GetPlace()); batch_reset_hidden_prev_grad.mutable_data(hidden_dims, context.GetPlace()); - math::SetConstant zero; - auto& dev_ctx = context.device_context(); + math::SetConstant zero; + auto& dev_ctx = context.template device_context(); zero(dev_ctx, &batch_hidden_grad, static_cast(0.0)); zero(dev_ctx, &batch_gate_grad, static_cast(0.0)); zero(dev_ctx, &batch_reset_hidden_prev_grad, static_cast(0.0)); @@ -156,12 +157,13 @@ class GRUGradKernel : public framework::OpKernel { Tensor ordered_h0, ordered_h0_grad; const size_t* order = batch_gate->lod()[2].data(); if (h0) { - ReorderInitState(context.device_context(), *h0, order, - &ordered_h0, true); + ReorderInitState(dev_ctx, *h0, order, &ordered_h0, + true); } if (h0_grad) { ordered_h0_grad.mutable_data(h0_grad->dims(), context.GetPlace()); - zero(context.device_context(), &ordered_h0_grad, static_cast(0.0)); + zero(context.template device_context(), &ordered_h0_grad, + static_cast(0.0)); } bool is_reverse = context.Attr("is_reverse"); @@ -216,25 +218,25 @@ class GRUGradKernel : public framework::OpKernel { gru_grad.prev_out_grad = hidden_prev_grad_t.data(); } - math::GRUUnitGradFunctor::compute( + math::GRUUnitGradFunctor::compute( dev_ctx, gru_value, gru_grad, frame_size, cur_batch_size, math::ActiveType(context.Attr("activation")), math::ActiveType(context.Attr("gate_activation"))); } if (input_grad) { input_grad->mutable_data(context.GetPlace()); - math::Batch2LoDTensorFunctor to_seq; + math::Batch2LoDTensorFunctor to_seq; batch_gate_grad.set_lod(batch_gate->lod()); to_seq(dev_ctx, batch_gate_grad, *input_grad); } if (bias_grad) { bias_grad->mutable_data(context.GetPlace()); - math::ColwiseSum col_sum; + math::ColwiseSum col_sum; col_sum(dev_ctx, batch_gate_grad, bias_grad); } if (h0 && h0_grad) { - ReorderInitState(context.device_context(), ordered_h0_grad, - order, h0_grad, false); + ReorderInitState(dev_ctx, ordered_h0_grad, order, + h0_grad, false); } } diff --git a/paddle/operators/gru_unit_op.cc b/paddle/operators/gru_unit_op.cc index 877c969103..705de87be5 100644 --- a/paddle/operators/gru_unit_op.cc +++ b/paddle/operators/gru_unit_op.cc @@ -201,9 +201,10 @@ class GRUUnitGradOp : public framework::OperatorWithKernel { namespace ops = paddle::operators; REGISTER_OP(gru_unit, ops::GRUUnitOp, ops::GRUUnitOpMaker, gru_unit_grad, ops::GRUUnitGradOp); -REGISTER_OP_CPU_KERNEL(gru_unit, - ops::GRUUnitKernel, - ops::GRUUnitKernel); REGISTER_OP_CPU_KERNEL( - gru_unit_grad, ops::GRUUnitGradKernel, - ops::GRUUnitGradKernel); + gru_unit, ops::GRUUnitKernel, + ops::GRUUnitKernel); +REGISTER_OP_CPU_KERNEL( + gru_unit_grad, + ops::GRUUnitGradKernel, + ops::GRUUnitGradKernel); diff --git a/paddle/operators/gru_unit_op.cu b/paddle/operators/gru_unit_op.cu index 821c8c6421..7c752db494 100644 --- a/paddle/operators/gru_unit_op.cu +++ b/paddle/operators/gru_unit_op.cu @@ -16,9 +16,10 @@ #include "paddle/operators/gru_unit_op.h" namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL(gru_unit, - ops::GRUUnitKernel, - ops::GRUUnitKernel); -REGISTER_OP_GPU_KERNEL( - gru_unit_grad, ops::GRUUnitGradKernel, - ops::GRUUnitGradKernel); +REGISTER_OP_CUDA_KERNEL( + gru_unit, ops::GRUUnitKernel, + ops::GRUUnitKernel); +REGISTER_OP_CUDA_KERNEL( + gru_unit_grad, + ops::GRUUnitGradKernel, + ops::GRUUnitGradKernel); diff --git a/paddle/operators/gru_unit_op.h b/paddle/operators/gru_unit_op.h index 3398c0934e..8fe60c750d 100644 --- a/paddle/operators/gru_unit_op.h +++ b/paddle/operators/gru_unit_op.h @@ -34,7 +34,7 @@ using EigenVector = framework::EigenVector; enum GRUActivationType { identity = 0, sigmoid = 1, tanh = 2, relu = 3 }; -template +template class GRUUnitKernel : public framework::OpKernel { public: template @@ -71,7 +71,8 @@ class GRUUnitKernel : public framework::OpKernel { auto g = EigenMatrix::From(*gate); auto r_h_p = EigenMatrix::From(*reset_hidden_prev); auto h = EigenMatrix::From(*hidden); - auto place = context.GetEigenDevice(); + auto& place = + *context.template device_context().eigen_device(); // calculate unactivated gate outputs if (bias) { @@ -86,10 +87,10 @@ class GRUUnitKernel : public framework::OpKernel { const T* weight_data = weight->data(); T* gate_data = gate->data(); T* reset_hidden_prev_data = reset_hidden_prev->data(); - math::gemm(context.device_context(), false, false, batch_size, - 2 * frame_size, frame_size, 1, hidden_prev_data, - frame_size, weight_data, frame_size * 2, 1, gate_data, - frame_size * 3); + math::gemm( + context.template device_context(), false, false, + batch_size, 2 * frame_size, frame_size, 1, hidden_prev_data, frame_size, + weight_data, frame_size * 2, 1, gate_data, frame_size * 3); // calculate activited gate Eigen::array extents({{batch_size, frame_size}}); @@ -102,11 +103,11 @@ class GRUUnitKernel : public framework::OpKernel { g.slice(r_offsets, extents), g.slice(r_offsets, extents)); auto r = g.slice(r_offsets, extents); // reset gate r_h_p.device(place) = r * h_p; // reset previous hidden state - math::gemm(context.device_context(), false, false, batch_size, - frame_size, frame_size, 1, reset_hidden_prev_data, - frame_size, weight_data + frame_size * frame_size * 2, - frame_size, 1, gate_data + frame_size * 2, - frame_size * 3); + math::gemm( + context.template device_context(), false, false, + batch_size, frame_size, frame_size, 1, reset_hidden_prev_data, + frame_size, weight_data + frame_size * frame_size * 2, frame_size, 1, + gate_data + frame_size * 2, frame_size * 3); Eigen::array c_offsets({{0, frame_size * 2}}); ActCompute(context.Attr("activation"), place, @@ -118,7 +119,7 @@ class GRUUnitKernel : public framework::OpKernel { } }; -template +template class GRUUnitGradKernel : public framework::OpKernel { public: template @@ -166,7 +167,8 @@ class GRUUnitGradKernel : public framework::OpKernel { auto d_h = EigenMatrix::From(*hidden_grad); auto d_g = EigenMatrix::From(gate_grad); auto d_r_h_p = EigenMatrix::From(reset_hidden_prev_grad); - auto place = context.GetEigenDevice(); + auto& place = + *context.template device_context().eigen_device(); int batch_size = input->dims()[0]; int frame_size = hidden_prev->dims()[1]; @@ -186,11 +188,11 @@ class GRUUnitGradKernel : public framework::OpKernel { ActGradCompute(context.Attr("activation"), place, c, c, d_g.slice(c_offsets, extents), d_h * u); // backward for reset_hidden_prev - math::gemm(context.device_context(), false, true, batch_size, - frame_size, frame_size, 1, - gate_grad_data + frame_size * 2, frame_size * 3, - weight_data + frame_size * frame_size * 2, frame_size, - 0, reset_hidden_prev_grad_data, frame_size); + math::gemm( + context.template device_context(), false, true, + batch_size, frame_size, frame_size, 1, gate_grad_data + frame_size * 2, + frame_size * 3, weight_data + frame_size * frame_size * 2, frame_size, + 0, reset_hidden_prev_grad_data, frame_size); // backward for unactivated reset gate ActGradCompute(context.Attr("gate_activation"), place, r, r, d_g.slice(r_offsets, extents), d_r_h_p * h_p); @@ -198,17 +200,18 @@ class GRUUnitGradKernel : public framework::OpKernel { if (weight_grad) { T* weight_grad_data = weight_grad->mutable_data(context.GetPlace()); // backward for state_weight - math::gemm( - context.device_context(), true, false, frame_size, frame_size, - batch_size, 1, reset_hidden_prev_data, frame_size, - gate_grad_data + frame_size * 2, frame_size * 3, 0, + math::gemm( + context.template device_context(), true, false, + frame_size, frame_size, batch_size, 1, reset_hidden_prev_data, + frame_size, gate_grad_data + frame_size * 2, frame_size * 3, 0, weight_grad_data + frame_size * frame_size * 2, frame_size); // backward for update_gate_weight and reset_gate_weight - math::gemm(context.device_context(), true, false, frame_size, - frame_size * 2, batch_size, 1, hidden_prev_data, - frame_size, gate_grad_data, frame_size * 3, 0, - weight_grad_data, frame_size * 2); + math::gemm( + context.template device_context(), true, false, + frame_size, frame_size * 2, batch_size, 1, hidden_prev_data, + frame_size, gate_grad_data, frame_size * 3, 0, weight_grad_data, + frame_size * 2); } // backward for hidden_prev if (hidden_prev_grad) { @@ -216,10 +219,11 @@ class GRUUnitGradKernel : public framework::OpKernel { hidden_prev_grad->mutable_data(context.GetPlace()); auto d_h_p = EigenMatrix::From(*hidden_prev_grad); d_h_p.device(place) = d_r_h_p * r + d_h * (u.constant(T(1)) - u); - math::gemm(context.device_context(), false, true, batch_size, - frame_size, frame_size * 2, 1, gate_grad_data, - frame_size * 3, weight_data, frame_size * 2, 1, - hidden_prev_grad_data, frame_size); + math::gemm( + context.template device_context(), false, true, + batch_size, frame_size, frame_size * 2, 1, gate_grad_data, + frame_size * 3, weight_data, frame_size * 2, 1, hidden_prev_grad_data, + frame_size); } // backward for input if (input_grad) { diff --git a/paddle/operators/hinge_loss_op.cc b/paddle/operators/hinge_loss_op.cc index 1e13897bb6..373b4d99b4 100644 --- a/paddle/operators/hinge_loss_op.cc +++ b/paddle/operators/hinge_loss_op.cc @@ -106,8 +106,9 @@ class HingeLossGradOp : public framework::OperatorWithKernel { namespace ops = paddle::operators; REGISTER_OP(hinge_loss, ops::HingeLossOp, ops::HingeLossOpMaker, hinge_loss_grad, ops::HingeLossGradOp); -REGISTER_OP_CPU_KERNEL(hinge_loss, - ops::HingeLossKernel); +REGISTER_OP_CPU_KERNEL( + hinge_loss, + ops::HingeLossKernel); REGISTER_OP_CPU_KERNEL( hinge_loss_grad, - ops::HingeLossGradKernel); + ops::HingeLossGradKernel); diff --git a/paddle/operators/hinge_loss_op.cu b/paddle/operators/hinge_loss_op.cu index ec20b08e30..31a5bde292 100644 --- a/paddle/operators/hinge_loss_op.cu +++ b/paddle/operators/hinge_loss_op.cu @@ -16,8 +16,9 @@ #include "paddle/operators/hinge_loss_op.h" namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL(hinge_loss, - ops::HingeLossKernel); -REGISTER_OP_GPU_KERNEL( +REGISTER_OP_CUDA_KERNEL( + hinge_loss, + ops::HingeLossKernel); +REGISTER_OP_CUDA_KERNEL( hinge_loss_grad, - ops::HingeLossGradKernel); + ops::HingeLossGradKernel); diff --git a/paddle/operators/hinge_loss_op.h b/paddle/operators/hinge_loss_op.h index c0be496f9c..91369cfb8a 100644 --- a/paddle/operators/hinge_loss_op.h +++ b/paddle/operators/hinge_loss_op.h @@ -19,14 +19,15 @@ limitations under the License. */ namespace paddle { namespace operators { -template +template class HingeLossKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { auto* pred = context.Input("Logits"); auto* label = context.Input("Labels"); auto* loss = context.Output("Loss"); - auto place = context.GetEigenDevice(); + auto& place = + *context.template device_context().eigen_device(); auto x = framework::EigenVector::Flatten(*pred); auto y = framework::EigenVector::Flatten(*label); @@ -38,7 +39,7 @@ class HingeLossKernel : public framework::OpKernel { } }; -template +template class HingeLossGradKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { @@ -48,7 +49,8 @@ class HingeLossGradKernel : public framework::OpKernel { context.Input(framework::GradVarName("Loss")); auto* dpred = context.Output(framework::GradVarName("Logits")); - auto place = context.GetEigenDevice(); + auto& place = + *context.template device_context().eigen_device(); auto x = framework::EigenVector::Flatten(*pred); auto y = framework::EigenVector::Flatten(*label); diff --git a/paddle/operators/huber_loss_op.cc b/paddle/operators/huber_loss_op.cc index 938803d5b3..11828d083a 100644 --- a/paddle/operators/huber_loss_op.cc +++ b/paddle/operators/huber_loss_op.cc @@ -124,8 +124,9 @@ class HuberLossGradOp : public framework::OperatorWithKernel { namespace ops = paddle::operators; REGISTER_OP(huber_loss, ops::HuberLossOp, ops::HuberLossOpMaker, huber_loss_grad, ops::HuberLossGradOp); -REGISTER_OP_CPU_KERNEL(huber_loss, - ops::HuberLossKernel); +REGISTER_OP_CPU_KERNEL( + huber_loss, + ops::HuberLossKernel); REGISTER_OP_CPU_KERNEL( huber_loss_grad, - ops::HuberLossGradKernel); + ops::HuberLossGradKernel); diff --git a/paddle/operators/huber_loss_op.cu b/paddle/operators/huber_loss_op.cu index 317321dc6c..d49a4d9d42 100644 --- a/paddle/operators/huber_loss_op.cu +++ b/paddle/operators/huber_loss_op.cu @@ -16,8 +16,9 @@ #include "paddle/operators/huber_loss_op.h" namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL(huber_loss, - ops::HuberLossKernel); -REGISTER_OP_GPU_KERNEL( +REGISTER_OP_CUDA_KERNEL( + huber_loss, + ops::HuberLossKernel); +REGISTER_OP_CUDA_KERNEL( huber_loss_grad, - ops::HuberLossGradKernel); + ops::HuberLossGradKernel); diff --git a/paddle/operators/huber_loss_op.h b/paddle/operators/huber_loss_op.h index 4e7bc55432..4dd20e8b08 100644 --- a/paddle/operators/huber_loss_op.h +++ b/paddle/operators/huber_loss_op.h @@ -41,7 +41,7 @@ struct HuberLossForward { T delta; }; -template +template class HuberLossKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { @@ -50,7 +50,8 @@ class HuberLossKernel : public framework::OpKernel { auto* out0 = context.Output("Residual"); auto* out1 = context.Output("Out"); auto delta = static_cast(context.Attr("delta")); - auto place = context.GetEigenDevice(); + auto& place = + *context.template device_context().eigen_device(); auto x = EigenVector::Flatten(*in0); auto y = EigenVector::Flatten(*in1); @@ -85,7 +86,7 @@ struct HuberLossBackward { T delta; }; -template +template class HuberLossGradKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { @@ -94,7 +95,8 @@ class HuberLossGradKernel : public framework::OpKernel { auto* out0 = context.Output(framework::GradVarName("X")); auto* out1 = context.Output(framework::GradVarName("Y")); auto delta = static_cast(context.op().Attr("delta")); - auto place = context.GetEigenDevice(); + auto& place = + *context.template device_context().eigen_device(); auto residual = EigenVector::Flatten(*in0); auto out_grad = EigenVector::Flatten(*in1); diff --git a/paddle/operators/l1_norm_op.cc b/paddle/operators/l1_norm_op.cc index 02ebf02296..c0b51202c6 100644 --- a/paddle/operators/l1_norm_op.cc +++ b/paddle/operators/l1_norm_op.cc @@ -69,7 +69,8 @@ $$Out = \sum{|X|}$$ namespace ops = paddle::operators; REGISTER_OP(l1_norm, ops::L1NormOp, ops::L1NormOpMaker, l1_norm_grad, ops::L1NormGradOp); -REGISTER_OP_CPU_KERNEL(l1_norm, - ops::L1NormKernel); REGISTER_OP_CPU_KERNEL( - l1_norm_grad, ops::L1NormGradKernel); + l1_norm, ops::L1NormKernel); +REGISTER_OP_CPU_KERNEL( + l1_norm_grad, + ops::L1NormGradKernel); diff --git a/paddle/operators/l1_norm_op.cu b/paddle/operators/l1_norm_op.cu index 1c206e04cc..fd725f86f6 100644 --- a/paddle/operators/l1_norm_op.cu +++ b/paddle/operators/l1_norm_op.cu @@ -16,7 +16,8 @@ #include "paddle/operators/l1_norm_op.h" namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL(l1_norm, - ops::L1NormKernel); -REGISTER_OP_GPU_KERNEL( - l1_norm_grad, ops::L1NormGradKernel); +REGISTER_OP_CUDA_KERNEL( + l1_norm, ops::L1NormKernel); +REGISTER_OP_CUDA_KERNEL( + l1_norm_grad, + ops::L1NormGradKernel); diff --git a/paddle/operators/l1_norm_op.h b/paddle/operators/l1_norm_op.h index 3c60dc3dc7..ae3878f2b7 100644 --- a/paddle/operators/l1_norm_op.h +++ b/paddle/operators/l1_norm_op.h @@ -20,7 +20,7 @@ namespace paddle { namespace operators { // Out = sum(abs(X)) -template +template class L1NormKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext &context) const override { @@ -30,14 +30,15 @@ class L1NormKernel : public framework::OpKernel { auto x = framework::EigenVector::Flatten(*X); auto out = framework::EigenScalar::From(*Out); - auto place = context.GetEigenDevice(); + auto &place = + *context.template device_context().eigen_device(); out.device(place) = x.abs().sum(); } }; // dX = dout * sign(X) -template +template class L1NormGradKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext &context) const override { @@ -52,7 +53,8 @@ class L1NormGradKernel : public framework::OpKernel { auto x_eigen = framework::EigenVector::Flatten(*x); auto d_out_eigen = framework::EigenVector::Flatten(*d_out); auto dx_eigen = framework::EigenVector::Flatten(*dx); - auto place = context.GetEigenDevice(); + auto &place = + *context.template device_context().eigen_device(); Eigen::DSizes x_dsize(x->numel()); dx_eigen.device(place) = d_out_eigen.broadcast(x_dsize) * x_eigen.sign(); diff --git a/paddle/operators/linear_chain_crf_op.cc b/paddle/operators/linear_chain_crf_op.cc index 8e079a14e0..896e3657d4 100644 --- a/paddle/operators/linear_chain_crf_op.cc +++ b/paddle/operators/linear_chain_crf_op.cc @@ -261,9 +261,10 @@ REGISTER_OP(linear_chain_crf, ops::LinearChainCRFOp, ops::LinearChainCRFOpMaker, linear_chain_crf_grad, ops::LinearChainCRFGradOp); REGISTER_OP_CPU_KERNEL( linear_chain_crf, - ops::LinearChainCRFOpKernel, - ops::LinearChainCRFOpKernel); + ops::LinearChainCRFOpKernel, + ops::LinearChainCRFOpKernel); REGISTER_OP_CPU_KERNEL( linear_chain_crf_grad, - ops::LinearChainCRFGradOpKernel, - ops::LinearChainCRFGradOpKernel); + ops::LinearChainCRFGradOpKernel, + ops::LinearChainCRFGradOpKernel); diff --git a/paddle/operators/linear_chain_crf_op.cu b/paddle/operators/linear_chain_crf_op.cu index 6fc8995f4c..3b105ec341 100644 --- a/paddle/operators/linear_chain_crf_op.cu +++ b/paddle/operators/linear_chain_crf_op.cu @@ -16,11 +16,12 @@ limitations under the License. */ namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL( +REGISTER_OP_CUDA_KERNEL( linear_chain_crf, - ops::LinearChainCRFOpKernel, - ops::LinearChainCRFOpKernel); -REGISTER_OP_GPU_KERNEL( + ops::LinearChainCRFOpKernel, + ops::LinearChainCRFOpKernel); +REGISTER_OP_CUDA_KERNEL( linear_chain_crf_grad, - ops::LinearChainCRFGradOpKernel, - ops::LinearChainCRFGradOpKernel); + ops::LinearChainCRFGradOpKernel, + ops::LinearChainCRFGradOpKernel); diff --git a/paddle/operators/linear_chain_crf_op.h b/paddle/operators/linear_chain_crf_op.h index 014bbfa758..694584e79c 100644 --- a/paddle/operators/linear_chain_crf_op.h +++ b/paddle/operators/linear_chain_crf_op.h @@ -50,7 +50,7 @@ template using EigenMatrix = framework::EigenMatrix; -template +template class LinearChainCRFOpKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& ctx) const override { @@ -137,7 +137,8 @@ class LinearChainCRFOpKernel : public framework::OpKernel { framework::make_ddim({static_cast(batch_size), 1}), platform::CPUPlace()); - auto place = ctx.GetEigenDevice(); + auto& place = *ctx.template device_context() + .eigen_device(); auto x = EigenMatrix::From(*emission_weights); auto x_row_max = EigenMatrix::From(emission_row_max); x_row_max.device(place) = @@ -287,7 +288,7 @@ class LinearChainCRFOpKernel : public framework::OpKernel { } }; -template +template class LinearChainCRFGradOpKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& ctx) const override { @@ -359,8 +360,7 @@ class LinearChainCRFGradOpKernel : public framework::OpKernel { emission_grad->mutable_data(platform::CPUPlace()); if (transition_grad) { transition_grad->mutable_data(platform::CPUPlace()); - math::SetConstant()(ctx.device_context(), - transition_grad, 0.); + math::set_constant(ctx.device_context(), transition_grad, 0.); } // Now, all the inputs and outputs should be on the CPU memory. @@ -384,10 +384,10 @@ class LinearChainCRFGradOpKernel : public framework::OpKernel { Tensor one_seq_beta = beta.Slice(start_pos, end_pos); Tensor one_seq_emission_grad = emission_grad->Slice(start_pos, end_pos); - BackwardOneSequence(ctx.device_context(), ll_grad[i], - one_seq_emission_exps, *transition_exps, - one_seq_alpha, one_seq_label, &one_seq_beta, - transition_grad, &one_seq_emission_grad); + BackwardOneSequence( + ctx.template device_context(), ll_grad[i], + one_seq_emission_exps, *transition_exps, one_seq_alpha, one_seq_label, + &one_seq_beta, transition_grad, &one_seq_emission_grad); } if (platform::is_gpu_place(ctx.GetPlace())) { @@ -441,8 +441,8 @@ class LinearChainCRFGradOpKernel : public framework::OpKernel { copyTensor(ctx, transition_grad_src, transition_grad_dst); } - void BackwardOneSequence(const platform::DeviceContext& ctx, const T ll_grad, - const Tensor& emission_exps, + void BackwardOneSequence(const platform::CPUDeviceContext& ctx, + const T ll_grad, const Tensor& emission_exps, const Tensor& transition_exps, const Tensor& alpha, const Tensor& label, Tensor* beta, Tensor* transition_grad, @@ -481,7 +481,7 @@ class LinearChainCRFGradOpKernel : public framework::OpKernel { auto alpha_mat = EigenMatrix::From(alpha); auto beta_mat = EigenMatrix::From(*beta); - auto* place = ctx.GetEigenDevice(); + auto* place = ctx.eigen_device(); auto prob = alpha_mat * beta_mat; auto row_sum = prob.sum(Eigen::DSizes(1)) .reshape(Eigen::DSizes(seq_length, 1)) diff --git a/paddle/operators/lod_reset_op.cu b/paddle/operators/lod_reset_op.cu index 5244a17c3a..f7c2358980 100644 --- a/paddle/operators/lod_reset_op.cu +++ b/paddle/operators/lod_reset_op.cu @@ -16,9 +16,10 @@ namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL(lod_reset, - ops::LoDResetKernel, - ops::LoDResetKernel); -REGISTER_OP_GPU_KERNEL( - lod_reset_grad, ops::LoDResetGradKernel, - ops::LoDResetGradKernel); +REGISTER_OP_CUDA_KERNEL( + lod_reset, ops::LoDResetKernel, + ops::LoDResetKernel); +REGISTER_OP_CUDA_KERNEL( + lod_reset_grad, + ops::LoDResetGradKernel, + ops::LoDResetGradKernel); diff --git a/paddle/operators/lod_reset_op.h b/paddle/operators/lod_reset_op.h index cbcbf80adc..b86f8b1313 100644 --- a/paddle/operators/lod_reset_op.h +++ b/paddle/operators/lod_reset_op.h @@ -20,7 +20,7 @@ namespace paddle { namespace operators { -template +template class LoDResetKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& ctx) const { @@ -65,7 +65,7 @@ class LoDResetKernel : public framework::OpKernel { } }; -template +template class LoDResetGradKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& ctx) const { diff --git a/paddle/operators/log_loss_op.cc b/paddle/operators/log_loss_op.cc index 257e5c8a49..4524229a33 100644 --- a/paddle/operators/log_loss_op.cc +++ b/paddle/operators/log_loss_op.cc @@ -109,7 +109,8 @@ class LogLossGradOp : public framework::OperatorWithKernel { namespace ops = paddle::operators; REGISTER_OP(log_loss, ops::LogLossOp, ops::LogLossOpMaker, log_loss_grad, ops::LogLossGradOp); -REGISTER_OP_CPU_KERNEL(log_loss, - ops::LogLossKernel); REGISTER_OP_CPU_KERNEL( - log_loss_grad, ops::LogLossGradKernel); + log_loss, ops::LogLossKernel); +REGISTER_OP_CPU_KERNEL( + log_loss_grad, + ops::LogLossGradKernel); diff --git a/paddle/operators/log_loss_op.cu b/paddle/operators/log_loss_op.cu index 6c189ef341..e87ac7d12a 100644 --- a/paddle/operators/log_loss_op.cu +++ b/paddle/operators/log_loss_op.cu @@ -16,7 +16,8 @@ #include "paddle/operators/log_loss_op.h" namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL(log_loss, - ops::LogLossKernel); -REGISTER_OP_GPU_KERNEL( - log_loss_grad, ops::LogLossGradKernel); +REGISTER_OP_CUDA_KERNEL( + log_loss, ops::LogLossKernel); +REGISTER_OP_CUDA_KERNEL( + log_loss_grad, + ops::LogLossGradKernel); diff --git a/paddle/operators/log_loss_op.h b/paddle/operators/log_loss_op.h index 73404fce91..743eddb740 100644 --- a/paddle/operators/log_loss_op.h +++ b/paddle/operators/log_loss_op.h @@ -24,7 +24,7 @@ template using EigenVector = framework::EigenVector; -template +template class LogLossKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& ctx) const override { @@ -38,7 +38,7 @@ class LogLossKernel : public framework::OpKernel { auto label = EigenVector::Flatten(*ctx.Input("Labels")); auto loss = EigenVector::Flatten(*loss_out); - auto place = ctx.GetEigenDevice(); + auto& place = *ctx.template device_context().eigen_device(); loss.device(place) = (-(label * (prediction + epsilon).log()) - ((static_cast(1) - label) * @@ -46,7 +46,7 @@ class LogLossKernel : public framework::OpKernel { } }; -template +template class LogLossGradKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& ctx) const override { @@ -59,7 +59,7 @@ class LogLossGradKernel : public framework::OpKernel { auto* dpred = ctx.Output(framework::GradVarName("Predicted")); auto dl = EigenVector::Flatten(*dloss); - auto place = ctx.GetEigenDevice(); + auto& place = *ctx.template device_context().eigen_device(); if (dpred) { dpred->mutable_data(ctx.GetPlace()); diff --git a/paddle/operators/logical_op.cu b/paddle/operators/logical_op.cu index d41239b2ca..7fef60e0c9 100644 --- a/paddle/operators/logical_op.cu +++ b/paddle/operators/logical_op.cu @@ -14,11 +14,11 @@ #include "paddle/operators/logical_op.h" -REGISTER_BINARY_LOGICAL_KERNEL(logical_and, GPU, +REGISTER_BINARY_LOGICAL_KERNEL(logical_and, CUDA, paddle::operators::LogicalAndFunctor); -REGISTER_BINARY_LOGICAL_KERNEL(logical_or, GPU, +REGISTER_BINARY_LOGICAL_KERNEL(logical_or, CUDA, paddle::operators::LogicalOrFunctor); -REGISTER_UNARY_LOGICAL_KERNEL(logical_not, GPU, +REGISTER_UNARY_LOGICAL_KERNEL(logical_not, CUDA, paddle::operators::LogicalNotFunctor); -REGISTER_BINARY_LOGICAL_KERNEL(logical_xor, GPU, +REGISTER_BINARY_LOGICAL_KERNEL(logical_xor, CUDA, paddle::operators::LogicalXorFunctor); diff --git a/paddle/operators/logical_op.h b/paddle/operators/logical_op.h index 6e78a7d6ed..629388cac8 100644 --- a/paddle/operators/logical_op.h +++ b/paddle/operators/logical_op.h @@ -47,7 +47,7 @@ struct LogicalXorFunctor { } }; -template +template class BinaryLogicalOpKernel : public framework::OpKernel { public: @@ -57,14 +57,14 @@ class BinaryLogicalOpKernel auto* y = context.Input("Y"); auto* out = context.Output("Out"); Functor binary_func; - platform::Transform trans; - trans(context.device_context(), x->data(), x->data() + x->numel(), - y->data(), out->mutable_data(context.GetPlace()), - binary_func); + platform::Transform trans; + trans(context.template device_context(), x->data(), + x->data() + x->numel(), y->data(), + out->mutable_data(context.GetPlace()), binary_func); } }; -template +template class UnaryLogicalOpKernel : public framework::OpKernel { public: @@ -73,8 +73,9 @@ class UnaryLogicalOpKernel auto* x = context.Input("X"); auto* out = context.Output("Out"); Functor unary_func; - platform::Transform trans; - trans(context.device_context(), x->data(), x->data() + x->numel(), + platform::Transform trans; + trans(context.template device_context(), x->data(), + x->data() + x->numel(), out->mutable_data(context.GetPlace()), unary_func); } }; @@ -85,9 +86,9 @@ class UnaryLogicalOpKernel #define REGISTER_BINARY_LOGICAL_KERNEL(op_type, dev, functor) \ REGISTER_OP_##dev##_KERNEL( \ op_type, ::paddle::operators::BinaryLogicalOpKernel< \ - ::paddle::platform::dev##Place, functor>); + ::paddle::platform::dev##DeviceContext, functor>); #define REGISTER_UNARY_LOGICAL_KERNEL(op_type, dev, functor) \ REGISTER_OP_##dev##_KERNEL( \ op_type, ::paddle::operators::UnaryLogicalOpKernel< \ - ::paddle::platform::dev##Place, functor>); + ::paddle::platform::dev##DeviceContext, functor>); diff --git a/paddle/operators/lookup_table_op.cu b/paddle/operators/lookup_table_op.cu index 84b044184a..9431030a53 100644 --- a/paddle/operators/lookup_table_op.cu +++ b/paddle/operators/lookup_table_op.cu @@ -85,6 +85,8 @@ template class LookupTableGradCUDAKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { + auto& dev_ctx = + context.template device_context(); bool is_sparse = context.Attr("is_sparse"); if (is_sparse) { auto* ids = context.Input("Ids"); @@ -95,7 +97,7 @@ class LookupTableGradCUDAKernel : public framework::OpKernel { auto* ids_data = ids->data(); auto ids_dim = ids->dims(); - auto stream = context.cuda_device_context().stream(); + auto stream = dev_ctx.stream(); // copy GPU memory to CPU pinned memory framework::Vector new_rows; new_rows.resize(ids_dim[0]); @@ -129,14 +131,11 @@ class LookupTableGradCUDAKernel : public framework::OpKernel { T* d_table = d_table_t->mutable_data(context.GetPlace()); auto t = framework::EigenVector::Flatten(*d_table_t); - t.device(context.GetEigenDevice()) = - t.constant(static_cast(0)); + t.device(*dev_ctx.eigen_device()) = t.constant(static_cast(0)); dim3 threads(128, 8); dim3 grids(8, 1); - LookupTableGrad< - T, 128, 8, - 8><<>>( + LookupTableGrad<<>>( d_table, d_output, ids, N, K, D); } } @@ -146,7 +145,8 @@ class LookupTableGradCUDAKernel : public framework::OpKernel { } // namespace paddle namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL(lookup_table, ops::LookupTableCUDAKernel, - ops::LookupTableCUDAKernel); -REGISTER_OP_GPU_KERNEL(lookup_table_grad, ops::LookupTableGradCUDAKernel, - ops::LookupTableGradCUDAKernel); +REGISTER_OP_CUDA_KERNEL(lookup_table, ops::LookupTableCUDAKernel, + ops::LookupTableCUDAKernel); +REGISTER_OP_CUDA_KERNEL(lookup_table_grad, + ops::LookupTableGradCUDAKernel, + ops::LookupTableGradCUDAKernel); diff --git a/paddle/operators/lrn_op.cc b/paddle/operators/lrn_op.cc index e20340e77b..b5b7bc940a 100644 --- a/paddle/operators/lrn_op.cc +++ b/paddle/operators/lrn_op.cc @@ -20,7 +20,7 @@ namespace operators { using framework::Tensor; template -struct LRNFunctor { +struct LRNFunctor { void operator()(const framework::ExecutionContext& ctx, const framework::Tensor& input, framework::Tensor* out, framework::Tensor* mid, int N, int C, int H, int W, int n, @@ -55,11 +55,11 @@ struct LRNFunctor { out_e = x_v * e_mid.reshape(Eigen::DSizes(e_mid.size())).pow(-beta); } }; -template struct LRNFunctor; -template struct LRNFunctor; +template struct LRNFunctor; +template struct LRNFunctor; template -struct LRNGradFunctor { +struct LRNGradFunctor { void operator()(const framework::ExecutionContext& ctx, const framework::Tensor& x, const framework::Tensor& out, const framework::Tensor& mid, framework::Tensor* x_g, @@ -113,8 +113,8 @@ struct LRNGradFunctor { } } }; -template struct LRNGradFunctor; -template struct LRNGradFunctor; +template struct LRNGradFunctor; +template struct LRNGradFunctor; class LRNOp : public framework::OperatorWithKernel { public: @@ -204,7 +204,7 @@ Input(i, x, y), Output(i, x, y) represents an element in an image. C is the number of feature maps of one image. n is a hyper-parameter configured when operator is initialized. The sum in the denominator is the sum of the same positions in the neighboring maps. - + )DOC"); } }; @@ -230,6 +230,7 @@ class LRNOpGrad : public framework::OperatorWithKernel { namespace ops = paddle::operators; REGISTER_OP(lrn, ops::LRNOp, ops::LRNOpMaker, lrn_grad, ops::LRNOpGrad); -REGISTER_OP_CPU_KERNEL(lrn, ops::LRNKernel); -REGISTER_OP_CPU_KERNEL(lrn_grad, - ops::LRNGradKernel); +REGISTER_OP_CPU_KERNEL( + lrn, ops::LRNKernel); +REGISTER_OP_CPU_KERNEL( + lrn_grad, ops::LRNGradKernel); diff --git a/paddle/operators/lrn_op.cu b/paddle/operators/lrn_op.cu index e9a8671233..c6857c2b6d 100644 --- a/paddle/operators/lrn_op.cu +++ b/paddle/operators/lrn_op.cu @@ -69,19 +69,18 @@ void CrossMapNormal(const framework::ExecutionContext& ctx, const T* inputs, const int block_size = 1024; int grid_size = (img_size + block_size - 1) / block_size; - KeCMRNormFillScale< - T><<>>( + auto& dev_ctx = ctx.template device_context(); + KeCMRNormFillScale<<>>( img_size, inputs, mid, C, H, W, n, k, alpha); int input_size = N * H * W * C; grid_size = (input_size + block_size - 1) / block_size; - KeCMRNormOutput< - T><<>>( + KeCMRNormOutput<<>>( input_size, inputs, mid, -beta, outputs); } template -struct LRNFunctor { +struct LRNFunctor { void operator()(const framework::ExecutionContext& ctx, const framework::Tensor& input, framework::Tensor* out, framework::Tensor* mid, int N, int C, int H, int W, int n, @@ -92,8 +91,8 @@ struct LRNFunctor { } }; -template struct LRNFunctor; -template struct LRNFunctor; +template struct LRNFunctor; +template struct LRNFunctor; template __global__ void KeCMRNormDiff(int img_size, const T* x, const T* out, @@ -148,14 +147,14 @@ void CrossMapNormalGrad(const framework::ExecutionContext& ctx, const T* x, const int block_size = 1024; int grid_size = (img_size + block_size - 1) / block_size; - KeCMRNormDiff< - T><<>>( + auto& dev_ctx = ctx.template device_context(); + KeCMRNormDiff<<>>( img_size, x, out, mid, x_g, out_g, C, H, W, n, -beta, 2.0f * alpha * beta); } template -struct LRNGradFunctor { +struct LRNGradFunctor { void operator()(const framework::ExecutionContext& ctx, const framework::Tensor& x, const framework::Tensor& out, const framework::Tensor& mid, framework::Tensor* x_g, @@ -167,12 +166,13 @@ struct LRNGradFunctor { } }; -template struct LRNGradFunctor; -template struct LRNGradFunctor; +template struct LRNGradFunctor; +template struct LRNGradFunctor; } // namespace operators } // namespace paddle namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL(lrn, ops::LRNKernel); -REGISTER_OP_GPU_KERNEL(lrn_grad, - ops::LRNGradKernel); +REGISTER_OP_CUDA_KERNEL( + lrn, ops::LRNKernel); +REGISTER_OP_CUDA_KERNEL( + lrn_grad, ops::LRNGradKernel); diff --git a/paddle/operators/lrn_op.h b/paddle/operators/lrn_op.h index aa7539db4a..44063d3e03 100644 --- a/paddle/operators/lrn_op.h +++ b/paddle/operators/lrn_op.h @@ -29,7 +29,7 @@ struct LRNFunctor { T k, T alpha, T beta); }; -template +template class LRNKernel : public framework::OpKernel { public: using Tensor = framework::Tensor; @@ -65,12 +65,12 @@ class LRNKernel : public framework::OpKernel { PADDLE_ENFORCE(beta >= 0.0, "beta should >= 0.0"); PADDLE_ENFORCE(k >= 0.0, "k should >= 0.0"); - LRNFunctor f; + LRNFunctor f; f(ctx, x, out, mid, N, C, H, W, n, k, alpha, beta); } }; -template +template struct LRNGradFunctor { void operator()(const framework::ExecutionContext& ctx, const framework::Tensor& x, const framework::Tensor& out, @@ -98,7 +98,7 @@ struct LRNGradFunctor { * The upper and lower is the same as forward. The logic of the sum * is also the same as forward. */ -template +template class LRNGradKernel : public framework::OpKernel { public: using Tensor = framework::Tensor; @@ -121,7 +121,7 @@ class LRNGradKernel : public framework::OpKernel { T alpha = ctx.Attr("alpha"); T beta = ctx.Attr("beta"); - LRNGradFunctor f; + LRNGradFunctor f; f(ctx, x, out, mid, x_g, out_g, N, C, H, W, n, alpha, beta); } }; diff --git a/paddle/operators/lstm_op.cc b/paddle/operators/lstm_op.cc index fa8e5f2da8..2db7da30db 100644 --- a/paddle/operators/lstm_op.cc +++ b/paddle/operators/lstm_op.cc @@ -273,8 +273,9 @@ class LSTMGradOp : public framework::OperatorWithKernel { namespace ops = paddle::operators; REGISTER_OP(lstm, ops::LSTMOp, ops::LSTMOpMaker, lstm_grad, ops::LSTMGradOp); -REGISTER_OP_CPU_KERNEL(lstm, ops::LSTMKernel, - ops::LSTMKernel); -REGISTER_OP_CPU_KERNEL(lstm_grad, - ops::LSTMGradKernel, - ops::LSTMGradKernel); +REGISTER_OP_CPU_KERNEL( + lstm, ops::LSTMKernel, + ops::LSTMKernel); +REGISTER_OP_CPU_KERNEL( + lstm_grad, ops::LSTMGradKernel, + ops::LSTMGradKernel); diff --git a/paddle/operators/lstm_op.cu.cc b/paddle/operators/lstm_op.cu.cc index 610cbb03e8..48519bed6f 100644 --- a/paddle/operators/lstm_op.cu.cc +++ b/paddle/operators/lstm_op.cu.cc @@ -15,8 +15,9 @@ #include "paddle/operators/lstm_op.h" namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL(lstm, ops::LSTMKernel, - ops::LSTMKernel); -REGISTER_OP_GPU_KERNEL(lstm_grad, - ops::LSTMGradKernel, - ops::LSTMGradKernel); +REGISTER_OP_CUDA_KERNEL( + lstm, ops::LSTMKernel, + ops::LSTMKernel); +REGISTER_OP_CUDA_KERNEL( + lstm_grad, ops::LSTMGradKernel, + ops::LSTMGradKernel); diff --git a/paddle/operators/lstm_op.h b/paddle/operators/lstm_op.h index a78f548aaf..14abd4bf0a 100644 --- a/paddle/operators/lstm_op.h +++ b/paddle/operators/lstm_op.h @@ -24,16 +24,16 @@ namespace operators { using LoDTensor = framework::LoDTensor; using Tensor = framework::Tensor; -template -inline void ReorderInitState(const platform::DeviceContext& ctx, +template +inline void ReorderInitState(const DeviceContext& ctx, const framework::Tensor& src, const size_t* index, framework::Tensor* dst, bool indexed_src) { - math::CopyMatrixRowsFunctor row_shuffle; + math::CopyMatrixRowsFunctor row_shuffle; dst->mutable_data(src.dims(), ctx.GetPlace()); row_shuffle(ctx, src, index, *dst, indexed_src); } -template +template class LSTMKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& ctx) const override { @@ -52,8 +52,8 @@ class LSTMKernel : public framework::OpKernel { cell_out->mutable_data(ctx.GetPlace()); bool is_reverse = ctx.Attr("is_reverse"); - math::LoDTensor2BatchFunctor to_batch; - auto& device_ctx = ctx.device_context(); + math::LoDTensor2BatchFunctor to_batch; + auto& device_ctx = ctx.template device_context(); to_batch(device_ctx, *input, *batch_gate, true, is_reverse); auto in_dims = input->dims(); @@ -64,7 +64,7 @@ class LSTMKernel : public framework::OpKernel { Tensor b = *bias; b.Resize({bias->numel(), 1}); Tensor gate_bias = b.Slice(0, 4 * frame_size); - math::RowwiseAdd add_bias; + math::RowwiseAdd add_bias; add_bias(device_ctx, *batch_gate, gate_bias, batch_gate); } @@ -88,8 +88,8 @@ class LSTMKernel : public framework::OpKernel { // Since the batch computing for LSTM reorders the input sequence // according to their length. The initialized cell state also needs // to reorder. - ReorderInitState(device_ctx, *cell_t0, order, &ordered_c0, - true); + ReorderInitState(device_ctx, *cell_t0, order, + &ordered_c0, true); lstm_value.prev_state_value = ordered_c0.data(); } @@ -121,9 +121,9 @@ class LSTMKernel : public framework::OpKernel { int pre_h_start = static_cast(batch_starts[n - 1]); int pre_h_end = pre_h_start + cur_batch_size; auto pre_hidden_t = batch_hidden.Slice(pre_h_start, pre_h_end); - math::matmul(device_ctx, pre_hidden_t, false, *weight, false, - static_cast(1.0), &gate_t, - static_cast(1.0)); + math::matmul(device_ctx, pre_hidden_t, false, *weight, + false, static_cast(1.0), &gate_t, + static_cast(1.0)); } else if (hidden_t0) { // If n == 0 and there is no initialized hidden state, that is to say // the H0 is zeros, the calculation W_h * H0 will be skiped. @@ -133,24 +133,24 @@ class LSTMKernel : public framework::OpKernel { // according to their length. The initialized hidden state also needs // to reorder. Tensor ordered_h0; - ReorderInitState(device_ctx, *hidden_t0, order, &ordered_h0, - true); - math::matmul(device_ctx, ordered_h0, false, *weight, false, - static_cast(1.0), &gate_t, - static_cast(1.0)); + ReorderInitState(device_ctx, *hidden_t0, order, + &ordered_h0, true); + math::matmul(device_ctx, ordered_h0, false, *weight, + false, static_cast(1.0), &gate_t, + static_cast(1.0)); } lstm_value.gate_value = gate_t.data(); lstm_value.output_value = out_t.data(); lstm_value.state_value = cell_t.data(); lstm_value.state_active_value = cell_pre_act_t.data(); - math::LstmUnitFunctor::compute(device_ctx, lstm_value, - frame_size, cur_batch_size, - gate_act, cell_act, cand_act); + math::LstmUnitFunctor::compute( + device_ctx, lstm_value, frame_size, cur_batch_size, gate_act, + cell_act, cand_act); lstm_value.prev_state_value = lstm_value.state_value; } - math::Batch2LoDTensorFunctor to_seq; + math::Batch2LoDTensorFunctor to_seq; batch_hidden.set_lod(batch_gate->lod()); // restore the output hidden in LoDTensor from the batch hidden to_seq(device_ctx, batch_hidden, *hidden_out); @@ -161,7 +161,7 @@ class LSTMKernel : public framework::OpKernel { } }; -template +template class LSTMGradKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& ctx) const override { @@ -187,8 +187,8 @@ class LSTMGradKernel : public framework::OpKernel { auto* h0_g = ctx.Output(framework::GradVarName("H0")); auto* c0_g = ctx.Output(framework::GradVarName("C0")); - auto& device_ctx = ctx.device_context(); - math::SetConstant zero; + auto& device_ctx = ctx.template device_context(); + math::SetConstant zero; if (weight_g) { weight_g->mutable_data(ctx.GetPlace()); zero(device_ctx, weight_g, static_cast(0.0)); @@ -200,7 +200,8 @@ class LSTMGradKernel : public framework::OpKernel { Tensor ordered_h0, ordered_c0, ordered_h0_g, ordered_c0_g; const size_t* order = batch_gate->lod()[2].data(); if (c0) { - ReorderInitState(device_ctx, *c0, order, &ordered_c0, true); + ReorderInitState(device_ctx, *c0, order, &ordered_c0, + true); } if (c0 && c0_g) { ordered_c0_g.mutable_data(c0_g->dims(), ctx.GetPlace()); @@ -240,10 +241,10 @@ class LSTMGradKernel : public framework::OpKernel { lstm_grad.check_og_grad = nullptr; } - math::LoDTensor2BatchFunctor to_batch; + math::LoDTensor2BatchFunctor to_batch; auto ToBatch = [&batch_gate, &to_batch]( - const platform::DeviceContext& ctx, const framework::LoDTensor& src, + const DeviceContext& ctx, const framework::LoDTensor& src, const framework::DDim& dims, framework::LoDTensor& dst) { dst.mutable_data(dims, ctx.GetPlace()); dst.set_lod(batch_gate->lod()); @@ -299,7 +300,7 @@ class LSTMGradKernel : public framework::OpKernel { } int cur_batch_size = bend - bstart; - math::LstmUnitGradFunctor::compute( + math::LstmUnitGradFunctor::compute( device_ctx, lstm_value, lstm_grad, frame_size, cur_batch_size, gate_act, cell_act, cand_act); @@ -307,33 +308,34 @@ class LSTMGradKernel : public framework::OpKernel { int pre_h_start = static_cast(batch_starts[n - 1]); int pre_h_end = pre_h_start + cur_batch_size; auto pre_hidden_g = batch_hidden_g.Slice(pre_h_start, pre_h_end); - math::matmul(device_ctx, gate_g, false, *weight, true, - static_cast(1.0), &pre_hidden_g, - static_cast(1.0)); + math::matmul(device_ctx, gate_g, false, *weight, true, + static_cast(1.0), &pre_hidden_g, + static_cast(1.0)); if (weight_g) { /* backward weight */ auto pre_hidden = batch_hidden.Slice(pre_h_start, pre_h_end); - math::matmul(device_ctx, pre_hidden, true, gate_g, false, - static_cast(1.0), weight_g, - static_cast(1.0)); + math::matmul(device_ctx, pre_hidden, true, gate_g, + false, static_cast(1.0), weight_g, + static_cast(1.0)); } } else { if (h0 && weight_g) { - ReorderInitState(device_ctx, *h0, order, &ordered_h0, true); - math::matmul(device_ctx, ordered_h0, true, gate_g, false, - static_cast(1.0), weight_g, - static_cast(1.0)); + ReorderInitState(device_ctx, *h0, order, + &ordered_h0, true); + math::matmul(device_ctx, ordered_h0, true, gate_g, + false, static_cast(1.0), weight_g, + static_cast(1.0)); } if (h0 && h0_g) { ordered_h0_g.mutable_data(h0_g->dims(), ctx.GetPlace()); - math::matmul(device_ctx, gate_g, false, *weight, true, - static_cast(1.0), &ordered_h0_g, - static_cast(0.0)); + math::matmul(device_ctx, gate_g, false, *weight, + true, static_cast(1.0), + &ordered_h0_g, static_cast(0.0)); } } } - math::Batch2LoDTensorFunctor to_seq; + math::Batch2LoDTensorFunctor to_seq; if (in_g) { /* backward data */ in_g->mutable_data(ctx.GetPlace()); @@ -344,15 +346,17 @@ class LSTMGradKernel : public framework::OpKernel { Tensor b_g = *bias_g; b_g.Resize({bias_g->numel(), 1}); Tensor gate_bias_g = b_g.Slice(0, 4 * frame_size); - math::ColwiseSum col_sum; + math::ColwiseSum col_sum; col_sum(device_ctx, batch_gate_g, &gate_bias_g); } if (h0 && h0_g) { - ReorderInitState(device_ctx, ordered_h0_g, order, h0_g, false); + ReorderInitState(device_ctx, ordered_h0_g, order, h0_g, + false); } if (c0 && c0_g) { - ReorderInitState(device_ctx, ordered_c0_g, order, c0_g, false); + ReorderInitState(device_ctx, ordered_c0_g, order, c0_g, + false); } } }; diff --git a/paddle/operators/lstm_unit_op.cu b/paddle/operators/lstm_unit_op.cu index e192283aa0..291f2c295e 100644 --- a/paddle/operators/lstm_unit_op.cu +++ b/paddle/operators/lstm_unit_op.cu @@ -173,7 +173,7 @@ class LstmUnitGradOpCUDAKernel : public framework::OpKernel { } // namespace paddle namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL(lstm_unit, ops::LstmUnitOpCUDAKernel, - ops::LstmUnitOpCUDAKernel); -REGISTER_OP_GPU_KERNEL(lstm_unit_grad, ops::LstmUnitGradOpCUDAKernel, - ops::LstmUnitGradOpCUDAKernel); +REGISTER_OP_CUDA_KERNEL(lstm_unit, ops::LstmUnitOpCUDAKernel, + ops::LstmUnitOpCUDAKernel); +REGISTER_OP_CUDA_KERNEL(lstm_unit_grad, ops::LstmUnitGradOpCUDAKernel, + ops::LstmUnitGradOpCUDAKernel); diff --git a/paddle/operators/lstm_unit_op.h b/paddle/operators/lstm_unit_op.h index 38cb298f92..61705675d9 100644 --- a/paddle/operators/lstm_unit_op.h +++ b/paddle/operators/lstm_unit_op.h @@ -35,7 +35,7 @@ inline T tanh(T x) { return 2. * sigmoid(2. * x) - 1.; } -template +template class LstmUnitKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& ctx) const override { @@ -78,7 +78,7 @@ class LstmUnitKernel : public framework::OpKernel { } }; -template +template class LstmUnitGradKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& ctx) const override { diff --git a/paddle/operators/margin_rank_loss_op.cc b/paddle/operators/margin_rank_loss_op.cc index d7e8a0ea76..42e8961c0e 100644 --- a/paddle/operators/margin_rank_loss_op.cc +++ b/paddle/operators/margin_rank_loss_op.cc @@ -117,7 +117,7 @@ REGISTER_OP(margin_rank_loss, ops::MarginRankLossOp, ops::MarginRankLossGradOp); REGISTER_OP_CPU_KERNEL( margin_rank_loss, - ops::MarginRankLossKernel); + ops::MarginRankLossKernel); REGISTER_OP_CPU_KERNEL( margin_rank_loss_grad, - ops::MarginRankLossGradKernel); + ops::MarginRankLossGradKernel); diff --git a/paddle/operators/margin_rank_loss_op.cu b/paddle/operators/margin_rank_loss_op.cu index 3a639f25d4..1c2afccc5b 100644 --- a/paddle/operators/margin_rank_loss_op.cu +++ b/paddle/operators/margin_rank_loss_op.cu @@ -16,9 +16,9 @@ namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL( +REGISTER_OP_CUDA_KERNEL( margin_rank_loss, - ops::MarginRankLossKernel); -REGISTER_OP_GPU_KERNEL( + ops::MarginRankLossKernel); +REGISTER_OP_CUDA_KERNEL( margin_rank_loss_grad, - ops::MarginRankLossGradKernel); + ops::MarginRankLossGradKernel); diff --git a/paddle/operators/margin_rank_loss_op.h b/paddle/operators/margin_rank_loss_op.h index 8d0830147e..9c1f96cac1 100644 --- a/paddle/operators/margin_rank_loss_op.h +++ b/paddle/operators/margin_rank_loss_op.h @@ -34,7 +34,7 @@ struct Heaviside { } }; -template +template class MarginRankLossKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& ctx) const { @@ -56,13 +56,13 @@ class MarginRankLossKernel : public framework::OpKernel { auto x1 = framework::EigenVector::Flatten(*x1_t); auto x2 = framework::EigenVector::Flatten(*x2_t); - auto& dev = ctx.GetEigenDevice(); + auto& dev = *ctx.template device_context().eigen_device(); out.device(dev) = (-label * (x1 - x2) + margin).unaryExpr(ReLU()); act.device(dev) = out.unaryExpr(Heaviside()); } }; -template +template class MarginRankLossGradKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& ctx) const { @@ -78,7 +78,7 @@ class MarginRankLossGradKernel : public framework::OpKernel { auto d_out = framework::EigenVector::Flatten(*d_out_t); auto act = framework::EigenVector::Flatten(*act_t); auto label = framework::EigenVector::Flatten(*label_t); - auto& dev = ctx.GetEigenDevice(); + auto& dev = *ctx.template device_context().eigen_device(); // compute d_x1 if (d_x1_t) { diff --git a/paddle/operators/math/context_project.cc b/paddle/operators/math/context_project.cc index f82ea5d7be..980dd90df8 100644 --- a/paddle/operators/math/context_project.cc +++ b/paddle/operators/math/context_project.cc @@ -18,8 +18,8 @@ namespace paddle { namespace operators { namespace math { -template class ContextProjectFunctor; -template class ContextProjectFunctor; +template class ContextProjectFunctor; +template class ContextProjectFunctor; } // namespace math } // namespace operators diff --git a/paddle/operators/math/context_project.cu b/paddle/operators/math/context_project.cu index 04eeed543c..934e3df645 100644 --- a/paddle/operators/math/context_project.cu +++ b/paddle/operators/math/context_project.cu @@ -20,8 +20,8 @@ namespace paddle { namespace operators { namespace math { -template class ContextProjectFunctor; -template class ContextProjectFunctor; +template class ContextProjectFunctor; +template class ContextProjectFunctor; } // namespace math } // namespace operators diff --git a/paddle/operators/math/context_project.h b/paddle/operators/math/context_project.h index d853507188..4036614086 100644 --- a/paddle/operators/math/context_project.h +++ b/paddle/operators/math/context_project.h @@ -81,17 +81,17 @@ using LoDTensor = framework::LoDTensor; * */ -template +template class ContextProjectFunctor { public: - void operator()(const platform::DeviceContext& context, const LoDTensor& in, + void operator()(const DeviceContext& context, const LoDTensor& in, const Tensor& padding_data, bool padding_trainable, const int context_start, const int context_length, const int context_stride, const int up_pad, const int down_pad, Tensor* col) { auto lod_level_0 = in.lod()[0]; - math::Im2ColFunctor im2col_ocf; + math::Im2ColFunctor im2col_ocf; std::vector dilation({1, 1}); std::vector padding({up_pad, 0, down_pad, 0}); @@ -188,17 +188,17 @@ class ContextProjectFunctor { } }; -template +template class ContextProjectGradFunctor { public: - void operator()(const platform::DeviceContext& context, const LoDTensor& in, + void operator()(const DeviceContext& context, const LoDTensor& in, bool padding_trainable, const int context_start, const int context_length, const int context_stride, const int up_pad, const int down_pad, bool pad_grad, bool input_grad, Tensor* padding_data, Tensor* col) { auto lod_level_0 = in.lod()[0]; - math::Col2ImFunctor col2im_ocf; + math::Col2ImFunctor col2im_ocf; std::vector dilation({1, 1}); std::vector padding({up_pad, 0, down_pad, 0}); @@ -258,8 +258,8 @@ class ContextProjectGradFunctor { Tensor out_t_sub = out_t.Slice(k * context_length, k * context_length + padding_size); Tensor w_sub = padding_data->Slice(k, k + padding_size); - axpy(context, w_sub.numel(), static_cast(1), - out_t_sub.data(), w_sub.data()); + axpy(context, w_sub.numel(), static_cast(1), + out_t_sub.data(), w_sub.data()); } } if (down_pad > 0) { @@ -290,8 +290,8 @@ class ContextProjectGradFunctor { (down_pad_begin_row + t) * context_length); Tensor w_sub = padding_data->Slice( up_pad + padding_idx, up_pad + padding_idx + padding_size); - axpy(context, w_sub.numel(), static_cast(1), - out_t_sub.data(), w_sub.data()); + axpy(context, w_sub.numel(), static_cast(1), + out_t_sub.data(), w_sub.data()); } } out_t.Resize({sequence_height, context_length * sequence_width}); diff --git a/paddle/operators/math/cross_entropy.cc b/paddle/operators/math/cross_entropy.cc index cf238a58e0..6011a196d4 100644 --- a/paddle/operators/math/cross_entropy.cc +++ b/paddle/operators/math/cross_entropy.cc @@ -24,9 +24,9 @@ template ; template -class CrossEntropyFunctor { +class CrossEntropyFunctor { public: - void operator()(const platform::DeviceContext& ctx, framework::Tensor* out, + void operator()(const platform::CPUDeviceContext& ctx, framework::Tensor* out, const framework::Tensor* prob, const framework::Tensor* labels, const bool softLabel) { const int batch_size = prob->dims()[0]; @@ -35,7 +35,7 @@ class CrossEntropyFunctor { auto lbl = EigenMatrix::From(*labels); auto loss = EigenMatrix::From(*out); - loss.device(*ctx.GetEigenDevice()) = + loss.device(*ctx.eigen_device()) = -((lbl * in.log().unaryExpr(math::TolerableValue())) .sum(Eigen::DSizes(1)) .reshape(Eigen::DSizes(batch_size, 1))); @@ -53,8 +53,8 @@ class CrossEntropyFunctor { } }; -template class CrossEntropyFunctor; -template class CrossEntropyFunctor; +template class CrossEntropyFunctor; +template class CrossEntropyFunctor; } // namespace math } // namespace operators } // namespace paddle diff --git a/paddle/operators/math/cross_entropy.cu b/paddle/operators/math/cross_entropy.cu index 651c08f740..2132d49c93 100644 --- a/paddle/operators/math/cross_entropy.cu +++ b/paddle/operators/math/cross_entropy.cu @@ -95,10 +95,10 @@ __global__ void SoftCrossEntropyKernel(T* Y, const T* X, const T* label, using Tensor = framework::Tensor; template -class CrossEntropyFunctor { +class CrossEntropyFunctor { public: - void operator()(const platform::DeviceContext& ctx, framework::Tensor* out, - const framework::Tensor* prob, + void operator()(const platform::CUDADeviceContext& ctx, + framework::Tensor* out, const framework::Tensor* prob, const framework::Tensor* labels, bool softLabel) { const T* prob_data = prob->data(); T* loss_data = out->mutable_data(ctx.GetPlace()); @@ -118,16 +118,14 @@ class CrossEntropyFunctor { const int64_t* label_data = labels->data(); int block = 512; int grid = (batch_size + block - 1) / block; - CrossEntropyKernel<<< - grid, block, 0, - reinterpret_cast(ctx).stream()>>>( + CrossEntropyKernel<<>>( loss_data, prob_data, label_data, batch_size, class_num); } } }; -template class CrossEntropyFunctor; -template class CrossEntropyFunctor; +template class CrossEntropyFunctor; +template class CrossEntropyFunctor; } // namespace math } // namespace operators } // namespace paddle diff --git a/paddle/operators/math/cross_entropy.h b/paddle/operators/math/cross_entropy.h index 70ed9ddd55..677adb5ada 100644 --- a/paddle/operators/math/cross_entropy.h +++ b/paddle/operators/math/cross_entropy.h @@ -33,11 +33,11 @@ struct TolerableValue { } }; -template +template class CrossEntropyFunctor { public: - void operator()(const platform::DeviceContext& context, - framework::Tensor* out, const framework::Tensor* prob, + void operator()(const DeviceContext& context, framework::Tensor* out, + const framework::Tensor* prob, const framework::Tensor* labels, const bool softLabel); }; } // namespace math diff --git a/paddle/operators/math/gru_compute.cc b/paddle/operators/math/gru_compute.cc index ae4e47b014..d570c68cd4 100644 --- a/paddle/operators/math/gru_compute.cc +++ b/paddle/operators/math/gru_compute.cc @@ -19,14 +19,14 @@ namespace operators { namespace math { template -struct GRUUnitFunctor { - static void compute(const platform::DeviceContext &context, +struct GRUUnitFunctor { + static void compute(const platform::CPUDeviceContext &context, hl_gru_value value, int frame_size, int batch_size, activation_mode_t active_node, activation_mode_t active_gate) { #ifndef __NVCC__ if (value.prev_out_value) { - math::gemm( + math::gemm( context, false, false, batch_size, frame_size * 2, frame_size, 1, value.prev_out_value, frame_size, value.gate_weight, frame_size * 2, 1, value.gate_value, frame_size * 3); @@ -36,7 +36,7 @@ struct GRUUnitFunctor { frame_size, batch_size, active_gate); if (value.prev_out_value) { - math::gemm( + math::gemm( context, false, false, batch_size, frame_size, frame_size, 1, value.reset_output_value, frame_size, value.state_weight, frame_size, 1, value.gate_value + frame_size * 2, frame_size * 3); @@ -49,8 +49,8 @@ struct GRUUnitFunctor { }; template -struct GRUUnitGradFunctor { - static void compute(const platform::DeviceContext &context, +struct GRUUnitGradFunctor { + static void compute(const platform::CPUDeviceContext &context, hl_gru_value value, hl_gru_grad grad, int frame_size, int batch_size, activation_mode_t active_node, @@ -60,13 +60,13 @@ struct GRUUnitGradFunctor { grad, frame_size, batch_size, active_node); if (value.prev_out_value && grad.prev_out_grad) { - math::gemm( + math::gemm( context, false, true, batch_size, frame_size, frame_size, 1, grad.gate_grad + frame_size * 2, frame_size * 3, value.state_weight, frame_size, 0, grad.reset_output_grad, frame_size); if (grad.state_weight_grad) { - math::gemm( + math::gemm( context, true, false, frame_size, frame_size, batch_size, 1, value.reset_output_value, frame_size, grad.gate_grad + frame_size * 2, frame_size * 3, 1, @@ -78,13 +78,13 @@ struct GRUUnitGradFunctor { grad, frame_size, batch_size, active_gate); if (grad.prev_out_grad && value.prev_out_value) { - math::gemm( + math::gemm( context, false, true, batch_size, frame_size, frame_size * 2, 1, grad.gate_grad, frame_size * 3, value.gate_weight, frame_size * 2, 1, grad.prev_out_grad, frame_size); if (grad.gate_weight_grad) { - math::gemm( + math::gemm( context, true, false, frame_size, frame_size * 2, batch_size, 1, value.prev_out_value, frame_size, grad.gate_grad, frame_size * 3, 1, grad.gate_weight_grad, frame_size * 2); @@ -94,10 +94,10 @@ struct GRUUnitGradFunctor { } }; -template struct GRUUnitFunctor; -template struct GRUUnitFunctor; -template struct GRUUnitGradFunctor; -template struct GRUUnitGradFunctor; +template struct GRUUnitFunctor; +template struct GRUUnitFunctor; +template struct GRUUnitGradFunctor; +template struct GRUUnitGradFunctor; } // namespace math } // namespace operators diff --git a/paddle/operators/math/gru_compute.cu b/paddle/operators/math/gru_compute.cu index 0252bdbdb6..dd518cd1e4 100644 --- a/paddle/operators/math/gru_compute.cu +++ b/paddle/operators/math/gru_compute.cu @@ -19,13 +19,12 @@ namespace operators { namespace math { template -struct GRUUnitFunctor { - static void compute(const platform::DeviceContext &context, +struct GRUUnitFunctor { + static void compute(const platform::CUDADeviceContext &context, hl_gru_value value, int frame_size, int batch_size, activation_mode_t active_node, activation_mode_t active_gate) { - auto stream = - reinterpret_cast(context).stream(); + auto stream = context.stream(); dim3 threads; dim3 grid; if (batch_size == 1) { @@ -39,7 +38,7 @@ struct GRUUnitFunctor { } if (value.prev_out_value) { - math::gemm( + math::gemm( context, false, false, batch_size, frame_size * 2, frame_size, 1, value.prev_out_value, frame_size, value.gate_weight, frame_size * 2, 1, value.gate_value, frame_size * 3); @@ -62,7 +61,7 @@ struct GRUUnitFunctor { } if (value.prev_out_value) { - math::gemm( + math::gemm( context, false, false, batch_size, frame_size, frame_size, 1, value.reset_output_value, frame_size, value.state_weight, frame_size, 1, value.gate_value + frame_size * 2, frame_size * 3); @@ -87,14 +86,13 @@ struct GRUUnitFunctor { }; template -struct GRUUnitGradFunctor { - static void compute(const platform::DeviceContext &context, +struct GRUUnitGradFunctor { + static void compute(const platform::CUDADeviceContext &context, hl_gru_value value, hl_gru_grad grad, int frame_size, int batch_size, activation_mode_t active_node, activation_mode_t active_gate) { - auto stream = - reinterpret_cast(context).stream(); + auto stream = context.stream(); dim3 threads; dim3 grid; if (batch_size == 1) { @@ -124,13 +122,13 @@ struct GRUUnitGradFunctor { } if (value.prev_out_value && grad.prev_out_grad) { - math::gemm( + math::gemm( context, false, true, batch_size, frame_size, frame_size, 1, grad.gate_grad + frame_size * 2, frame_size * 3, value.state_weight, frame_size, 0, grad.reset_output_grad, frame_size); if (grad.state_weight_grad) { - math::gemm( + math::gemm( context, true, false, frame_size, frame_size, batch_size, 1, value.reset_output_value, frame_size, grad.gate_grad + frame_size * 2, frame_size * 3, 1, @@ -155,13 +153,13 @@ struct GRUUnitGradFunctor { } if (grad.prev_out_grad && value.prev_out_value) { - math::gemm( + math::gemm( context, false, true, batch_size, frame_size, frame_size * 2, 1, grad.gate_grad, frame_size * 3, value.gate_weight, frame_size * 2, 1, grad.prev_out_grad, frame_size); if (grad.gate_weight_grad) { - math::gemm( + math::gemm( context, true, false, frame_size, frame_size * 2, batch_size, 1, value.prev_out_value, frame_size, grad.gate_grad, frame_size * 3, 1, grad.gate_weight_grad, frame_size * 2); @@ -170,10 +168,10 @@ struct GRUUnitGradFunctor { } }; -template struct GRUUnitFunctor; -template struct GRUUnitFunctor; -template struct GRUUnitGradFunctor; -template struct GRUUnitGradFunctor; +template struct GRUUnitFunctor; +template struct GRUUnitFunctor; +template struct GRUUnitGradFunctor; +template struct GRUUnitGradFunctor; } // namespace math } // namespace operators diff --git a/paddle/operators/math/gru_compute.h b/paddle/operators/math/gru_compute.h index 58ea59f68e..ca1343cb2c 100644 --- a/paddle/operators/math/gru_compute.h +++ b/paddle/operators/math/gru_compute.h @@ -40,19 +40,18 @@ struct hl_gru_grad { T *prev_out_grad; }; -template +template struct GRUUnitFunctor { - static void compute(const platform::DeviceContext &context, - hl_gru_value value, int frame_size, int batch_size, + static void compute(const DeviceContext &context, hl_gru_value value, + int frame_size, int batch_size, activation_mode_t active_node, activation_mode_t active_gate); }; -template +template struct GRUUnitGradFunctor { - static void compute(const platform::DeviceContext &context, - hl_gru_value value, hl_gru_grad grad, - int frame_size, int batch_size, + static void compute(const DeviceContext &context, hl_gru_value value, + hl_gru_grad grad, int frame_size, int batch_size, activation_mode_t active_node, activation_mode_t active_gate); }; diff --git a/paddle/operators/math/im2col.cc b/paddle/operators/math/im2col.cc index c10c44c520..707ebf0596 100644 --- a/paddle/operators/math/im2col.cc +++ b/paddle/operators/math/im2col.cc @@ -25,9 +25,9 @@ namespace math { */ template class Im2ColFunctor { + platform::CPUDeviceContext, T> { public: - void operator()(const platform::DeviceContext& context, + void operator()(const platform::CPUDeviceContext& context, const framework::Tensor& im, const std::vector& dilation, const std::vector& stride, const std::vector& padding, framework::Tensor* col) { @@ -90,9 +90,9 @@ class Im2ColFunctor class Col2ImFunctor { + platform::CPUDeviceContext, T> { public: - void operator()(const platform::DeviceContext& context, + void operator()(const platform::CPUDeviceContext& context, const framework::Tensor& col, const std::vector& dilation, const std::vector& stride, @@ -149,13 +149,13 @@ class Col2ImFunctor; + platform::CPUDeviceContext, float>; template class Im2ColFunctor; + platform::CPUDeviceContext, double>; template class Col2ImFunctor; + platform::CPUDeviceContext, float>; template class Col2ImFunctor; + platform::CPUDeviceContext, double>; /* * im = [input_channels, input_height, input_width] @@ -164,9 +164,9 @@ template class Col2ImFunctor class Im2ColFunctor { + platform::CPUDeviceContext, T> { public: - void operator()(const platform::DeviceContext& context, + void operator()(const platform::CPUDeviceContext& context, const framework::Tensor& im, const std::vector& dilation, const std::vector& stride, const std::vector& padding, framework::Tensor* col) { @@ -235,9 +235,9 @@ class Im2ColFunctor class Col2ImFunctor { + platform::CPUDeviceContext, T> { public: - void operator()(const platform::DeviceContext& context, + void operator()(const platform::CPUDeviceContext& context, const framework::Tensor& col, const std::vector& dilation, const std::vector& stride, @@ -300,13 +300,13 @@ class Col2ImFunctor; + platform::CPUDeviceContext, float>; template class Im2ColFunctor; + platform::CPUDeviceContext, double>; template class Col2ImFunctor; + platform::CPUDeviceContext, float>; template class Col2ImFunctor; + platform::CPUDeviceContext, double>; } // namespace math } // namespace operators diff --git a/paddle/operators/math/im2col.cu b/paddle/operators/math/im2col.cu index bf78942439..a88e837b03 100644 --- a/paddle/operators/math/im2col.cu +++ b/paddle/operators/math/im2col.cu @@ -58,9 +58,9 @@ __global__ void im2col(const T* data_im, int num_outs, int im_height, */ template class Im2ColFunctor { + platform::CUDADeviceContext, T> { public: - void operator()(const platform::DeviceContext& context, + void operator()(const platform::CUDADeviceContext& context, const framework::Tensor& im, const std::vector& dilation, const std::vector& stride, const std::vector& padding, framework::Tensor* col) { @@ -96,9 +96,7 @@ class Im2ColFunctor<<(context) - .stream()>>>( + im2col<<>>( im.data(), num_outputs, im_height, im_width, dilation[0], dilation[1], filter_height, filter_width, stride[0], stride[1], padding[0], padding[1], col_height, col_width, col->data()); @@ -160,9 +158,9 @@ __global__ void col2im(int n, const T* data_col, int im_height, int im_width, */ template class Col2ImFunctor { + platform::CUDADeviceContext, T> { public: - void operator()(const platform::DeviceContext& context, + void operator()(const platform::CUDADeviceContext& context, const framework::Tensor& col, const std::vector& dilation, const std::vector& stride, @@ -203,9 +201,7 @@ class Col2ImFunctor<<(context) - .stream()>>>( + col2im<<>>( num_kernels, col.data(), im_height, im_width, dilation[0], dilation[1], filter_height, filter_width, stride[0], stride[1], padding[0], padding[2], col_height, col_width, im->data()); @@ -213,13 +209,13 @@ class Col2ImFunctor; + platform::CUDADeviceContext, float>; template class Im2ColFunctor; + platform::CUDADeviceContext, double>; template class Col2ImFunctor; + platform::CUDADeviceContext, float>; template class Col2ImFunctor; + platform::CUDADeviceContext, double>; template __global__ void im2colOCF(const T* im_data, int im_channels, int im_height, @@ -260,9 +256,9 @@ __global__ void im2colOCF(const T* im_data, int im_channels, int im_height, */ template class Im2ColFunctor { + platform::CUDADeviceContext, T> { public: - void operator()(const platform::DeviceContext& context, + void operator()(const platform::CUDADeviceContext& context, const framework::Tensor& im, const std::vector& dilation, const std::vector& stride, const std::vector& padding, framework::Tensor* col) { @@ -310,9 +306,7 @@ class Im2ColFunctor<<(context) - .stream()>>>( + im2colOCF<<>>( im.data(), im_channels, im_height, im_width, filter_height, filter_width, stride[0], stride[1], padding[0], padding[1], col_height, col_width, col->data()); @@ -358,9 +352,9 @@ __global__ void col2imOCF(const T* col_data, int im_channels, int im_height, */ template class Col2ImFunctor { + platform::CUDADeviceContext, T> { public: - void operator()(const platform::DeviceContext& context, + void operator()(const platform::CUDADeviceContext& context, const framework::Tensor& col, const std::vector& dilation, const std::vector& stride, @@ -409,9 +403,7 @@ class Col2ImFunctor<<(context) - .stream()>>>( + col2imOCF<<>>( col.data(), im_channels, im_height, im_width, filter_height, filter_width, stride[0], stride[1], padding[0], padding[1], col_height, col_width, im->data()); @@ -419,13 +411,13 @@ class Col2ImFunctor; + platform::CUDADeviceContext, float>; template class Im2ColFunctor; + platform::CUDADeviceContext, double>; template class Col2ImFunctor; + platform::CUDADeviceContext, float>; template class Col2ImFunctor; + platform::CUDADeviceContext, double>; } // namespace math } // namespace operators diff --git a/paddle/operators/math/im2col.h b/paddle/operators/math/im2col.h index 24fd9a06e9..38f2c9fe0a 100644 --- a/paddle/operators/math/im2col.h +++ b/paddle/operators/math/im2col.h @@ -79,20 +79,19 @@ enum class ColFormat { kCFO = 0, kOCF = 1 }; * \note The caller needs to ensure that imShape.inputChannels is equal to * colShape.inputChannels. */ -template +template class Im2ColFunctor { public: - void operator()(const platform::DeviceContext& context, - const framework::Tensor& im, const std::vector& dilation, + void operator()(const DeviceContext& context, const framework::Tensor& im, + const std::vector& dilation, const std::vector& stride, const std::vector& padding, framework::Tensor* col); }; -template +template class Col2ImFunctor { public: - void operator()(const platform::DeviceContext& context, - const framework::Tensor& col, + void operator()(const DeviceContext& context, const framework::Tensor& col, const std::vector& dilation, const std::vector& stride, const std::vector& padding, framework::Tensor* im); diff --git a/paddle/operators/math/im2col_test.cc b/paddle/operators/math/im2col_test.cc index ae197a97ed..256f3bc9bd 100644 --- a/paddle/operators/math/im2col_test.cc +++ b/paddle/operators/math/im2col_test.cc @@ -16,7 +16,7 @@ limitations under the License. */ #include #include -template +template void testIm2col() { paddle::framework::Tensor input_tmp; paddle::framework::Tensor input; @@ -59,18 +59,7 @@ void testIm2col() { memcpy(input_ptr, arr, 6 * sizeof(float)); auto* place = new Place(); - paddle::platform::DeviceContext* context; - if (paddle::platform::is_cpu_place(*place)) { - context = - new paddle::platform::CPUDeviceContext(paddle::platform::CPUPlace()); - } else { -#ifdef PADDLE_WITH_CUDA - context = - new paddle::platform::CUDADeviceContext(paddle::platform::GPUPlace()); -#else - PADDLE_THROW("no GPU support"); -#endif // PADDLE_WITH_CUDA - } + DeviceContext* context = new DeviceContext(*place); if (paddle::platform::is_cpu_place(*place)) { input = input_tmp; } else { @@ -83,10 +72,10 @@ void testIm2col() { // Im2Col paddle::operators::math::Im2ColFunctor< - paddle::operators::math::ColFormat::kCFO, Place, float> + paddle::operators::math::ColFormat::kCFO, DeviceContext, float> im2col; paddle::operators::math::Im2ColFunctor< - paddle::operators::math::ColFormat::kOCF, Place, float> + paddle::operators::math::ColFormat::kOCF, DeviceContext, float> im2col_ocf; im2col(*context, input, dilation, stride, padding, &output_cfo); @@ -119,10 +108,10 @@ void testIm2col() { // Col2Im: kCFO paddle::operators::math::Col2ImFunctor< - paddle::operators::math::ColFormat::kCFO, Place, float> + paddle::operators::math::ColFormat::kCFO, DeviceContext, float> col2im; paddle::operators::math::Col2ImFunctor< - paddle::operators::math::ColFormat::kOCF, Place, float> + paddle::operators::math::ColFormat::kOCF, DeviceContext, float> col2im_ocf; float col2im_data[] = {0, 2, 2, 3, 8, 5}; @@ -168,8 +157,8 @@ void testIm2col() { } TEST(math, im2col) { - testIm2col(); + testIm2col(); #ifdef PADDLE_WITH_CUDA - testIm2col(); + testIm2col(); #endif } diff --git a/paddle/operators/math/lstm_compute.cc b/paddle/operators/math/lstm_compute.cc index ad3a59bcdb..2c2e8bb82e 100644 --- a/paddle/operators/math/lstm_compute.cc +++ b/paddle/operators/math/lstm_compute.cc @@ -21,8 +21,8 @@ namespace operators { namespace math { template -struct LstmUnitFunctor { - static void compute(const platform::DeviceContext& context, +struct LstmUnitFunctor { + static void compute(const platform::CPUDeviceContext& context, LstmMetaValue value, int frame_size, int batch_size, const std::string& gate_act, const std::string& cell_act, const std::string& cand_act) { @@ -42,8 +42,8 @@ struct LstmUnitFunctor { }; template -struct LstmUnitGradFunctor { - static void compute(const platform::DeviceContext& context, +struct LstmUnitGradFunctor { + static void compute(const platform::CPUDeviceContext& context, LstmMetaValue value, LstmMetaGrad grad, int frame_size, int batch_size, const std::string& gate_act, const std::string& cell_act, @@ -72,10 +72,10 @@ struct LstmUnitGradFunctor { } }; -template class LstmUnitFunctor; -template class LstmUnitFunctor; -template class LstmUnitGradFunctor; -template class LstmUnitGradFunctor; +template class LstmUnitFunctor; +template class LstmUnitFunctor; +template class LstmUnitGradFunctor; +template class LstmUnitGradFunctor; } // namespace math } // namespace operators diff --git a/paddle/operators/math/lstm_compute.cu b/paddle/operators/math/lstm_compute.cu index b2122f2a5c..92b1f4228b 100644 --- a/paddle/operators/math/lstm_compute.cu +++ b/paddle/operators/math/lstm_compute.cu @@ -21,8 +21,8 @@ namespace operators { namespace math { template -struct LstmUnitFunctor { - static void compute(const platform::DeviceContext& context, +struct LstmUnitFunctor { + static void compute(const platform::CUDADeviceContext& context, LstmMetaValue value, int frame_size, int batch_size, const std::string& gate_act, const std::string& cell_act, const std::string& cand_act) { @@ -33,8 +33,8 @@ struct LstmUnitFunctor { }; template -struct LstmUnitGradFunctor { - static void compute(const platform::DeviceContext& context, +struct LstmUnitGradFunctor { + static void compute(const platform::CUDADeviceContext& context, LstmMetaValue value, LstmMetaGrad grad, int frame_size, int batch_size, const std::string& gate_act, const std::string& cell_act, @@ -45,10 +45,10 @@ struct LstmUnitGradFunctor { } }; -template class LstmUnitFunctor; -template class LstmUnitFunctor; -template class LstmUnitGradFunctor; -template class LstmUnitGradFunctor; +template class LstmUnitFunctor; +template class LstmUnitFunctor; +template class LstmUnitGradFunctor; +template class LstmUnitGradFunctor; } // namespace math } // namespace operators diff --git a/paddle/operators/math/lstm_compute.h b/paddle/operators/math/lstm_compute.h index 9652399d4c..5f74e27358 100644 --- a/paddle/operators/math/lstm_compute.h +++ b/paddle/operators/math/lstm_compute.h @@ -67,21 +67,20 @@ inline activation_mode_t ActiveType(const std::string &type) { } } -template +template class LstmUnitFunctor { public: - static void compute(const platform::DeviceContext &context, - LstmMetaValue value, int frame_size, int batch_size, + static void compute(const DeviceContext &context, LstmMetaValue value, + int frame_size, int batch_size, const std::string &gate_act, const std::string &cell_act, const std::string &cand_act); }; -template +template class LstmUnitGradFunctor { public: - static void compute(const platform::DeviceContext &context, - LstmMetaValue value, LstmMetaGrad grad, - int frame_size, int batch_size, + static void compute(const DeviceContext &context, LstmMetaValue value, + LstmMetaGrad grad, int frame_size, int batch_size, const std::string &gate_act, const std::string &cell_act, const std::string &cand_act); }; diff --git a/paddle/operators/math/math_function.cc b/paddle/operators/math/math_function.cc index e099a6a439..2b35e4532a 100644 --- a/paddle/operators/math/math_function.cc +++ b/paddle/operators/math/math_function.cc @@ -21,13 +21,11 @@ namespace operators { namespace math { template <> -void gemm(const platform::DeviceContext& context, - const CBLAS_TRANSPOSE transA, - const CBLAS_TRANSPOSE transB, const int M, - const int N, const int K, - const float alpha, const float* A, - const float* B, const float beta, - float* C) { +void gemm( + const platform::CPUDeviceContext& context, const CBLAS_TRANSPOSE transA, + const CBLAS_TRANSPOSE transB, const int M, const int N, const int K, + const float alpha, const float* A, const float* B, const float beta, + float* C) { int lda = (transA == CblasNoTrans) ? K : M; int ldb = (transB == CblasNoTrans) ? N : K; int ldc = N; @@ -36,13 +34,11 @@ void gemm(const platform::DeviceContext& context, } template <> -void gemm(const platform::DeviceContext& context, - const CBLAS_TRANSPOSE transA, - const CBLAS_TRANSPOSE transB, const int M, - const int N, const int K, - const double alpha, const double* A, - const double* B, const double beta, - double* C) { +void gemm( + const platform::CPUDeviceContext& context, const CBLAS_TRANSPOSE transA, + const CBLAS_TRANSPOSE transB, const int M, const int N, const int K, + const double alpha, const double* A, const double* B, const double beta, + double* C) { int lda = (transA == CblasNoTrans) ? K : M; int ldb = (transB == CblasNoTrans) ? N : K; int ldc = N; @@ -51,35 +47,32 @@ void gemm(const platform::DeviceContext& context, } template <> -void gemm(const platform::DeviceContext& context, - const bool transA, const bool transB, - const int M, const int N, const int K, - const float alpha, const float* A, - const int lda, const float* B, - const int ldb, const float beta, float* C, - const int ldc) { +void gemm( + const platform::CPUDeviceContext& context, const bool transA, + const bool transB, const int M, const int N, const int K, const float alpha, + const float* A, const int lda, const float* B, const int ldb, + const float beta, float* C, const int ldc) { cblas_sgemm(CblasRowMajor, transA == false ? CblasNoTrans : CblasTrans, transB == false ? CblasNoTrans : CblasTrans, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc); } template <> -void gemm(const platform::DeviceContext& context, - const bool transA, const bool transB, - const int M, const int N, const int K, - const double alpha, const double* A, - const int lda, const double* B, - const int ldb, const double beta, - double* C, const int ldc) { +void gemm( + const platform::CPUDeviceContext& context, const bool transA, + const bool transB, const int M, const int N, const int K, + const double alpha, const double* A, const int lda, const double* B, + const int ldb, const double beta, double* C, const int ldc) { cblas_dgemm(CblasRowMajor, transA == false ? CblasNoTrans : CblasTrans, transB == false ? CblasNoTrans : CblasTrans, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc); } template <> -void matmul( - const platform::DeviceContext& context, const framework::Tensor& matrix_a, - bool trans_a, const framework::Tensor& matrix_b, bool trans_b, float alpha, +void matmul( + const platform::CPUDeviceContext& context, + const framework::Tensor& matrix_a, bool trans_a, + const framework::Tensor& matrix_b, bool trans_b, float alpha, framework::Tensor* matrix_out, float beta) { auto dim_a = matrix_a.dims(); auto dim_b = matrix_b.dims(); @@ -99,15 +92,16 @@ void matmul( CBLAS_TRANSPOSE transA = (trans_a == false) ? CblasNoTrans : CblasTrans; CBLAS_TRANSPOSE transB = (trans_b == false) ? CblasNoTrans : CblasTrans; - gemm( + gemm( context, transA, transB, M, N, K, alpha, matrix_a.data(), matrix_b.data(), beta, matrix_out->data()); } template <> -void matmul( - const platform::DeviceContext& context, const framework::Tensor& matrix_a, - bool trans_a, const framework::Tensor& matrix_b, bool trans_b, double alpha, +void matmul( + const platform::CPUDeviceContext& context, + const framework::Tensor& matrix_a, bool trans_a, + const framework::Tensor& matrix_b, bool trans_b, double alpha, framework::Tensor* matrix_out, double beta) { auto dim_a = matrix_a.dims(); auto dim_b = matrix_b.dims(); @@ -127,7 +121,7 @@ void matmul( CBLAS_TRANSPOSE transA = (trans_a == false) ? CblasNoTrans : CblasTrans; CBLAS_TRANSPOSE transB = (trans_b == false) ? CblasNoTrans : CblasTrans; - gemm( + gemm( context, transA, transB, M, N, K, alpha, matrix_a.data(), matrix_b.data(), beta, matrix_out->data()); } @@ -135,8 +129,8 @@ void matmul( #ifdef PADDLE_WITH_MKLML // Use cblas_{s,d}gemm_batched if available: Run with 1 group of size batchSize. template <> -void batched_gemm( - const platform::DeviceContext& context, const CBLAS_TRANSPOSE transA, +void batched_gemm( + const platform::CPUDeviceContext& context, const CBLAS_TRANSPOSE transA, const CBLAS_TRANSPOSE transB, const int M, const int N, const int K, const float alpha, const float* A, const float* B, const float beta, float* C, const int batchCount, const int strideA, const int strideB) { @@ -157,8 +151,8 @@ void batched_gemm( } template <> -void batched_gemm( - const platform::DeviceContext& context, const CBLAS_TRANSPOSE transA, +void batched_gemm( + const platform::CPUDeviceContext& context, const CBLAS_TRANSPOSE transA, const CBLAS_TRANSPOSE transB, const int M, const int N, const int K, const double alpha, const double* A, const double* B, const double beta, double* C, const int batchCount, const int strideA, const int strideB) { @@ -183,8 +177,8 @@ void batched_gemm( // functions of Intel MKL are not available. In the future, this computation // should be parallelized. template <> -void batched_gemm( - const platform::DeviceContext& context, const CBLAS_TRANSPOSE transA, +void batched_gemm( + const platform::CPUDeviceContext& context, const CBLAS_TRANSPOSE transA, const CBLAS_TRANSPOSE transB, const int M, const int N, const int K, const float alpha, const float* A, const float* B, const float beta, float* C, const int batchCount, const int strideA, const int strideB) { @@ -192,14 +186,14 @@ void batched_gemm( const float* Ak = &A[k * strideA]; const float* Bk = &B[k * strideB]; float* Ck = &C[k * M * N]; - gemm(context, transA, transB, M, N, K, alpha, Ak, - Bk, beta, Ck); + gemm(context, transA, transB, M, N, K, + alpha, Ak, Bk, beta, Ck); } } template <> -void batched_gemm( - const platform::DeviceContext& context, const CBLAS_TRANSPOSE transA, +void batched_gemm( + const platform::CPUDeviceContext& context, const CBLAS_TRANSPOSE transA, const CBLAS_TRANSPOSE transB, const int M, const int N, const int K, const double alpha, const double* A, const double* B, const double beta, double* C, const int batchCount, const int strideA, const int strideB) { @@ -207,55 +201,53 @@ void batched_gemm( const double* Ak = &A[k * strideA]; const double* Bk = &B[k * strideB]; double* Ck = &C[k * M * N]; - gemm(context, transA, transB, M, N, K, alpha, - Ak, Bk, beta, Ck); + gemm(context, transA, transB, M, N, K, + alpha, Ak, Bk, beta, Ck); } } #endif template <> -void gemv(const platform::DeviceContext& context, - const bool trans_a, const int M, - const int N, const float alpha, - const float* A, const float* B, - const float beta, float* C) { +void gemv( + const platform::CPUDeviceContext& context, const bool trans_a, const int M, + const int N, const float alpha, const float* A, const float* B, + const float beta, float* C) { CBLAS_TRANSPOSE transA = (trans_a == false) ? CblasNoTrans : CblasTrans; cblas_sgemv(CblasRowMajor, transA, M, N, alpha, A, N, B, 1, beta, C, 1); } template <> -void gemv(const platform::DeviceContext& context, - const bool trans_a, const int M, - const int N, const double alpha, - const double* A, const double* B, - const double beta, double* C) { +void gemv( + const platform::CPUDeviceContext& context, const bool trans_a, const int M, + const int N, const double alpha, const double* A, const double* B, + const double beta, double* C) { CBLAS_TRANSPOSE transA = (trans_a == false) ? CblasNoTrans : CblasTrans; cblas_dgemv(CblasRowMajor, transA, M, N, alpha, A, N, B, 1, beta, C, 1); } template <> -void axpy(const platform::DeviceContext& context, - const int n, const float alpha, - const float* x, float* y) { +void axpy( + const platform::CPUDeviceContext& context, const int n, const float alpha, + const float* x, float* y) { cblas_saxpy(n, alpha, x, 1, y, 1); } template <> -void axpy(const platform::DeviceContext& context, - const int n, const double alpha, - const double* x, double* y) { +void axpy( + const platform::CPUDeviceContext& context, const int n, const double alpha, + const double* x, double* y) { cblas_daxpy(n, alpha, x, 1, y, 1); } -template struct SetConstant; -template struct SetConstant; -template struct SetConstant; -template struct SetConstant; -template struct SetConstant; +template struct SetConstant; +template struct SetConstant; +template struct SetConstant; +template struct SetConstant; +template struct SetConstant; -#define DEFINE_CPU_TRANS(RANK) \ - template struct Transpose; \ - template struct Transpose; +#define DEFINE_CPU_TRANS(RANK) \ + template struct Transpose; \ + template struct Transpose; DEFINE_CPU_TRANS(1); DEFINE_CPU_TRANS(2); @@ -310,10 +302,10 @@ void set_constant(const platform::DeviceContext& context, #endif } -template struct RowwiseAdd; -template struct RowwiseAdd; -template struct ColwiseSum; -template struct ColwiseSum; +template struct RowwiseAdd; +template struct RowwiseAdd; +template struct ColwiseSum; +template struct ColwiseSum; } // namespace math } // namespace operators diff --git a/paddle/operators/math/math_function.cu b/paddle/operators/math/math_function.cu index 3018e50a4f..1b560a7e2d 100644 --- a/paddle/operators/math/math_function.cu +++ b/paddle/operators/math/math_function.cu @@ -22,13 +22,11 @@ namespace operators { namespace math { template <> -void gemm(const platform::DeviceContext& context, - const CBLAS_TRANSPOSE transA, - const CBLAS_TRANSPOSE transB, const int M, - const int N, const int K, - const float alpha, const float* A, - const float* B, const float beta, - float* C) { +void gemm( + const platform::CUDADeviceContext& context, const CBLAS_TRANSPOSE transA, + const CBLAS_TRANSPOSE transB, const int M, const int N, const int K, + const float alpha, const float* A, const float* B, const float beta, + float* C) { // Note that cublas follows fortran order, so the order is different from // the cblas convention. int lda = (transA == CblasNoTrans) ? K : M; @@ -39,19 +37,16 @@ void gemm(const platform::DeviceContext& context, (transB == CblasNoTrans) ? CUBLAS_OP_N : CUBLAS_OP_T; PADDLE_ENFORCE(platform::dynload::cublasSgemm( - reinterpret_cast(context) - .cublas_handle(), - cuTransB, cuTransA, N, M, K, &alpha, B, ldb, A, lda, &beta, C, N)); + context.cublas_handle(), cuTransB, cuTransA, N, M, K, &alpha, B, ldb, A, + lda, &beta, C, N)); } template <> -void gemm(const platform::DeviceContext& context, - const CBLAS_TRANSPOSE transA, - const CBLAS_TRANSPOSE transB, const int M, - const int N, const int K, - const double alpha, const double* A, - const double* B, const double beta, - double* C) { +void gemm( + const platform::CUDADeviceContext& context, const CBLAS_TRANSPOSE transA, + const CBLAS_TRANSPOSE transB, const int M, const int N, const int K, + const double alpha, const double* A, const double* B, const double beta, + double* C) { // Note that cublas follows fortran order, so the order is different from // the cblas convention. int lda = (transA == CblasNoTrans) ? K : M; @@ -61,51 +56,45 @@ void gemm(const platform::DeviceContext& context, cublasOperation_t cuTransB = (transB == CblasNoTrans) ? CUBLAS_OP_N : CUBLAS_OP_T; PADDLE_ENFORCE(platform::dynload::cublasDgemm( - reinterpret_cast(context) - .cublas_handle(), - cuTransB, cuTransA, N, M, K, &alpha, B, ldb, A, lda, &beta, C, N)); + context.cublas_handle(), cuTransB, cuTransA, N, M, K, &alpha, B, ldb, A, + lda, &beta, C, N)); } template <> -void gemm(const platform::DeviceContext& context, - const bool transA, const bool transB, - const int M, const int N, const int K, - const float alpha, const float* A, - const int lda, const float* B, - const int ldb, const float beta, float* C, - const int ldc) { +void gemm( + const platform::CUDADeviceContext& context, const bool transA, + const bool transB, const int M, const int N, const int K, const float alpha, + const float* A, const int lda, const float* B, const int ldb, + const float beta, float* C, const int ldc) { // Note that cublas follows fortran order, so the order is different from // the cblas convention. cublasOperation_t cuTransA = transA == false ? CUBLAS_OP_N : CUBLAS_OP_T; cublasOperation_t cuTransB = transB == false ? CUBLAS_OP_N : CUBLAS_OP_T; PADDLE_ENFORCE(platform::dynload::cublasSgemm( - reinterpret_cast(context) - .cublas_handle(), - cuTransB, cuTransA, N, M, K, &alpha, B, ldb, A, lda, &beta, C, ldc)); + context.cublas_handle(), cuTransB, cuTransA, N, M, K, &alpha, B, ldb, A, + lda, &beta, C, ldc)); } template <> -void gemm(const platform::DeviceContext& context, - const bool transA, const bool transB, - const int M, const int N, const int K, - const double alpha, const double* A, - const int lda, const double* B, - const int ldb, const double beta, - double* C, const int ldc) { +void gemm( + const platform::CUDADeviceContext& context, const bool transA, + const bool transB, const int M, const int N, const int K, + const double alpha, const double* A, const int lda, const double* B, + const int ldb, const double beta, double* C, const int ldc) { // Note that cublas follows fortran order, so the order is different from // the cblas convention. cublasOperation_t cuTransA = transA == false ? CUBLAS_OP_N : CUBLAS_OP_T; cublasOperation_t cuTransB = transB == false ? CUBLAS_OP_N : CUBLAS_OP_T; PADDLE_ENFORCE(platform::dynload::cublasDgemm( - reinterpret_cast(context) - .cublas_handle(), - cuTransB, cuTransA, N, M, K, &alpha, B, ldb, A, lda, &beta, C, ldc)); + context.cublas_handle(), cuTransB, cuTransA, N, M, K, &alpha, B, ldb, A, + lda, &beta, C, ldc)); } template <> -void matmul( - const platform::DeviceContext& context, const framework::Tensor& matrix_a, - bool trans_a, const framework::Tensor& matrix_b, bool trans_b, float alpha, +void matmul( + const platform::CUDADeviceContext& context, + const framework::Tensor& matrix_a, bool trans_a, + const framework::Tensor& matrix_b, bool trans_b, float alpha, framework::Tensor* matrix_out, float beta) { auto dim_a = matrix_a.dims(); auto dim_b = matrix_b.dims(); @@ -125,15 +114,16 @@ void matmul( CBLAS_TRANSPOSE transA = (trans_a == false) ? CblasNoTrans : CblasTrans; CBLAS_TRANSPOSE transB = (trans_b == false) ? CblasNoTrans : CblasTrans; - gemm( + gemm( context, transA, transB, M, N, K, alpha, matrix_a.data(), matrix_b.data(), beta, matrix_out->data()); } template <> -void matmul( - const platform::DeviceContext& context, const framework::Tensor& matrix_a, - bool trans_a, const framework::Tensor& matrix_b, bool trans_b, double alpha, +void matmul( + const platform::CUDADeviceContext& context, + const framework::Tensor& matrix_a, bool trans_a, + const framework::Tensor& matrix_b, bool trans_b, double alpha, framework::Tensor* matrix_out, double beta) { auto dim_a = matrix_a.dims(); auto dim_b = matrix_b.dims(); @@ -153,14 +143,14 @@ void matmul( CBLAS_TRANSPOSE transA = (trans_a == false) ? CblasNoTrans : CblasTrans; CBLAS_TRANSPOSE transB = (trans_b == false) ? CblasNoTrans : CblasTrans; - gemm( + gemm( context, transA, transB, M, N, K, alpha, matrix_a.data(), matrix_b.data(), beta, matrix_out->data()); } template <> -void batched_gemm( - const platform::DeviceContext& context, const CBLAS_TRANSPOSE transA, +void batched_gemm( + const platform::CUDADeviceContext& context, const CBLAS_TRANSPOSE transA, const CBLAS_TRANSPOSE transB, const int M, const int N, const int K, const float alpha, const float* A, const float* B, const float beta, float* C, const int batchCount, const int strideA, const int strideB) { @@ -176,15 +166,13 @@ void batched_gemm( const int strideC = M * N; PADDLE_ENFORCE(platform::dynload::cublasSgemmStridedBatched( - reinterpret_cast(context) - .cublas_handle(), - cuTransB, cuTransA, N, M, K, &alpha, B, ldb, strideB, A, lda, strideA, - &beta, C, ldc, strideC, batchCount)); + context.cublas_handle(), cuTransB, cuTransA, N, M, K, &alpha, B, ldb, + strideB, A, lda, strideA, &beta, C, ldc, strideC, batchCount)); } template <> -void batched_gemm( - const platform::DeviceContext& context, const CBLAS_TRANSPOSE transA, +void batched_gemm( + const platform::CUDADeviceContext& context, const CBLAS_TRANSPOSE transA, const CBLAS_TRANSPOSE transB, const int M, const int N, const int K, const double alpha, const double* A, const double* B, const double beta, double* C, const int batchCount, const int strideA, const int strideB) { @@ -200,68 +188,58 @@ void batched_gemm( const int strideC = M * N; PADDLE_ENFORCE(platform::dynload::cublasDgemmStridedBatched( - reinterpret_cast(context) - .cublas_handle(), - cuTransB, cuTransA, N, M, K, &alpha, B, ldb, strideB, A, lda, strideA, - &beta, C, ldc, strideC, batchCount)); + context.cublas_handle(), cuTransB, cuTransA, N, M, K, &alpha, B, ldb, + strideB, A, lda, strideA, &beta, C, ldc, strideC, batchCount)); } template <> -void gemv(const platform::DeviceContext& context, - const bool trans_a, const int M, - const int N, const float alpha, - const float* A, const float* B, - const float beta, float* C) { +void gemv( + const platform::CUDADeviceContext& context, const bool trans_a, const int M, + const int N, const float alpha, const float* A, const float* B, + const float beta, float* C) { cublasOperation_t cuTransA = (trans_a == false) ? CUBLAS_OP_T : CUBLAS_OP_N; - PADDLE_ENFORCE(platform::dynload::cublasSgemv( - reinterpret_cast(context) - .cublas_handle(), - cuTransA, N, M, &alpha, A, N, B, 1, &beta, C, 1)); + PADDLE_ENFORCE(platform::dynload::cublasSgemv(context.cublas_handle(), + cuTransA, N, M, &alpha, A, N, B, + 1, &beta, C, 1)); } template <> -void gemv(const platform::DeviceContext& context, - const bool trans_a, const int M, - const int N, const double alpha, - const double* A, const double* B, - const double beta, double* C) { +void gemv( + const platform::CUDADeviceContext& context, const bool trans_a, const int M, + const int N, const double alpha, const double* A, const double* B, + const double beta, double* C) { cublasOperation_t cuTransA = (trans_a == false) ? CUBLAS_OP_T : CUBLAS_OP_N; - PADDLE_ENFORCE(platform::dynload::cublasDgemv( - reinterpret_cast(context) - .cublas_handle(), - cuTransA, N, M, &alpha, A, N, B, 1, &beta, C, 1)); + PADDLE_ENFORCE(platform::dynload::cublasDgemv(context.cublas_handle(), + cuTransA, N, M, &alpha, A, N, B, + 1, &beta, C, 1)); } template <> -void axpy(const platform::DeviceContext& context, - const int n, const float alpha, - const float* x, float* y) { - PADDLE_ENFORCE(platform::dynload::cublasSaxpy( - reinterpret_cast(context) - .cublas_handle(), - n, &alpha, x, 1, y, 1)); +void axpy( + const platform::CUDADeviceContext& context, const int n, const float alpha, + const float* x, float* y) { + PADDLE_ENFORCE(platform::dynload::cublasSaxpy(context.cublas_handle(), n, + &alpha, x, 1, y, 1)); } template <> -void axpy(const platform::DeviceContext& context, - const int n, const double alpha, - const double* x, double* y) { - PADDLE_ENFORCE(platform::dynload::cublasDaxpy( - reinterpret_cast(context) - .cublas_handle(), - n, &alpha, x, 1, y, 1)); +void axpy( + const platform::CUDADeviceContext& context, const int n, const double alpha, + const double* x, double* y) { + PADDLE_ENFORCE(platform::dynload::cublasDaxpy(context.cublas_handle(), n, + &alpha, x, 1, y, 1)); } -template struct SetConstant; -template struct SetConstant; -template struct SetConstant; -template struct SetConstant; -template struct SetConstant; +template struct SetConstant; +template struct SetConstant; +template struct SetConstant; +template struct SetConstant; +template struct SetConstant; -#define DEFINE_GPU_TRANS(RANK) \ - template struct Transpose; \ - template struct Transpose; +#define DEFINE_GPU_TRANS(RANK) \ + template struct Transpose; \ + template struct Transpose; DEFINE_GPU_TRANS(1); DEFINE_GPU_TRANS(2); @@ -277,8 +255,9 @@ struct TensorSetConstantGPU { template void operator()() const { - SetConstant functor; - functor(context_, tensor_, static_cast(value_)); + SetConstant functor; + functor(reinterpret_cast(context_), + tensor_, static_cast(value_)); } const platform::DeviceContext& context_; @@ -294,27 +273,27 @@ void set_constant_with_place( TensorSetConstantGPU(context, tensor, value)); } -template struct RowwiseAdd; -template struct RowwiseAdd; -template struct ColwiseSum; -// template struct ColwiseSum; -// The ColwiseSum failed in debug mode, +template struct RowwiseAdd; +template struct RowwiseAdd; +template struct ColwiseSum; +// template struct ColwiseSum; +// The ColwiseSum failed in debug mode, // and only failed for this case. So reimplemented it. template <> -void ColwiseSum::operator()( - const platform::DeviceContext& context, const framework::Tensor& input, +void ColwiseSum::operator()( + const platform::CUDADeviceContext& context, const framework::Tensor& input, framework::Tensor* vector) { auto in_dims = input.dims(); auto size = input.numel() / in_dims[0]; PADDLE_ENFORCE_EQ(vector->numel(), size); framework::Tensor one; one.mutable_data({in_dims[0]}, context.GetPlace()); - SetConstant set; + SetConstant set; set(context, &one, static_cast(1.0)); - gemv(context, true, static_cast(in_dims[0]), - static_cast(in_dims[1]), 1.0, - input.data(), one.data(), - 0.0, vector->data()); + gemv( + context, true, static_cast(in_dims[0]), static_cast(in_dims[1]), + 1.0, input.data(), one.data(), 0.0, + vector->data()); } } // namespace math diff --git a/paddle/operators/math/math_function.h b/paddle/operators/math/math_function.h index f2b025b78b..8cc03c2ba0 100644 --- a/paddle/operators/math/math_function.h +++ b/paddle/operators/math/math_function.h @@ -62,53 +62,51 @@ namespace math { // Then matrixA: M * K, matrixB: K * N, matrixC : M * N // For more detailed info, please refer to // http://www.netlib.org/lapack/explore-html/d4/de2/sgemm_8f.html -template -void gemm(const platform::DeviceContext& context, const CBLAS_TRANSPOSE transA, +template +void gemm(const DeviceContext& context, const CBLAS_TRANSPOSE transA, const CBLAS_TRANSPOSE transB, const int M, const int N, const int K, const T alpha, const T* A, const T* B, const T beta, T* C); // gemm wrapper with stride args for matrix uncontinuous in memory -template -void gemm(const platform::DeviceContext& context, const bool transA, - const bool transB, const int M, const int N, const int K, - const T alpha, const T* A, const int lda, const T* B, const int ldb, - const T beta, T* C, const int ldc); +template +void gemm(const DeviceContext& context, const bool transA, const bool transB, + const int M, const int N, const int K, const T alpha, const T* A, + const int lda, const T* B, const int ldb, const T beta, T* C, + const int ldc); // matrix multiply with continuous memory -template -void matmul(const platform::DeviceContext& context, - const framework::Tensor& matrix_a, bool trans_a, - const framework::Tensor& matrix_b, bool trans_b, T alpha, - framework::Tensor* matrix_out, T beta); +template +void matmul(const DeviceContext& context, const framework::Tensor& matrix_a, + bool trans_a, const framework::Tensor& matrix_b, bool trans_b, + T alpha, framework::Tensor* matrix_out, T beta); // Batched gemm -template -void batched_gemm(const platform::DeviceContext& context, - const CBLAS_TRANSPOSE transA, const CBLAS_TRANSPOSE transB, - const int M, const int N, const int K, const T alpha, - const T* A, const T* B, const T beta, T* C, - const int batchCount, const int strideA, const int strideB); - -template -void gemv(const platform::DeviceContext& context, const bool trans_a, - const int M, const int N, const T alpha, const T* A, const T* B, - const T beta, T* C); - -template -void axpy(const platform::DeviceContext& context, const int n, const T alpha, - const T* x, T* y); - -template +template +void batched_gemm(const DeviceContext& context, const CBLAS_TRANSPOSE transA, + const CBLAS_TRANSPOSE transB, const int M, const int N, + const int K, const T alpha, const T* A, const T* B, + const T beta, T* C, const int batchCount, const int strideA, + const int strideB); + +template +void gemv(const DeviceContext& context, const bool trans_a, const int M, + const int N, const T alpha, const T* A, const T* B, const T beta, + T* C); + +template +void axpy(const DeviceContext& context, const int n, const T alpha, const T* x, + T* y); + +template struct Transpose { - void operator()(const platform::DeviceContext& context, - const framework::Tensor& in, framework::Tensor* out, - const std::vector& axis); + void operator()(const DeviceContext& context, const framework::Tensor& in, + framework::Tensor* out, const std::vector& axis); }; -template +template struct SetConstant { - void operator()(const platform::DeviceContext& context, - framework::Tensor* tensor, T num); + void operator()(const DeviceContext& context, framework::Tensor* tensor, + T num); }; template @@ -118,17 +116,16 @@ void set_constant_with_place(const platform::DeviceContext& context, void set_constant(const platform::DeviceContext& context, framework::Tensor* tensor, float value); -template +template struct RowwiseAdd { - void operator()(const platform::DeviceContext& context, - const framework::Tensor& input, const framework::Tensor& vec, - framework::Tensor* output); + void operator()(const DeviceContext& context, const framework::Tensor& input, + const framework::Tensor& vec, framework::Tensor* output); }; -template +template struct ColwiseSum { - void operator()(const platform::DeviceContext& context, - const framework::Tensor& input, framework::Tensor* vec); + void operator()(const DeviceContext& context, const framework::Tensor& input, + framework::Tensor* vec); }; } // namespace math diff --git a/paddle/operators/math/math_function_impl.h b/paddle/operators/math/math_function_impl.h index 4dc17a4e52..3e6d833865 100644 --- a/paddle/operators/math/math_function_impl.h +++ b/paddle/operators/math/math_function_impl.h @@ -20,16 +20,17 @@ namespace paddle { namespace operators { namespace math { -template -void SetConstant::operator()(const platform::DeviceContext& context, - framework::Tensor* tensor, T num) { +template +void SetConstant::operator()(const DeviceContext& context, + framework::Tensor* tensor, + T num) { auto t = framework::EigenVector::Flatten(*tensor); - t.device(*context.GetEigenDevice()) = t.constant(static_cast(num)); + t.device(*context.eigen_device()) = t.constant(static_cast(num)); } -template -void Transpose::operator()( - const platform::DeviceContext& context, const framework::Tensor& in, +template +void Transpose::operator()( + const DeviceContext& context, const framework::Tensor& in, framework::Tensor* out, const std::vector& axis) { Eigen::array permute; for (int i = 0; i < Rank; i++) { @@ -40,15 +41,15 @@ void Transpose::operator()( auto eigen_in = framework::EigenTensor::From(in); auto eigen_out = framework::EigenTensor::From(*out); - auto* dev = context.GetEigenDevice(); + auto* dev = context.eigen_device(); eigen_out.device(*dev) = eigen_in.shuffle(permute); } -template -void RowwiseAdd::operator()(const platform::DeviceContext& context, - const framework::Tensor& input, - const framework::Tensor& vector, - framework::Tensor* output) { +template +void RowwiseAdd::operator()(const DeviceContext& context, + const framework::Tensor& input, + const framework::Tensor& vector, + framework::Tensor* output) { auto in_dims = input.dims(); auto size = input.numel() / in_dims[0]; PADDLE_ENFORCE_EQ(vector.numel(), size); @@ -59,14 +60,14 @@ void RowwiseAdd::operator()(const platform::DeviceContext& context, auto out = framework::EigenMatrix::From(*output); Eigen::array shape({{1, static_cast(size)}}); Eigen::array bcast({{static_cast(in_dims[0]), 1}}); - out.device(*context.GetEigenDevice()) = + out.device(*context.eigen_device()) = in + vec.reshape(shape).broadcast(bcast); } -template -void ColwiseSum::operator()(const platform::DeviceContext& context, - const framework::Tensor& input, - framework::Tensor* vector) { +template +void ColwiseSum::operator()(const DeviceContext& context, + const framework::Tensor& input, + framework::Tensor* vector) { auto in_dims = input.dims(); auto size = input.numel() / in_dims[0]; PADDLE_ENFORCE_EQ(vector->numel(), size); @@ -74,7 +75,7 @@ void ColwiseSum::operator()(const platform::DeviceContext& context, auto vec = framework::EigenMatrix::From(*vector); auto in = framework::EigenMatrix::From(input); Eigen::array shape({{1, static_cast(size)}}); - vec.reshape(shape).device(*context.GetEigenDevice()) = + vec.reshape(shape).device(*context.eigen_device()) = in.sum(Eigen::array({{0}})).reshape(shape); } diff --git a/paddle/operators/math/math_function_test.cc b/paddle/operators/math/math_function_test.cc index 983c9fdcff..7c6f098ca9 100644 --- a/paddle/operators/math/math_function_test.cc +++ b/paddle/operators/math/math_function_test.cc @@ -21,7 +21,7 @@ TEST(math_function, gemm_notrans_cblas) { memcpy(input3_ptr, arr3, 8 * sizeof(float)); paddle::platform::CPUDeviceContext context(*cpu_place); - paddle::operators::math::gemm( + paddle::operators::math::gemm( context, false, false, m, n, k, 1, input1_ptr, 3, input2_ptr + 1, 4, 1, input3_ptr + 1, 4); @@ -55,7 +55,7 @@ TEST(math_function, gemm_trans_clbas) { memcpy(input3_ptr, arr3, 8 * sizeof(float)); paddle::platform::CPUDeviceContext context(*cpu_place); - paddle::operators::math::gemm( + paddle::operators::math::gemm( context, false, true, m, n, k, 1, input1_ptr, 3, input2_ptr + 3, 3, 1, input3_ptr + 1, 4); @@ -74,7 +74,8 @@ TEST(math_function, zero) { auto* cpu_place = new paddle::platform::CPUPlace(); float* t = tensor.mutable_data({2, 2}, *cpu_place); paddle::platform::CPUDeviceContext context(*cpu_place); - paddle::operators::math::SetConstant + paddle::operators::math::SetConstant functor; functor(context, &tensor, 0); EXPECT_EQ(t[0], 0); @@ -110,7 +111,7 @@ void GemvTest(int m, int n, bool trans) { } paddle::platform::CPUDeviceContext context(*cpu_place); - paddle::operators::math::gemv( + paddle::operators::math::gemv( context, trans, static_cast(m), static_cast(n), 1., data_a, data_b, 0., data_c); diff --git a/paddle/operators/math/math_function_test.cu b/paddle/operators/math/math_function_test.cu index d5d6f0c73b..32e96d9487 100644 --- a/paddle/operators/math/math_function_test.cu +++ b/paddle/operators/math/math_function_test.cu @@ -21,7 +21,7 @@ TEST(math_function, notrans_mul_trans) { out_gpu.mutable_data({2, 2}, *gpu_place); - paddle::operators::math::matmul( + paddle::operators::math::matmul( context, input1_gpu, false, input2_gpu, true, 1, &out_gpu, 0); paddle::framework::CopyFrom(out_gpu, *cpu_place, context, &out); @@ -55,7 +55,7 @@ TEST(math_function, trans_mul_notrans) { out_gpu.mutable_data({3, 3}, *gpu_place); - paddle::operators::math::matmul( + paddle::operators::math::matmul( context, input1_gpu, true, input2_gpu, false, 1, &out_gpu, 0); paddle::framework::CopyFrom(out_gpu, *cpu_place, context, &out); @@ -106,7 +106,7 @@ TEST(math_function, gemm_notrans_cublas) { float* b = input2_gpu.data(); float* c = input3_gpu.mutable_data(*gpu_place); - paddle::operators::math::gemm( + paddle::operators::math::gemm( context, false, false, m, n, k, 1, a, 3, b + 1, 4, 1, c + 1, 4); paddle::framework::CopyFrom(input3_gpu, *cpu_place, context, &input3); @@ -161,7 +161,7 @@ TEST(math_function, gemm_trans_cublas) { float* b = input2_gpu.data(); float* c = input3_gpu.mutable_data(*gpu_place); - paddle::operators::math::gemm( + paddle::operators::math::gemm( context, false, true, m, n, k, 1, a, 3, b + 3, 3, 1, c + 1, 4); paddle::framework::CopyFrom(input3_gpu, *cpu_place, context, &input3); @@ -208,7 +208,7 @@ void GemvTest(int m, int n, bool trans) { paddle::framework::CopyFrom(mat_a, *gpu_place, context, &g_mat_a); paddle::framework::CopyFrom(vec_b, *gpu_place, context, &g_vec_b); - paddle::operators::math::gemv( + paddle::operators::math::gemv( context, trans, static_cast(m), static_cast(n), 1., g_data_a, g_data_b, 0., g_data_c); diff --git a/paddle/operators/math/matmul.h b/paddle/operators/math/matmul.h index 6ba9a0ba9a..7048e11e6f 100644 --- a/paddle/operators/math/matmul.h +++ b/paddle/operators/math/matmul.h @@ -26,13 +26,12 @@ namespace math { // // Both a & b can be 1- to 3-dimensional. Higher rank tensors are not supported // yet. -template +template class MatMulFunctor { public: - void operator()(const platform::DeviceContext& context, - const framework::Tensor& a, bool trans_a, - const framework::Tensor& b, bool trans_b, T alpha, - framework::Tensor* out, T beta) { + void operator()(const DeviceContext& context, const framework::Tensor& a, + bool trans_a, const framework::Tensor& b, bool trans_b, + T alpha, framework::Tensor* out, T beta) { auto dim_a = a.dims(); auto dim_b = b.dims(); @@ -108,13 +107,13 @@ class MatMulFunctor { if (!batchCount) { // regular matrix multiplication - gemm(context, transA, transB, M, N, kA, alpha, a.data(), - b.data(), beta, out->data()); + gemm(context, transA, transB, M, N, kA, alpha, + a.data(), b.data(), beta, out->data()); } else { // batched matrix multiplication - batched_gemm(context, transA, transB, M, N, kA, alpha, - a.data(), b.data(), beta, out->data(), - batchCount, strideA, strideB); + batched_gemm( + context, transA, transB, M, N, kA, alpha, a.data(), b.data(), + beta, out->data(), batchCount, strideA, strideB); } } }; diff --git a/paddle/operators/math/maxouting.cc b/paddle/operators/math/maxouting.cc index c9003962d3..fea86675f7 100644 --- a/paddle/operators/math/maxouting.cc +++ b/paddle/operators/math/maxouting.cc @@ -20,9 +20,9 @@ namespace math { // All tensors are in NCHW format, and the groups must be greater than 1 template -class MaxOutFunctor { +class MaxOutFunctor { public: - void operator()(const platform::DeviceContext& context, + void operator()(const platform::CPUDeviceContext& context, const framework::Tensor& input, framework::Tensor* output, int groups) { const int batch_size = input.dims()[0]; @@ -54,9 +54,9 @@ class MaxOutFunctor { }; template -class MaxOutGradFunctor { +class MaxOutGradFunctor { public: - void operator()(const platform::DeviceContext& context, + void operator()(const platform::CPUDeviceContext& context, const framework::Tensor& input, framework::Tensor* input_grad, const framework::Tensor& output, const framework::Tensor& output_grad, int groups) { @@ -91,10 +91,10 @@ class MaxOutGradFunctor { } }; -template class MaxOutGradFunctor; -template class MaxOutGradFunctor; -template class MaxOutFunctor; -template class MaxOutFunctor; +template class MaxOutGradFunctor; +template class MaxOutGradFunctor; +template class MaxOutFunctor; +template class MaxOutFunctor; } // namespace math } // namespace operators diff --git a/paddle/operators/math/maxouting.cu b/paddle/operators/math/maxouting.cu index c3fabcae08..6056ad251c 100644 --- a/paddle/operators/math/maxouting.cu +++ b/paddle/operators/math/maxouting.cu @@ -78,9 +78,9 @@ __global__ void KernelMaxoutGrad(const int nthreads, const T* input_data, * All tensors are in NCHW format. */ template -class MaxOutFunctor { +class MaxOutFunctor { public: - void operator()(const platform::DeviceContext& context, + void operator()(const platform::CUDADeviceContext& context, const framework::Tensor& input, framework::Tensor* output, int groups) { const int batch_size = input.dims()[0]; @@ -98,20 +98,18 @@ class MaxOutFunctor { dim3 threads(1024, 1); dim3 grid(blocks, 1); - KernelMaxOut< - T><<(context) - .stream()>>>(nthreads, input_data, input_channels, - input_height, input_width, groups, output_data); + KernelMaxOut<<>>( + nthreads, input_data, input_channels, input_height, input_width, groups, + output_data); } }; /* * All tensors are in NCHW format. */ template -class MaxOutGradFunctor { +class MaxOutGradFunctor { public: - void operator()(const platform::DeviceContext& context, + void operator()(const platform::CUDADeviceContext& context, const framework::Tensor& input, framework::Tensor* input_grad, const framework::Tensor& output, const framework::Tensor& output_grad, int groups) { @@ -132,20 +130,17 @@ class MaxOutGradFunctor { dim3 threads(1024, 1); dim3 grid(blocks, 1); - KernelMaxoutGrad< - T><<(context) - .stream()>>>(nthreads, input_data, output_data, - output_grad_data, input_grad_data, input_channels, - input_height, input_width, groups); + KernelMaxoutGrad<<>>( + nthreads, input_data, output_data, output_grad_data, input_grad_data, + input_channels, input_height, input_width, groups); } }; -template class MaxOutGradFunctor; -template class MaxOutGradFunctor; +template class MaxOutGradFunctor; +template class MaxOutGradFunctor; -template class MaxOutFunctor; -template class MaxOutFunctor; +template class MaxOutFunctor; +template class MaxOutFunctor; } // namespace math } // namespace operators diff --git a/paddle/operators/math/maxouting.h b/paddle/operators/math/maxouting.h index 2d9069b0b3..68f4743db0 100644 --- a/paddle/operators/math/maxouting.h +++ b/paddle/operators/math/maxouting.h @@ -23,20 +23,18 @@ namespace math { #define FLT_MAX __FLT_MAX__ -template - +template class MaxOutFunctor { public: - void operator()(const platform::DeviceContext& context, - const framework::Tensor& input, framework::Tensor* output, - int groups); + void operator()(const DeviceContext& context, const framework::Tensor& input, + framework::Tensor* output, int groups); }; -template +template class MaxOutGradFunctor { public: - void operator()(const platform::DeviceContext& context, - const framework::Tensor& input, framework::Tensor* input_grad, + void operator()(const DeviceContext& context, const framework::Tensor& input, + framework::Tensor* input_grad, const framework::Tensor& output, const framework::Tensor& output_grad, int groups); }; diff --git a/paddle/operators/math/pooling.cc b/paddle/operators/math/pooling.cc index 135984586a..150de6fd59 100644 --- a/paddle/operators/math/pooling.cc +++ b/paddle/operators/math/pooling.cc @@ -24,9 +24,9 @@ namespace math { * height and width, respectively. */ template -class Pool2dFunctor { +class Pool2dFunctor { public: - void operator()(const platform::DeviceContext& context, + void operator()(const platform::CPUDeviceContext& context, const framework::Tensor& input, std::vector& ksize, std::vector& strides, std::vector& paddings, PoolProcess pool_process, framework::Tensor* output) { @@ -84,9 +84,9 @@ class Pool2dFunctor { * and width, respectively. */ template -class Pool2dGradFunctor { +class Pool2dGradFunctor { public: - void operator()(const platform::DeviceContext& context, + void operator()(const platform::CPUDeviceContext& context, const framework::Tensor& input, const framework::Tensor& output, const framework::Tensor& output_grad, std::vector& ksize, @@ -152,9 +152,9 @@ class Pool2dGradFunctor { * height and width, respectively. */ template -class MaxPool2dGradFunctor { +class MaxPool2dGradFunctor { public: - void operator()(const platform::DeviceContext& context, + void operator()(const platform::CPUDeviceContext& context, const framework::Tensor& input, const framework::Tensor& output, const framework::Tensor& output_grad, std::vector& ksize, @@ -213,25 +213,29 @@ class MaxPool2dGradFunctor { } }; -template class MaxPool2dGradFunctor; -template class MaxPool2dGradFunctor; +template class MaxPool2dGradFunctor; +template class MaxPool2dGradFunctor; -template class Pool2dFunctor, float>; -template class Pool2dFunctor, float>; -template class Pool2dGradFunctor< - platform::CPUPlace, paddle::operators::math::MaxPoolGrad, float>; -template class Pool2dGradFunctor< - platform::CPUPlace, paddle::operators::math::AvgPoolGrad, float>; -template class Pool2dFunctor, + float>; +template class Pool2dGradFunctor, + float>; +template class Pool2dFunctor, double>; -template class Pool2dFunctor, double>; -template class Pool2dGradFunctor< - platform::CPUPlace, paddle::operators::math::MaxPoolGrad, double>; -template class Pool2dGradFunctor< - platform::CPUPlace, paddle::operators::math::AvgPoolGrad, double>; +template class Pool2dGradFunctor, + double>; +template class Pool2dGradFunctor, + double>; /* * All tensors are in NCDHW format. @@ -239,9 +243,9 @@ template class Pool2dGradFunctor< * depth, height and width, respectively. */ template -class Pool3dFunctor { +class Pool3dFunctor { public: - void operator()(const platform::DeviceContext& context, + void operator()(const platform::CPUDeviceContext& context, const framework::Tensor& input, std::vector& ksize, std::vector& strides, std::vector& paddings, PoolProcess pool_process, framework::Tensor* output) { @@ -314,9 +318,9 @@ class Pool3dFunctor { * depth, height and width, respectively. */ template -class Pool3dGradFunctor { +class Pool3dGradFunctor { public: - void operator()(const platform::DeviceContext& context, + void operator()(const platform::CPUDeviceContext& context, const framework::Tensor& input, const framework::Tensor& output, const framework::Tensor& output_grad, std::vector& ksize, @@ -398,9 +402,9 @@ class Pool3dGradFunctor { * depth, height and width, respectively. */ template -class MaxPool3dGradFunctor { +class MaxPool3dGradFunctor { public: - void operator()(const platform::DeviceContext& context, + void operator()(const platform::CPUDeviceContext& context, const framework::Tensor& input, const framework::Tensor& output, const framework::Tensor& output_grad, std::vector& ksize, @@ -473,25 +477,29 @@ class MaxPool3dGradFunctor { } }; -template class MaxPool3dGradFunctor; -template class MaxPool3dGradFunctor; +template class MaxPool3dGradFunctor; +template class MaxPool3dGradFunctor; -template class Pool3dFunctor, float>; -template class Pool3dFunctor, float>; -template class Pool3dGradFunctor< - platform::CPUPlace, paddle::operators::math::MaxPoolGrad, float>; -template class Pool3dGradFunctor< - platform::CPUPlace, paddle::operators::math::AvgPoolGrad, float>; -template class Pool3dFunctor, + float>; +template class Pool3dGradFunctor, + float>; +template class Pool3dFunctor, double>; -template class Pool3dFunctor, double>; -template class Pool3dGradFunctor< - platform::CPUPlace, paddle::operators::math::MaxPoolGrad, double>; -template class Pool3dGradFunctor< - platform::CPUPlace, paddle::operators::math::AvgPoolGrad, double>; +template class Pool3dGradFunctor, + double>; +template class Pool3dGradFunctor, + double>; /* * All tensors are in NCHW format. @@ -499,9 +507,9 @@ template class Pool3dGradFunctor< * height and width, respectively. */ template -class MaxPool2dWithIndexFunctor { +class MaxPool2dWithIndexFunctor { public: - void operator()(const platform::DeviceContext& context, + void operator()(const platform::CPUDeviceContext& context, const framework::Tensor& input, std::vector& ksize, std::vector& strides, std::vector& paddings, framework::Tensor* output, framework::Tensor* mask) { @@ -564,9 +572,9 @@ class MaxPool2dWithIndexFunctor { * height and width, respectively. */ template -class MaxPool2dWithIndexGradFunctor { +class MaxPool2dWithIndexGradFunctor { public: - void operator()(const platform::DeviceContext& context, + void operator()(const platform::CPUDeviceContext& context, const framework::Tensor& output_grad, const framework::Tensor& mask, std::vector& ksize, std::vector& strides, std::vector& paddings, @@ -602,10 +610,14 @@ class MaxPool2dWithIndexGradFunctor { } }; -template class MaxPool2dWithIndexFunctor; -template class MaxPool2dWithIndexGradFunctor; -template class MaxPool2dWithIndexFunctor; -template class MaxPool2dWithIndexGradFunctor; +template class MaxPool2dWithIndexFunctor; +template class MaxPool2dWithIndexGradFunctor; +template class MaxPool2dWithIndexFunctor; +template class MaxPool2dWithIndexGradFunctor; /* * All tensors are in NCDHW format. @@ -613,9 +625,9 @@ template class MaxPool2dWithIndexGradFunctor; * depth, height and width, respectively. */ template -class MaxPool3dWithIndexFunctor { +class MaxPool3dWithIndexFunctor { public: - void operator()(const platform::DeviceContext& context, + void operator()(const platform::CPUDeviceContext& context, const framework::Tensor& input, std::vector& ksize, std::vector& strides, std::vector& paddings, framework::Tensor* output, framework::Tensor* mask) { @@ -692,9 +704,9 @@ class MaxPool3dWithIndexFunctor { * depth, height and width, respectively. */ template -class MaxPool3dWithIndexGradFunctor { +class MaxPool3dWithIndexGradFunctor { public: - void operator()(const platform::DeviceContext& context, + void operator()(const platform::CPUDeviceContext& context, const framework::Tensor& output_grad, const framework::Tensor& mask, std::vector& ksize, std::vector& strides, std::vector& paddings, @@ -735,10 +747,14 @@ class MaxPool3dWithIndexGradFunctor { } }; -template class MaxPool3dWithIndexFunctor; -template class MaxPool3dWithIndexGradFunctor; -template class MaxPool3dWithIndexFunctor; -template class MaxPool3dWithIndexGradFunctor; +template class MaxPool3dWithIndexFunctor; +template class MaxPool3dWithIndexGradFunctor; +template class MaxPool3dWithIndexFunctor; +template class MaxPool3dWithIndexGradFunctor; } // namespace math } // namespace operators } // namespace paddle diff --git a/paddle/operators/math/pooling.cu b/paddle/operators/math/pooling.cu index ca3560f264..0243cf8316 100644 --- a/paddle/operators/math/pooling.cu +++ b/paddle/operators/math/pooling.cu @@ -155,9 +155,9 @@ __global__ void KernelMaxPool2DGrad( * height and width, respectively. */ template -class Pool2dFunctor { +class Pool2dFunctor { public: - void operator()(const platform::DeviceContext& context, + void operator()(const platform::CUDADeviceContext& context, const framework::Tensor& input, std::vector& ksize, std::vector& strides, std::vector& paddings, PoolProcess pool_process, framework::Tensor* output) { @@ -183,11 +183,7 @@ class Pool2dFunctor { dim3 threads(1024, 1); dim3 grid(blocks, 1); - KernelPool2D< - PoolProcess, - T><<(context) - .stream()>>>( + KernelPool2D<<>>( nthreads, input_data, input_channels, input_height, input_width, output_height, output_width, ksize_height, ksize_width, stride_height, stride_width, padding_height, padding_width, pool_process, output_data); @@ -200,9 +196,9 @@ class Pool2dFunctor { * height and width, respectively. */ template -class Pool2dGradFunctor { +class Pool2dGradFunctor { public: - void operator()(const platform::DeviceContext& context, + void operator()(const platform::CUDADeviceContext& context, const framework::Tensor& input, const framework::Tensor& output, const framework::Tensor& output_grad, std::vector& ksize, @@ -231,11 +227,7 @@ class Pool2dGradFunctor { dim3 threads(1024, 1); dim3 grid(blocks, 1); - KernelPool2DGrad< - PoolProcess, - T><<(context) - .stream()>>>( + KernelPool2DGrad<<>>( nthreads, input_data, output_data, output_grad_data, input_channels, input_height, input_width, output_height, output_width, ksize_height, ksize_width, stride_height, stride_width, padding_height, padding_width, @@ -249,9 +241,9 @@ class Pool2dGradFunctor { * height and width, respectively. */ template -class MaxPool2dGradFunctor { +class MaxPool2dGradFunctor { public: - void operator()(const platform::DeviceContext& context, + void operator()(const platform::CUDADeviceContext& context, const framework::Tensor& input, const framework::Tensor& output, const framework::Tensor& output_grad, std::vector& ksize, @@ -281,10 +273,7 @@ class MaxPool2dGradFunctor { dim3 threads(1024, 1); dim3 grid(blocks, 1); - KernelMaxPool2DGrad< - T><<(context) - .stream()>>>( + KernelMaxPool2DGrad<<>>( nthreads, input_data, output_data, output_grad_data, input_channels, input_height, input_width, output_height, output_width, ksize_height, ksize_width, stride_height, stride_width, padding_height, padding_width, @@ -292,25 +281,29 @@ class MaxPool2dGradFunctor { } }; -template class MaxPool2dGradFunctor; -template class MaxPool2dGradFunctor; +template class MaxPool2dGradFunctor; +template class MaxPool2dGradFunctor; -template class Pool2dFunctor, float>; -template class Pool2dFunctor, float>; -template class Pool2dGradFunctor< - platform::GPUPlace, paddle::operators::math::MaxPoolGrad, float>; -template class Pool2dGradFunctor< - platform::GPUPlace, paddle::operators::math::AvgPoolGrad, float>; -template class Pool2dFunctor, + float>; +template class Pool2dGradFunctor, + float>; +template class Pool2dFunctor, double>; -template class Pool2dFunctor, double>; -template class Pool2dGradFunctor< - platform::GPUPlace, paddle::operators::math::MaxPoolGrad, double>; -template class Pool2dGradFunctor< - platform::GPUPlace, paddle::operators::math::AvgPoolGrad, double>; +template class Pool2dGradFunctor, + double>; +template class Pool2dGradFunctor, + double>; template __global__ void KernelPool3D(const int nthreads, const T* input_data, @@ -478,9 +471,9 @@ __global__ void KernelMaxPool3DGrad( * depth, height and width, respectively. */ template -class Pool3dFunctor { +class Pool3dFunctor { public: - void operator()(const platform::DeviceContext& context, + void operator()(const platform::CUDADeviceContext& context, const framework::Tensor& input, std::vector& ksize, std::vector& strides, std::vector& paddings, PoolProcess pool_process, framework::Tensor* output) { @@ -512,11 +505,7 @@ class Pool3dFunctor { dim3 threads(1024, 1); dim3 grid(blocks, 1); - KernelPool3D< - PoolProcess, - T><<(context) - .stream()>>>( + KernelPool3D<<>>( nthreads, input_data, input_channels, input_depth, input_height, input_width, output_depth, output_height, output_width, ksize_depth, ksize_height, ksize_width, stride_depth, stride_height, stride_width, @@ -531,9 +520,9 @@ class Pool3dFunctor { * depth, height and width, respectively. */ template -class Pool3dGradFunctor { +class Pool3dGradFunctor { public: - void operator()(const platform::DeviceContext& context, + void operator()(const platform::CUDADeviceContext& context, const framework::Tensor& input, const framework::Tensor& output, const framework::Tensor& output_grad, std::vector& ksize, @@ -569,11 +558,7 @@ class Pool3dGradFunctor { dim3 threads(1024, 1); dim3 grid(blocks, 1); - KernelPool3DGrad< - PoolProcess, - T><<(context) - .stream()>>>( + KernelPool3DGrad<<>>( nthreads, input_data, output_data, output_grad_data, input_channels, input_depth, input_height, input_width, output_depth, output_height, output_width, ksize_depth, ksize_height, ksize_width, stride_depth, @@ -588,9 +573,9 @@ class Pool3dGradFunctor { * depth, height and width, respectively. */ template -class MaxPool3dGradFunctor { +class MaxPool3dGradFunctor { public: - void operator()(const platform::DeviceContext& context, + void operator()(const platform::CUDADeviceContext& context, const framework::Tensor& input, const framework::Tensor& output, const framework::Tensor& output_grad, std::vector& ksize, @@ -626,10 +611,7 @@ class MaxPool3dGradFunctor { dim3 threads(1024, 1); dim3 grid(blocks, 1); - KernelMaxPool3DGrad< - T><<(context) - .stream()>>>( + KernelMaxPool3DGrad<<>>( nthreads, input_data, output_data, output_grad_data, input_channels, input_depth, input_height, input_width, output_depth, output_height, output_width, ksize_depth, ksize_height, ksize_width, stride_depth, @@ -638,25 +620,29 @@ class MaxPool3dGradFunctor { } }; -template class MaxPool3dGradFunctor; -template class MaxPool3dGradFunctor; +template class MaxPool3dGradFunctor; +template class MaxPool3dGradFunctor; -template class Pool3dFunctor, float>; -template class Pool3dFunctor, float>; -template class Pool3dGradFunctor< - platform::GPUPlace, paddle::operators::math::MaxPoolGrad, float>; -template class Pool3dGradFunctor< - platform::GPUPlace, paddle::operators::math::AvgPoolGrad, float>; -template class Pool3dFunctor, + float>; +template class Pool3dGradFunctor, + float>; +template class Pool3dFunctor, double>; -template class Pool3dFunctor, double>; -template class Pool3dGradFunctor< - platform::GPUPlace, paddle::operators::math::MaxPoolGrad, double>; -template class Pool3dGradFunctor< - platform::GPUPlace, paddle::operators::math::AvgPoolGrad, double>; +template class Pool3dGradFunctor, + double>; +template class Pool3dGradFunctor, + double>; template __global__ void KernelMaxPool2dWithIdx( @@ -747,9 +733,9 @@ __global__ void KernelMaxPool2DWithIdxGrad( * height and width, respectively. */ template -class MaxPool2dWithIndexFunctor { +class MaxPool2dWithIndexFunctor { public: - void operator()(const platform::DeviceContext& context, + void operator()(const platform::CUDADeviceContext& context, const framework::Tensor& input, std::vector& ksize, std::vector& strides, std::vector& paddings, framework::Tensor* output, framework::Tensor* mask) { @@ -776,10 +762,7 @@ class MaxPool2dWithIndexFunctor { dim3 threads(1024, 1); dim3 grid(blocks, 1); - KernelMaxPool2dWithIdx< - T1, T2><<(context) - .stream()>>>( + KernelMaxPool2dWithIdx<<>>( nthreads, input_data, input_channels, input_height, input_width, output_height, output_width, ksize_height, ksize_width, stride_height, stride_width, padding_height, padding_width, output_data, mask_data); @@ -792,9 +775,9 @@ class MaxPool2dWithIndexFunctor { * height and width, respectively. */ template -class MaxPool2dWithIndexGradFunctor { +class MaxPool2dWithIndexGradFunctor { public: - void operator()(const platform::DeviceContext& context, + void operator()(const platform::CUDADeviceContext& context, const framework::Tensor& output_grad, const framework::Tensor& mask, std::vector& ksize, std::vector& strides, std::vector& paddings, @@ -821,10 +804,7 @@ class MaxPool2dWithIndexGradFunctor { dim3 threads(1024, 1); dim3 grid(blocks, 1); - KernelMaxPool2DWithIdxGrad< - T1, T2><<(context) - .stream()>>>( + KernelMaxPool2DWithIdxGrad<<>>( nthreads, output_grad_data, mask_data, input_channels, input_height, input_width, output_height, output_width, ksize_height, ksize_width, stride_height, stride_width, padding_height, padding_width, @@ -832,10 +812,14 @@ class MaxPool2dWithIndexGradFunctor { } }; -template class MaxPool2dWithIndexFunctor; -template class MaxPool2dWithIndexGradFunctor; -template class MaxPool2dWithIndexFunctor; -template class MaxPool2dWithIndexGradFunctor; +template class MaxPool2dWithIndexFunctor; +template class MaxPool2dWithIndexGradFunctor; +template class MaxPool2dWithIndexFunctor; +template class MaxPool2dWithIndexGradFunctor; template __global__ void KernelMaxPool3DWithIdx( @@ -950,9 +934,9 @@ __global__ void KernelMaxPool3DWithIdxGrad( * depth, height and width, respectively. */ template -class MaxPool3dWithIndexFunctor { +class MaxPool3dWithIndexFunctor { public: - void operator()(const platform::DeviceContext& context, + void operator()(const platform::CUDADeviceContext& context, const framework::Tensor& input, std::vector& ksize, std::vector& strides, std::vector& paddings, framework::Tensor* output, framework::Tensor* mask) { @@ -985,10 +969,7 @@ class MaxPool3dWithIndexFunctor { dim3 threads(1024, 1); dim3 grid(blocks, 1); - KernelMaxPool3DWithIdx< - T1, T2><<(context) - .stream()>>>( + KernelMaxPool3DWithIdx<<>>( nthreads, input_data, input_channels, input_depth, input_height, input_width, output_depth, output_height, output_width, ksize_depth, ksize_height, ksize_width, stride_depth, stride_height, stride_width, @@ -1002,9 +983,9 @@ class MaxPool3dWithIndexFunctor { * depth, height and width, respectively. */ template -class MaxPool3dWithIndexGradFunctor { +class MaxPool3dWithIndexGradFunctor { public: - void operator()(const platform::DeviceContext& context, + void operator()(const platform::CUDADeviceContext& context, const framework::Tensor& output_grad, const framework::Tensor& mask, std::vector& ksize, std::vector& strides, std::vector& paddings, @@ -1037,10 +1018,7 @@ class MaxPool3dWithIndexGradFunctor { dim3 threads(1024, 1); dim3 grid(blocks, 1); - KernelMaxPool3DWithIdxGrad< - T1, T2><<(context) - .stream()>>>( + KernelMaxPool3DWithIdxGrad<<>>( nthreads, output_grad_data, mask_data, input_channels, input_depth, input_height, input_width, output_depth, output_height, output_width, ksize_depth, ksize_height, ksize_width, stride_depth, stride_height, @@ -1049,10 +1027,14 @@ class MaxPool3dWithIndexGradFunctor { } }; -template class MaxPool3dWithIndexFunctor; -template class MaxPool3dWithIndexGradFunctor; -template class MaxPool3dWithIndexFunctor; -template class MaxPool3dWithIndexGradFunctor; +template class MaxPool3dWithIndexFunctor; +template class MaxPool3dWithIndexGradFunctor; +template class MaxPool3dWithIndexFunctor; +template class MaxPool3dWithIndexGradFunctor; } // namespace math } // namespace operators diff --git a/paddle/operators/math/pooling.h b/paddle/operators/math/pooling.h index 19fbd8b4bb..2759f06cb6 100644 --- a/paddle/operators/math/pooling.h +++ b/paddle/operators/math/pooling.h @@ -84,62 +84,58 @@ class AvgPoolGrad { * This is different from average pooling. So we rewrite the max_pool_grad: * MaxPool2dGradFunctor, MaxPool3dGradFunctor. */ -template +template class Pool2dFunctor { public: - void operator()(const platform::DeviceContext& context, - const framework::Tensor& input, std::vector& ksize, - std::vector& strides, std::vector& paddings, - PoolProcess pool_compute, framework::Tensor* output); + void operator()(const DeviceContext& context, const framework::Tensor& input, + std::vector& ksize, std::vector& strides, + std::vector& paddings, PoolProcess pool_compute, + framework::Tensor* output); }; -template +template class Pool2dGradFunctor { public: - void operator()(const platform::DeviceContext& context, - const framework::Tensor& input, + void operator()(const DeviceContext& context, const framework::Tensor& input, const framework::Tensor& output, const framework::Tensor& output_grad, std::vector& ksize, std::vector& strides, std::vector& paddings, PoolProcess pool_compute, framework::Tensor* input_grad); }; -template +template class MaxPool2dGradFunctor { public: - void operator()(const platform::DeviceContext& context, - const framework::Tensor& input, + void operator()(const DeviceContext& context, const framework::Tensor& input, const framework::Tensor& output, const framework::Tensor& output_grad, std::vector& ksize, std::vector& strides, std::vector& paddings, framework::Tensor* input_grad); }; -template +template class Pool3dFunctor { public: - void operator()(const platform::DeviceContext& context, - const framework::Tensor& input, std::vector& ksize, - std::vector& strides, std::vector& paddings, - PoolProcess pool_compute, framework::Tensor* output); + void operator()(const DeviceContext& context, const framework::Tensor& input, + std::vector& ksize, std::vector& strides, + std::vector& paddings, PoolProcess pool_compute, + framework::Tensor* output); }; -template +template class Pool3dGradFunctor { public: - void operator()(const platform::DeviceContext& context, - const framework::Tensor& input, + void operator()(const DeviceContext& context, const framework::Tensor& input, const framework::Tensor& output, const framework::Tensor& output_grad, std::vector& ksize, std::vector& strides, std::vector& paddings, PoolProcess pool_compute, framework::Tensor* input_grad); }; -template +template class MaxPool3dGradFunctor { public: - void operator()(const platform::DeviceContext& context, - const framework::Tensor& input, + void operator()(const DeviceContext& context, const framework::Tensor& input, const framework::Tensor& output, const framework::Tensor& output_grad, std::vector& ksize, std::vector& strides, std::vector& paddings, @@ -153,38 +149,38 @@ class MaxPool3dGradFunctor { * In pool2d, all tensors are in NCHW format. In pool3d, all tensors are in * NCDHW format. */ -template +template class MaxPool2dWithIndexFunctor { public: - void operator()(const platform::DeviceContext& context, - const framework::Tensor& input, std::vector& ksize, - std::vector& strides, std::vector& paddings, - framework::Tensor* output, framework::Tensor* mask); + void operator()(const DeviceContext& context, const framework::Tensor& input, + std::vector& ksize, std::vector& strides, + std::vector& paddings, framework::Tensor* output, + framework::Tensor* mask); }; -template +template class MaxPool2dWithIndexGradFunctor { public: - void operator()(const platform::DeviceContext& context, + void operator()(const DeviceContext& context, const framework::Tensor& output_grad, const framework::Tensor& mask, std::vector& ksize, std::vector& strides, std::vector& paddings, framework::Tensor* input_grad); }; -template +template class MaxPool3dWithIndexFunctor { public: - void operator()(const platform::DeviceContext& context, - const framework::Tensor& input, std::vector& ksize, - std::vector& strides, std::vector& paddings, - framework::Tensor* output, framework::Tensor* mask); + void operator()(const DeviceContext& context, const framework::Tensor& input, + std::vector& ksize, std::vector& strides, + std::vector& paddings, framework::Tensor* output, + framework::Tensor* mask); }; -template +template class MaxPool3dWithIndexGradFunctor { public: - void operator()(const platform::DeviceContext& context, + void operator()(const DeviceContext& context, const framework::Tensor& output_grad, const framework::Tensor& mask, std::vector& ksize, std::vector& strides, std::vector& paddings, diff --git a/paddle/operators/math/selected_rows_functor.cc b/paddle/operators/math/selected_rows_functor.cc index 514f2adef2..ab758d1e7f 100644 --- a/paddle/operators/math/selected_rows_functor.cc +++ b/paddle/operators/math/selected_rows_functor.cc @@ -19,8 +19,8 @@ namespace paddle { namespace operators { namespace math { template -struct SelectedRowsAdd { - void operator()(const platform::DeviceContext& context, +struct SelectedRowsAdd { + void operator()(const platform::CPUDeviceContext& context, const framework::SelectedRows& input1, const framework::SelectedRows& input2, framework::SelectedRows* output) { @@ -67,12 +67,12 @@ struct SelectedRowsAdd { } }; -template struct SelectedRowsAdd; -template struct SelectedRowsAdd; +template struct SelectedRowsAdd; +template struct SelectedRowsAdd; template -struct SelectedRowsAddTensor { - void operator()(const platform::DeviceContext& context, +struct SelectedRowsAddTensor { + void operator()(const platform::CPUDeviceContext& context, const framework::SelectedRows& input1, const framework::Tensor& input2, framework::Tensor* output) { auto in1_height = input1.height(); @@ -88,7 +88,7 @@ struct SelectedRowsAddTensor { PADDLE_ENFORCE_EQ(in1_row_numel, input2.numel() / in1_height); PADDLE_ENFORCE_EQ(in1_row_numel, output->numel() / in1_height); - SetConstant functor; + SetConstant functor; functor(context, output, 0.0); auto* in1_data = in1_value.data(); @@ -103,17 +103,16 @@ struct SelectedRowsAddTensor { auto out_eigen = framework::EigenVector::Flatten(*output); auto in2_eigen = framework::EigenVector::Flatten(input2); - out_eigen.device(*context.GetEigenDevice()) = - out_eigen + in2_eigen; + out_eigen.device(*context.eigen_device()) = out_eigen + in2_eigen; } }; -template struct SelectedRowsAddTensor; -template struct SelectedRowsAddTensor; +template struct SelectedRowsAddTensor; +template struct SelectedRowsAddTensor; template -struct SelectedRowsAddTo { - void operator()(const platform::DeviceContext& context, +struct SelectedRowsAddTo { + void operator()(const platform::CPUDeviceContext& context, const framework::SelectedRows& input1, const int64_t input2_offset, framework::SelectedRows* input2) { @@ -143,14 +142,14 @@ struct SelectedRowsAddTo { } }; -template struct SelectedRowsAddTo; -template struct SelectedRowsAddTo; -template struct SelectedRowsAddTo; -template struct SelectedRowsAddTo; +template struct SelectedRowsAddTo; +template struct SelectedRowsAddTo; +template struct SelectedRowsAddTo; +template struct SelectedRowsAddTo; template -struct SelectedRowsAddToTensor { - void operator()(const platform::DeviceContext& context, +struct SelectedRowsAddToTensor { + void operator()(const platform::CPUDeviceContext& context, const framework::SelectedRows& input1, framework::Tensor* input2) { auto in1_height = input1.height(); @@ -175,10 +174,10 @@ struct SelectedRowsAddToTensor { } }; -template struct SelectedRowsAddToTensor; -template struct SelectedRowsAddToTensor; -template struct SelectedRowsAddToTensor; -template struct SelectedRowsAddToTensor; +template struct SelectedRowsAddToTensor; +template struct SelectedRowsAddToTensor; +template struct SelectedRowsAddToTensor; +template struct SelectedRowsAddToTensor; } // namespace math } // namespace operators diff --git a/paddle/operators/math/selected_rows_functor.cu b/paddle/operators/math/selected_rows_functor.cu index c1dd323ba2..c44577e00a 100644 --- a/paddle/operators/math/selected_rows_functor.cu +++ b/paddle/operators/math/selected_rows_functor.cu @@ -20,8 +20,8 @@ namespace paddle { namespace operators { namespace math { template -struct SelectedRowsAdd { - void operator()(const platform::DeviceContext& context, +struct SelectedRowsAdd { + void operator()(const platform::CUDADeviceContext& context, const framework::SelectedRows& input1, const framework::SelectedRows& input2, framework::SelectedRows* output) { @@ -64,16 +64,15 @@ struct SelectedRowsAdd { reinterpret_cast(context).stream()); auto* in2_data = in2_value.data(); - memory::Copy( - boost::get(out_place), out_data + in1_value.numel(), - boost::get(in2_place), in2_data, - in2_value.numel() * sizeof(T), - reinterpret_cast(context).stream()); + memory::Copy(boost::get(out_place), + out_data + in1_value.numel(), + boost::get(in2_place), in2_data, + in2_value.numel() * sizeof(T), context.stream()); } }; -template struct SelectedRowsAdd; -template struct SelectedRowsAdd; +template struct SelectedRowsAdd; +template struct SelectedRowsAdd; namespace { template @@ -96,8 +95,8 @@ __global__ void SelectedRowsAddTensorKernel(const T* selected_rows, } // namespace template -struct SelectedRowsAddTensor { - void operator()(const platform::DeviceContext& context, +struct SelectedRowsAddTensor { + void operator()(const platform::CUDADeviceContext& context, const framework::SelectedRows& input1, const framework::Tensor& input2, framework::Tensor* output) { auto in1_height = input1.height(); @@ -117,30 +116,28 @@ struct SelectedRowsAddTensor { auto* in2_data = input2.data(); auto* out_data = output->data(); - SetConstant functor; + SetConstant functor; functor(context, output, 0.0); const int block_size = 256; dim3 threads(block_size, 1); dim3 grid(1, in1_rows.size()); - SelectedRowsAddTensorKernel<<< - grid, threads, 0, - reinterpret_cast(context) - .stream()>>>(in1_data, in1_rows.data(), out_data, in1_row_numel); + SelectedRowsAddTensorKernel< + T, block_size><<>>( + in1_data, in1_rows.data(), out_data, in1_row_numel); auto out_eigen = framework::EigenVector::Flatten(*output); auto in2_eigen = framework::EigenVector::Flatten(input2); - out_eigen.device(*context.GetEigenDevice()) = - out_eigen + in2_eigen; + out_eigen.device(*context.eigen_device()) = out_eigen + in2_eigen; } }; -template struct SelectedRowsAddTensor; -template struct SelectedRowsAddTensor; +template struct SelectedRowsAddTensor; +template struct SelectedRowsAddTensor; template -struct SelectedRowsAddTo { - void operator()(const platform::DeviceContext& context, +struct SelectedRowsAddTo { + void operator()(const platform::CUDADeviceContext& context, const framework::SelectedRows& input1, const int64_t input2_offset, framework::SelectedRows* input2) { @@ -163,18 +160,17 @@ struct SelectedRowsAddTo { auto* in1_data = in1_value.data(); auto* in2_data = in2_value->data(); - memory::Copy( - boost::get(in2_place), in2_data + input2_offset, - boost::get(in1_place), in1_data, - in1_value.numel() * sizeof(T), - reinterpret_cast(context).stream()); + memory::Copy(boost::get(in2_place), + in2_data + input2_offset, + boost::get(in1_place), in1_data, + in1_value.numel() * sizeof(T), context.stream()); } }; -template struct SelectedRowsAddTo; -template struct SelectedRowsAddTo; -template struct SelectedRowsAddTo; -template struct SelectedRowsAddTo; +template struct SelectedRowsAddTo; +template struct SelectedRowsAddTo; +template struct SelectedRowsAddTo; +template struct SelectedRowsAddTo; namespace { template @@ -197,8 +193,8 @@ __global__ void SelectedRowsAddToTensorKernel(const T* selected_rows, } // namespace template -struct SelectedRowsAddToTensor { - void operator()(const platform::DeviceContext& context, +struct SelectedRowsAddToTensor { + void operator()(const platform::CUDADeviceContext& context, const framework::SelectedRows& input1, framework::Tensor* input2) { auto in1_height = input1.height(); @@ -216,17 +212,16 @@ struct SelectedRowsAddToTensor { const int block_size = 256; dim3 threads(block_size, 1); dim3 grid(1, in1_rows.size()); - SelectedRowsAddToTensorKernel<<< - grid, threads, 0, - reinterpret_cast(context) - .stream()>>>(in1_data, in1_rows.data(), in2_data, in1_row_numel); + SelectedRowsAddToTensorKernel< + T, block_size><<>>( + in1_data, in1_rows.data(), in2_data, in1_row_numel); } }; -template struct SelectedRowsAddToTensor; -template struct SelectedRowsAddToTensor; -template struct SelectedRowsAddToTensor; -template struct SelectedRowsAddToTensor; +template struct SelectedRowsAddToTensor; +template struct SelectedRowsAddToTensor; +template struct SelectedRowsAddToTensor; +template struct SelectedRowsAddToTensor; } // namespace math } // namespace operators } // namespace paddle diff --git a/paddle/operators/math/selected_rows_functor.h b/paddle/operators/math/selected_rows_functor.h index d6dc6c03c9..1149075abf 100644 --- a/paddle/operators/math/selected_rows_functor.h +++ b/paddle/operators/math/selected_rows_functor.h @@ -21,33 +21,33 @@ namespace math { // SelectedRows + SelectedRows will simplely concat value and rows. // The real computation happens in dealing with LoDTensor. -template +template struct SelectedRowsAdd { - void operator()(const platform::DeviceContext& context, + void operator()(const DeviceContext& context, const framework::SelectedRows& input1, const framework::SelectedRows& input2, framework::SelectedRows* output); }; -template +template struct SelectedRowsAddTensor { - void operator()(const platform::DeviceContext& context, + void operator()(const DeviceContext& context, const framework::SelectedRows& input1, const framework::Tensor& input2, framework::Tensor* output); }; // input2 = input1 + input2 -template +template struct SelectedRowsAddTo { - void operator()(const platform::DeviceContext& context, + void operator()(const DeviceContext& context, const framework::SelectedRows& input1, const int64_t input2_offset, framework::SelectedRows* input2); }; // input2 = input1 + input2 -template +template struct SelectedRowsAddToTensor { - void operator()(const platform::DeviceContext& context, + void operator()(const DeviceContext& context, const framework::SelectedRows& input1, framework::Tensor* input2); }; diff --git a/paddle/operators/math/selected_rows_functor_test.cc b/paddle/operators/math/selected_rows_functor_test.cc index a3649b6875..8c74cab0a1 100644 --- a/paddle/operators/math/selected_rows_functor_test.cc +++ b/paddle/operators/math/selected_rows_functor_test.cc @@ -23,7 +23,7 @@ TEST(selected_rows_functor, cpu_add) { CPUPlace cpu_place; CPUDeviceContext ctx(cpu_place); - SetConstant functor; + SetConstant functor; int64_t height = 10; int64_t row_numel = 10; @@ -47,7 +47,7 @@ TEST(selected_rows_functor, cpu_add) { // simplely concat two SelectedRows out_value->mutable_data(make_ddim({7, 10}), cpu_place); - SelectedRowsAdd add_functor; + SelectedRowsAdd add_functor; add_functor(ctx, *selected_rows1, *selected_rows2, output.get()); auto out_height = output->height(); @@ -85,7 +85,7 @@ TEST(selected_rows_functor, cpu_add) { std::unique_ptr tensor2{new Tensor()}; tensor2->mutable_data(make_ddim({height, row_numel}), cpu_place); - SelectedRowsAddTensor add_tensor_functor; + SelectedRowsAddTensor add_tensor_functor; add_tensor_functor(ctx, *output, *tensor1, tensor2.get()); auto* tensor2_data = tensor2->data(); @@ -112,7 +112,7 @@ TEST(selected_rows_functor, cpu_add_to) { CPUPlace cpu_place; CPUDeviceContext ctx(cpu_place); - SetConstant functor; + SetConstant functor; int64_t height = 10; int64_t row_numel = 10; @@ -137,7 +137,7 @@ TEST(selected_rows_functor, cpu_add_to) { // simplely concat two SelectedRows out_value->mutable_data(make_ddim({7, 10}), cpu_place); - SelectedRowsAddTo add_to_functor; + SelectedRowsAddTo add_to_functor; add_to_functor(ctx, *selected_rows1, 0, output.get()); add_to_functor(ctx, *selected_rows2, in1_value->numel(), output.get()); @@ -173,7 +173,7 @@ TEST(selected_rows_functor, cpu_add_to) { tensor1->mutable_data(make_ddim({height, row_numel}), cpu_place); functor(ctx, tensor1.get(), 3.0); - SelectedRowsAddToTensor add_to_tensor_functor; + SelectedRowsAddToTensor add_to_tensor_functor; add_to_tensor_functor(ctx, *output, tensor1.get()); auto* tensor1_data = tensor1->data(); diff --git a/paddle/operators/math/selected_rows_functor_test.cu b/paddle/operators/math/selected_rows_functor_test.cu index 7de9291c17..777caf5635 100644 --- a/paddle/operators/math/selected_rows_functor_test.cu +++ b/paddle/operators/math/selected_rows_functor_test.cu @@ -24,7 +24,7 @@ TEST(selected_rows_functor, gpu_add) { GPUPlace gpu_place(0); CPUPlace cpu_place; CUDADeviceContext ctx(gpu_place); - SetConstant functor; + SetConstant functor; int64_t height = 10; int64_t row_numel = 10; @@ -48,7 +48,7 @@ TEST(selected_rows_functor, gpu_add) { // simplely concat two SelectedRows out_value->mutable_data(make_ddim({7, 10}), gpu_place); - SelectedRowsAdd add_functor; + SelectedRowsAdd add_functor; add_functor(ctx, *selected_rows1, *selected_rows2, output.get()); auto out_height = output->height(); @@ -90,7 +90,7 @@ TEST(selected_rows_functor, gpu_add) { std::unique_ptr tensor2{new Tensor()}; tensor2->mutable_data(make_ddim({height, row_numel}), gpu_place); - SelectedRowsAddTensor add_tensor_functor; + SelectedRowsAddTensor add_tensor_functor; add_tensor_functor(ctx, *output, *tensor1, tensor2.get()); Tensor tensor2_cpu; @@ -122,7 +122,7 @@ TEST(selected_rows_functor, gpu_add_to) { GPUPlace gpu_place(0); CPUPlace cpu_place; CUDADeviceContext ctx(gpu_place); - SetConstant functor; + SetConstant functor; int64_t height = 10; int64_t row_numel = 10; @@ -147,7 +147,7 @@ TEST(selected_rows_functor, gpu_add_to) { // simplely concat two SelectedRows out_value->mutable_data(make_ddim({7, 10}), gpu_place); - SelectedRowsAddTo add_to_functor; + SelectedRowsAddTo add_to_functor; add_to_functor(ctx, *selected_rows1, 0, output.get()); add_to_functor(ctx, *selected_rows2, in1_value->numel(), output.get()); @@ -187,7 +187,7 @@ TEST(selected_rows_functor, gpu_add_to) { tensor1->mutable_data(make_ddim({height, row_numel}), gpu_place); functor(ctx, tensor1.get(), 3.0); - SelectedRowsAddToTensor add_to_tensor_functor; + SelectedRowsAddToTensor add_to_tensor_functor; add_to_tensor_functor(ctx, *output, tensor1.get()); Tensor tensor1_cpu; diff --git a/paddle/operators/math/sequence2batch.cc b/paddle/operators/math/sequence2batch.cc index 5b3bde02fb..88977be1f8 100644 --- a/paddle/operators/math/sequence2batch.cc +++ b/paddle/operators/math/sequence2batch.cc @@ -19,9 +19,9 @@ namespace operators { namespace math { template -class CopyMatrixRowsFunctor { +class CopyMatrixRowsFunctor { public: - void operator()(const platform::DeviceContext& context, + void operator()(const platform::CPUDeviceContext& context, const framework::Tensor& src, const size_t* index, framework::Tensor& dst, bool is_src_index) { auto src_dims = src.dims(); @@ -48,13 +48,13 @@ class CopyMatrixRowsFunctor { } }; -template class CopyMatrixRowsFunctor; -template class CopyMatrixRowsFunctor; +template class CopyMatrixRowsFunctor; +template class CopyMatrixRowsFunctor; -template class LoDTensor2BatchFunctor; -template class LoDTensor2BatchFunctor; -template class Batch2LoDTensorFunctor; -template class Batch2LoDTensorFunctor; +template class LoDTensor2BatchFunctor; +template class LoDTensor2BatchFunctor; +template class Batch2LoDTensorFunctor; +template class Batch2LoDTensorFunctor; } // namespace math } // namespace operators diff --git a/paddle/operators/math/sequence2batch.cu b/paddle/operators/math/sequence2batch.cu index c5d968aeb2..452ae89510 100644 --- a/paddle/operators/math/sequence2batch.cu +++ b/paddle/operators/math/sequence2batch.cu @@ -39,9 +39,9 @@ __global__ void CopyMatrixRowsKernel(const T* src, T* dst, const size_t* index, } template -class CopyMatrixRowsFunctor { +class CopyMatrixRowsFunctor { public: - void operator()(const platform::DeviceContext& context, + void operator()(const platform::CUDADeviceContext& context, const framework::Tensor& src, const size_t* index, framework::Tensor& dst, bool is_src_index) { auto src_dims = src.dims(); @@ -59,20 +59,19 @@ class CopyMatrixRowsFunctor { dim3 threads(128, 8); dim3 grid(8, 1); - auto stream = - reinterpret_cast(context).stream(); + auto stream = context.stream(); CopyMatrixRowsKernel<<>>( src_data, dst_data, index, height, width, is_src_index); } }; -template class CopyMatrixRowsFunctor; -template class CopyMatrixRowsFunctor; +template class CopyMatrixRowsFunctor; +template class CopyMatrixRowsFunctor; -template class LoDTensor2BatchFunctor; -template class LoDTensor2BatchFunctor; -template class Batch2LoDTensorFunctor; -template class Batch2LoDTensorFunctor; +template class LoDTensor2BatchFunctor; +template class LoDTensor2BatchFunctor; +template class Batch2LoDTensorFunctor; +template class Batch2LoDTensorFunctor; } // namespace math } // namespace operators diff --git a/paddle/operators/math/sequence2batch.h b/paddle/operators/math/sequence2batch.h index 73295ddbcb..a5c43a2c7d 100644 --- a/paddle/operators/math/sequence2batch.h +++ b/paddle/operators/math/sequence2batch.h @@ -26,7 +26,7 @@ template using EigenMatrix = framework::EigenMatrix; -template +template class CopyMatrixRowsFunctor { public: // If is_src_index is true, @@ -34,12 +34,12 @@ class CopyMatrixRowsFunctor { // If is_src_index is false, // copy the input src to the indexed rows of output dst. // The indexed rows are based on the input index. - void operator()(const platform::DeviceContext& context, - const framework::Tensor& src, const size_t* index, - framework::Tensor& dst, bool is_src_index); + void operator()(const DeviceContext& context, const framework::Tensor& src, + const size_t* index, framework::Tensor& dst, + bool is_src_index); }; -template +template class LoDTensor2BatchFunctor { // Calculate the length of each sequence and // sort sequence index by the length. @@ -56,7 +56,7 @@ class LoDTensor2BatchFunctor { }; public: - void operator()(const platform::DeviceContext& context, + void operator()(const DeviceContext& context, const framework::LoDTensor& lod_tensor, framework::LoDTensor& batch, bool is_cal_batch_lod, bool is_reverse = false) const { @@ -65,7 +65,7 @@ class LoDTensor2BatchFunctor { PADDLE_ENFORCE_GT(lods.size(), 2UL); PADDLE_ENFORCE_EQ(lods[1].size(), static_cast(lod_tensor.dims()[0])); - CopyMatrixRowsFunctor to_batch; + CopyMatrixRowsFunctor to_batch; to_batch(context, lod_tensor, lods[1].data(), batch, true); return; } @@ -143,22 +143,22 @@ class LoDTensor2BatchFunctor { } batch.set_lod(batch_lods); - CopyMatrixRowsFunctor to_batch; + CopyMatrixRowsFunctor to_batch; to_batch(context, lod_tensor, seq2batch_idx, batch, true); } }; -template +template class Batch2LoDTensorFunctor { public: - void operator()(const platform::DeviceContext& context, + void operator()(const DeviceContext& context, const framework::LoDTensor& batch, framework::LoDTensor& lod_tensor) const { auto in_lod = batch.lod(); PADDLE_ENFORCE_GT(in_lod.size(), 2UL); PADDLE_ENFORCE_EQ(in_lod[1].size(), static_cast(lod_tensor.dims()[0])); - CopyMatrixRowsFunctor to_seq; + CopyMatrixRowsFunctor to_seq; size_t* index = in_lod[1].data(); to_seq(context, batch, index, lod_tensor, false); } diff --git a/paddle/operators/math/sequence_pooling.cc b/paddle/operators/math/sequence_pooling.cc index 5913c99fdb..8fb92b1a13 100644 --- a/paddle/operators/math/sequence_pooling.cc +++ b/paddle/operators/math/sequence_pooling.cc @@ -20,9 +20,9 @@ namespace operators { namespace math { template -class MaxSeqPoolFunctor { +class MaxSeqPoolFunctor { public: - void operator()(const platform::DeviceContext& context, + void operator()(const platform::CPUDeviceContext& context, const framework::LoDTensor& input, framework::Tensor* output, framework::Tensor* index) { auto in_dims = input.dims(); @@ -60,9 +60,9 @@ class MaxSeqPoolFunctor { }; template -class MaxSeqPoolGradFunctor { +class MaxSeqPoolGradFunctor { public: - void operator()(const platform::DeviceContext& context, + void operator()(const platform::CPUDeviceContext& context, const framework::Tensor& out_grad, const framework::Tensor& index, framework::LoDTensor* in_grad) { @@ -80,7 +80,7 @@ class MaxSeqPoolGradFunctor { const int* max_index = index.data(); T* ig_data = in_grad->data(); - SetConstant set_zero; + SetConstant set_zero; set_zero(context, in_grad, static_cast(0.0)); int64_t num_seq = og_dims[0]; int64_t dim = out_grad.numel() / num_seq; @@ -93,10 +93,10 @@ class MaxSeqPoolGradFunctor { } }; -template class MaxSeqPoolFunctor; -template class MaxSeqPoolFunctor; -template class MaxSeqPoolGradFunctor; -template class MaxSeqPoolGradFunctor; +template class MaxSeqPoolFunctor; +template class MaxSeqPoolFunctor; +template class MaxSeqPoolGradFunctor; +template class MaxSeqPoolGradFunctor; } // namespace math } // namespace operators diff --git a/paddle/operators/math/sequence_pooling.cu b/paddle/operators/math/sequence_pooling.cu index 5ed951402f..4c9e6b375c 100644 --- a/paddle/operators/math/sequence_pooling.cu +++ b/paddle/operators/math/sequence_pooling.cu @@ -46,9 +46,9 @@ __global__ void KeMaxSequencePool(const T* input, const size_t* starts, } template -class MaxSeqPoolFunctor { +class MaxSeqPoolFunctor { public: - void operator()(const platform::DeviceContext& context, + void operator()(const platform::CUDADeviceContext& context, const framework::LoDTensor& input, framework::Tensor* output, framework::Tensor* index) { auto in_dims = input.dims(); @@ -71,8 +71,7 @@ class MaxSeqPoolFunctor { dim3 threads(256, 1); dim3 grid(num_seq, 1); - auto stream = - reinterpret_cast(context).stream(); + auto stream = context.stream(); KeMaxSequencePool<<>>( in_data, starts.data(), out_data, max_index, num_seq, dim); } @@ -91,9 +90,9 @@ __global__ void KeMaxSequencePoolGrad(const T* out_grad, const int* max_index, } template -class MaxSeqPoolGradFunctor { +class MaxSeqPoolGradFunctor { public: - void operator()(const platform::DeviceContext& context, + void operator()(const platform::CUDADeviceContext& context, const framework::Tensor& out_grad, const framework::Tensor& index, framework::LoDTensor* in_grad) { @@ -111,7 +110,7 @@ class MaxSeqPoolGradFunctor { const int* max_index = index.data(); T* ig_data = in_grad->data(); - SetConstant set_zero; + SetConstant set_zero; set_zero(context, in_grad, static_cast(0.0)); int64_t num_seq = og_dims[0]; int64_t dim = out_grad.numel() / num_seq; @@ -119,17 +118,16 @@ class MaxSeqPoolGradFunctor { unsigned int blocks = (num_seq * dim + 128 - 1) / 128; dim3 threads(128, 1); dim3 grid(blocks, 1); - auto stream = - reinterpret_cast(context).stream(); + auto stream = context.stream(); KeMaxSequencePoolGrad<<>>( og_data, max_index, ig_data, num_seq, dim); } }; -template class MaxSeqPoolFunctor; -template class MaxSeqPoolFunctor; -template class MaxSeqPoolGradFunctor; -template class MaxSeqPoolGradFunctor; +template class MaxSeqPoolFunctor; +template class MaxSeqPoolFunctor; +template class MaxSeqPoolGradFunctor; +template class MaxSeqPoolGradFunctor; } // namespace math } // namespace operators diff --git a/paddle/operators/math/sequence_pooling.h b/paddle/operators/math/sequence_pooling.h index 35dfe26de1..13ffb2ebef 100644 --- a/paddle/operators/math/sequence_pooling.h +++ b/paddle/operators/math/sequence_pooling.h @@ -23,18 +23,18 @@ namespace math { #define FLT_MAX __FLT_MAX__ -template +template class MaxSeqPoolFunctor { public: - void operator()(const platform::DeviceContext& context, + void operator()(const DeviceContext& context, const framework::LoDTensor& input, framework::Tensor* output, framework::Tensor* index); }; -template +template class MaxSeqPoolGradFunctor { public: - void operator()(const platform::DeviceContext& context, + void operator()(const DeviceContext& context, const framework::Tensor& out_grad, const framework::Tensor& index, framework::LoDTensor* in_grad); diff --git a/paddle/operators/math/softmax.cc b/paddle/operators/math/softmax.cc index 3e2f15d6c2..72f10f35f4 100644 --- a/paddle/operators/math/softmax.cc +++ b/paddle/operators/math/softmax.cc @@ -19,10 +19,10 @@ namespace paddle { namespace operators { namespace math { -template class SoftmaxFunctor; -template class SoftmaxFunctor; -template class SoftmaxGradFunctor; -template class SoftmaxGradFunctor; +template class SoftmaxFunctor; +template class SoftmaxFunctor; +template class SoftmaxGradFunctor; +template class SoftmaxGradFunctor; } // namespace math } // namespace operators diff --git a/paddle/operators/math/softmax.cu b/paddle/operators/math/softmax.cu index 4dbab51d46..9e73f6a371 100644 --- a/paddle/operators/math/softmax.cu +++ b/paddle/operators/math/softmax.cu @@ -21,10 +21,10 @@ namespace paddle { namespace operators { namespace math { -template class SoftmaxFunctor; -template class SoftmaxFunctor; -template class SoftmaxGradFunctor; -template class SoftmaxGradFunctor; +template class SoftmaxFunctor; +template class SoftmaxFunctor; +template class SoftmaxGradFunctor; +template class SoftmaxGradFunctor; } // namespace math } // namespace operators diff --git a/paddle/operators/math/softmax.h b/paddle/operators/math/softmax.h index fe10746502..471f44d340 100644 --- a/paddle/operators/math/softmax.h +++ b/paddle/operators/math/softmax.h @@ -19,19 +19,18 @@ namespace paddle { namespace operators { namespace math { -template +template class SoftmaxFunctor { public: - void operator()(const platform::DeviceContext& context, - const framework::Tensor* X, framework::Tensor* Y); + void operator()(const DeviceContext& context, const framework::Tensor* X, + framework::Tensor* Y); }; -template +template class SoftmaxGradFunctor { public: - void operator()(const platform::DeviceContext& context, - const framework::Tensor* y, const framework::Tensor* y_grad, - framework::Tensor* x_grad); + void operator()(const DeviceContext& context, const framework::Tensor* y, + const framework::Tensor* y_grad, framework::Tensor* x_grad); }; } // namespace math diff --git a/paddle/operators/math/softmax_impl.h b/paddle/operators/math/softmax_impl.h index 05793eeb3e..82f597ff79 100644 --- a/paddle/operators/math/softmax_impl.h +++ b/paddle/operators/math/softmax_impl.h @@ -32,10 +32,10 @@ struct ValueClip { } }; -template -void SoftmaxFunctor::operator()( - const platform::DeviceContext& context, const framework::Tensor* X, - framework::Tensor* Y) { +template +void SoftmaxFunctor::operator()(const DeviceContext& context, + const framework::Tensor* X, + framework::Tensor* Y) { auto logits = EigenMatrix::From(*X); auto softmax = EigenMatrix::From(*Y); @@ -56,19 +56,18 @@ void SoftmaxFunctor::operator()( .broadcast(one_by_class)) .unaryExpr(ValueClip()); - softmax.device(*context.GetEigenDevice()) = shifted_logits.exp(); - softmax.device(*context.GetEigenDevice()) = - (softmax * - softmax.sum(along_class) - .inverse() - .eval() - .reshape(batch_by_one) - .broadcast(one_by_class)); + softmax.device(*context.eigen_device()) = shifted_logits.exp(); + softmax.device(*context.eigen_device()) = (softmax * + softmax.sum(along_class) + .inverse() + .eval() + .reshape(batch_by_one) + .broadcast(one_by_class)); } -template -void SoftmaxGradFunctor::operator()( - const platform::DeviceContext& context, const framework::Tensor* y, +template +void SoftmaxGradFunctor::operator()( + const DeviceContext& context, const framework::Tensor* y, const framework::Tensor* y_grad, framework::Tensor* x_grad) { auto softmax = EigenMatrix::From(*y); auto softmax_grad = EigenMatrix::From(*y_grad); @@ -89,8 +88,7 @@ void SoftmaxGradFunctor::operator()( .eval() .reshape(batch_by_one) .broadcast(one_by_class); - logits_grad.device(*context.GetEigenDevice()) = - (softmax_grad - dot) * softmax; + logits_grad.device(*context.eigen_device()) = (softmax_grad - dot) * softmax; } } // namespace math diff --git a/paddle/operators/math/unpooling.cc b/paddle/operators/math/unpooling.cc index b57d3dc141..ecd3a647e0 100644 --- a/paddle/operators/math/unpooling.cc +++ b/paddle/operators/math/unpooling.cc @@ -17,9 +17,9 @@ namespace paddle { namespace operators { namespace math { template -class Unpool2dMaxFunctor { +class Unpool2dMaxFunctor { public: - void operator()(const platform::DeviceContext& context, + void operator()(const platform::CPUDeviceContext& context, const framework::Tensor& input, const framework::Tensor& indices, framework::Tensor* output) { const int batch_size = input.dims()[0]; @@ -48,9 +48,9 @@ class Unpool2dMaxFunctor { } }; template -class Unpool2dMaxGradFunctor { +class Unpool2dMaxGradFunctor { public: - void operator()(const platform::DeviceContext& context, + void operator()(const platform::CPUDeviceContext& context, const framework::Tensor& input, const framework::Tensor& indices, const framework::Tensor& output, @@ -82,10 +82,10 @@ class Unpool2dMaxGradFunctor { } } }; -template class Unpool2dMaxGradFunctor; -template class Unpool2dMaxGradFunctor; -template class Unpool2dMaxFunctor; -template class Unpool2dMaxFunctor; +template class Unpool2dMaxGradFunctor; +template class Unpool2dMaxGradFunctor; +template class Unpool2dMaxFunctor; +template class Unpool2dMaxFunctor; } // namespace math } // namespace operators } // namespace paddle diff --git a/paddle/operators/math/unpooling.cu b/paddle/operators/math/unpooling.cu index 37c3c8b689..ecbde0f6a7 100644 --- a/paddle/operators/math/unpooling.cu +++ b/paddle/operators/math/unpooling.cu @@ -67,9 +67,9 @@ __global__ void KernelUnpool2dMaxGrad( * All tensors are in NCHW format. */ template -class Unpool2dMaxFunctor { +class Unpool2dMaxFunctor { public: - void operator()(const platform::DeviceContext& context, + void operator()(const platform::CUDADeviceContext& context, const framework::Tensor& input, const framework::Tensor& indices, framework::Tensor* output) { const int batch_size = input.dims()[0]; @@ -83,21 +83,18 @@ class Unpool2dMaxFunctor { T* output_data = output->mutable_data(context.GetPlace()); int threads = 1024; int grid = (input.numel() + threads - 1) / threads; - KernelUnpool2dMax< - T><<(context) - .stream()>>>(input.numel(), input_data, indices_data, - input_height, input_width, output_channels, - output_data, output_height, output_width); + KernelUnpool2dMax<<>>( + input.numel(), input_data, indices_data, input_height, input_width, + output_channels, output_data, output_height, output_width); } }; /* * All tensors are in NCHW format. */ template -class Unpool2dMaxGradFunctor { +class Unpool2dMaxGradFunctor { public: - void operator()(const platform::DeviceContext& context, + void operator()(const platform::CUDADeviceContext& context, const framework::Tensor& input, const framework::Tensor& indices, const framework::Tensor& output, @@ -116,19 +113,16 @@ class Unpool2dMaxGradFunctor { T* input_grad_data = input_grad->mutable_data(context.GetPlace()); int threads = 1024; int grid = (input.numel() + threads - 1) / threads; - KernelUnpool2dMaxGrad< - T><<(context) - .stream()>>>(input.numel(), input_data, indices_data, - input_height, input_width, output_channels, - output_data, output_grad_data, output_height, - output_width, input_grad_data); + KernelUnpool2dMaxGrad<<>>( + input.numel(), input_data, indices_data, input_height, input_width, + output_channels, output_data, output_grad_data, output_height, + output_width, input_grad_data); } }; -template class Unpool2dMaxGradFunctor; -template class Unpool2dMaxGradFunctor; -template class Unpool2dMaxFunctor; -template class Unpool2dMaxFunctor; +template class Unpool2dMaxGradFunctor; +template class Unpool2dMaxGradFunctor; +template class Unpool2dMaxFunctor; +template class Unpool2dMaxFunctor; } // namespace math } // namespace operators } // namespace paddle diff --git a/paddle/operators/math/unpooling.h b/paddle/operators/math/unpooling.h index 7077d7c227..0f0ff1371e 100644 --- a/paddle/operators/math/unpooling.h +++ b/paddle/operators/math/unpooling.h @@ -18,18 +18,16 @@ limitations under the License. */ namespace paddle { namespace operators { namespace math { -template +template class Unpool2dMaxFunctor { public: - void operator()(const platform::DeviceContext& context, - const framework::Tensor& input, + void operator()(const DeviceContext& context, const framework::Tensor& input, const framework::Tensor& indices, framework::Tensor* output); }; -template +template class Unpool2dMaxGradFunctor { public: - void operator()(const platform::DeviceContext& context, - const framework::Tensor& input, + void operator()(const DeviceContext& context, const framework::Tensor& input, const framework::Tensor& indices, const framework::Tensor& output, const framework::Tensor& output_grad, diff --git a/paddle/operators/math/vol2col.cc b/paddle/operators/math/vol2col.cc index 99eb7fd46d..d574ed9234 100644 --- a/paddle/operators/math/vol2col.cc +++ b/paddle/operators/math/vol2col.cc @@ -25,9 +25,9 @@ namespace math { * output_depth, output_height, output_width] */ template -class Vol2ColFunctor { +class Vol2ColFunctor { public: - void operator()(const platform::DeviceContext& context, + void operator()(const platform::CPUDeviceContext& context, const framework::Tensor& vol, const std::vector& dilations, const std::vector& strides, @@ -111,9 +111,9 @@ class Vol2ColFunctor { * output_depth, output_height, output_width] */ template -class Col2VolFunctor { +class Col2VolFunctor { public: - void operator()(const platform::DeviceContext& context, + void operator()(const platform::CPUDeviceContext& context, const framework::Tensor& col, const std::vector& dilations, const std::vector& strides, @@ -190,10 +190,10 @@ class Col2VolFunctor { } }; -template class Vol2ColFunctor; -template class Vol2ColFunctor; -template class Col2VolFunctor; -template class Col2VolFunctor; +template class Vol2ColFunctor; +template class Vol2ColFunctor; +template class Col2VolFunctor; +template class Col2VolFunctor; } // namespace math } // namespace operators diff --git a/paddle/operators/math/vol2col.cu b/paddle/operators/math/vol2col.cu index dae3be858e..b029442fe4 100644 --- a/paddle/operators/math/vol2col.cu +++ b/paddle/operators/math/vol2col.cu @@ -68,9 +68,9 @@ __global__ void vol2col(int num_kernels, const T* data_vol, int depth, * output_depth, output_height, output_width] */ template -class Vol2ColFunctor { +class Vol2ColFunctor { public: - void operator()(const platform::DeviceContext& context, + void operator()(const platform::CUDADeviceContext& context, const framework::Tensor& vol, const std::vector& dilations, const std::vector& strides, @@ -117,9 +117,7 @@ class Vol2ColFunctor { const int threads = 1024; const int blocks = (num_outputs + 1024 - 1) / 1024; - vol2col<<(context) - .stream()>>>( + vol2col<<>>( num_outputs, vol.data(), input_depth, input_height, input_width, dilations[0], dilations[1], dilations[2], filter_depth, filter_height, filter_width, strides[0], strides[1], strides[2], paddings[0], @@ -196,9 +194,9 @@ __global__ void col2vol(int num_kernels, const T* data_col, int depth, * output_depth, output_height, output_width] */ template -class Col2VolFunctor { +class Col2VolFunctor { public: - void operator()(const platform::DeviceContext& context, + void operator()(const platform::CUDADeviceContext& context, const framework::Tensor& col, const std::vector& dilations, const std::vector& strides, @@ -245,9 +243,7 @@ class Col2VolFunctor { const int threads = 1024; const int blocks = (num_kernels + 1024 - 1) / 1024; - col2vol<<(context) - .stream()>>>( + col2vol<<>>( num_kernels, col.data(), input_depth, input_height, input_width, dilations[0], dilations[1], dilations[2], filter_depth, filter_height, filter_width, strides[0], strides[1], strides[2], paddings[0], @@ -256,10 +252,10 @@ class Col2VolFunctor { } }; -template class Vol2ColFunctor; -template class Vol2ColFunctor; -template class Col2VolFunctor; -template class Col2VolFunctor; +template class Vol2ColFunctor; +template class Vol2ColFunctor; +template class Col2VolFunctor; +template class Col2VolFunctor; } // namespace math } // namespace operators diff --git a/paddle/operators/math/vol2col.h b/paddle/operators/math/vol2col.h index dc64d1d977..dcd80370e8 100644 --- a/paddle/operators/math/vol2col.h +++ b/paddle/operators/math/vol2col.h @@ -63,22 +63,20 @@ namespace math { * \note The caller needs to ensure that volShape.inputChannels is equal to * colShape.inputChannels. */ -template +template class Vol2ColFunctor { public: - void operator()(const platform::DeviceContext& context, - const framework::Tensor& vol, + void operator()(const DeviceContext& context, const framework::Tensor& vol, const std::vector& dilations, const std::vector& strides, const std::vector& paddings, framework::Tensor* col) const; }; -template +template class Col2VolFunctor { public: - void operator()(const platform::DeviceContext& context, - const framework::Tensor& col, + void operator()(const DeviceContext& context, const framework::Tensor& col, const std::vector& dilations, const std::vector& strides, const std::vector& paddings, diff --git a/paddle/operators/math/vol2col_test.cc b/paddle/operators/math/vol2col_test.cc index 62c3152304..f46db3c567 100644 --- a/paddle/operators/math/vol2col_test.cc +++ b/paddle/operators/math/vol2col_test.cc @@ -16,7 +16,7 @@ limitations under the License. */ #include #include -template +template void testVol2col() { paddle::framework::Tensor input; paddle::framework::Tensor input_tmp; @@ -24,18 +24,7 @@ void testVol2col() { paddle::framework::Tensor output_tmp; auto* place = new Place(); - paddle::platform::DeviceContext* context; - if (paddle::platform::is_cpu_place(*place)) { - context = - new paddle::platform::CPUDeviceContext(paddle::platform::CPUPlace()); - } else { -#ifdef PADDLE_WITH_CUDA - context = - new paddle::platform::CUDADeviceContext(paddle::platform::GPUPlace()); -#else - PADDLE_THROW("no GPU support"); -#endif // PADDLE_WITH_CUDA - } + DeviceContext* context = new DeviceContext(*place); /** * input = [[0, 1, 2, @@ -88,7 +77,7 @@ void testVol2col() { output_depth, output_height, output_width}, *place); - paddle::operators::math::Vol2ColFunctor vol2col; + paddle::operators::math::Vol2ColFunctor vol2col; vol2col(*context, input, dilations, strides, paddings, &output); float vol_2_col[] = {0, 1, 1, 2, 3, 4, 4, 5, 6, 7, 7, 8, 9, 10, 10, 11}; @@ -113,7 +102,7 @@ void testVol2col() { CopyFrom(input_tmp, *place, *context, &input); } - paddle::operators::math::Col2VolFunctor col2vol; + paddle::operators::math::Col2VolFunctor col2vol; col2vol(*context, output, dilations, strides, paddings, &input); float* in_ptr; @@ -130,8 +119,9 @@ void testVol2col() { } TEST(math, vol2col) { - testVol2col(); + testVol2col(); #ifdef PADDLE_WITH_CUDA - testVol2col(); + testVol2col(); #endif // PADDLE_WITH_CUDA } diff --git a/paddle/operators/matmul_op.cc b/paddle/operators/matmul_op.cc index 5a1a615420..ee0bc0c370 100644 --- a/paddle/operators/matmul_op.cc +++ b/paddle/operators/matmul_op.cc @@ -206,7 +206,8 @@ class MatMulOpGrad : public framework::OperatorWithKernel { namespace ops = paddle::operators; REGISTER_OP(matmul, ops::MatMulOp, ops::MatMulOpMaker, matmul_grad, ops::MatMulOpGrad); -REGISTER_OP_CPU_KERNEL(matmul, - ops::MatMulKernel); REGISTER_OP_CPU_KERNEL( - matmul_grad, ops::MatMulGradKernel); + matmul, ops::MatMulKernel); +REGISTER_OP_CPU_KERNEL( + matmul_grad, + ops::MatMulGradKernel); diff --git a/paddle/operators/matmul_op.cu.cc b/paddle/operators/matmul_op.cu.cc index b7e66382f0..6a3772c004 100644 --- a/paddle/operators/matmul_op.cu.cc +++ b/paddle/operators/matmul_op.cu.cc @@ -15,7 +15,8 @@ #include "paddle/operators/matmul_op.h" namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL(matmul, - ops::MatMulKernel); -REGISTER_OP_GPU_KERNEL( - matmul_grad, ops::MatMulGradKernel); +REGISTER_OP_CUDA_KERNEL( + matmul, ops::MatMulKernel); +REGISTER_OP_CUDA_KERNEL( + matmul_grad, + ops::MatMulGradKernel); diff --git a/paddle/operators/matmul_op.h b/paddle/operators/matmul_op.h index 1e4aa48b70..de9da487b3 100644 --- a/paddle/operators/matmul_op.h +++ b/paddle/operators/matmul_op.h @@ -27,7 +27,7 @@ using DDim = framework::DDim; using framework::make_ddim; using framework::vectorize; -template +template class MatMulKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { @@ -38,8 +38,9 @@ class MatMulKernel : public framework::OpKernel { bool transpose_x = context.Attr("transpose_X"); bool transpose_y = context.Attr("transpose_Y"); - math::MatMulFunctor()(context.device_context(), x, transpose_x, y, - transpose_y, T(1), out, T(0)); + math::MatMulFunctor()( + context.template device_context(), x, transpose_x, y, + transpose_y, T(1), out, T(0)); } }; @@ -68,17 +69,16 @@ Tensor CombineBatchAndM(const Tensor& input) { // Reshape a rank-3 tensor from P x M x N to M x (P * N). // (Warning: This requires transposing data and writes into new memory.) // Identity op if the tensor is not of rank 3. -template -Tensor CombineBatchAndN(const framework::ExecutionContext& context, - const Tensor& input) { +template +Tensor CombineBatchAndN(const DeviceContext& context, const Tensor& input) { Tensor output; auto in_dims = input.dims(); if (in_dims.size() == 3) { output.Resize({in_dims[1], in_dims[0], in_dims[2]}); output.mutable_data(context.GetPlace()); std::vector axis = {1, 0, 2}; - math::Transpose trans; - trans(context.device_context(), input, &output, axis); + math::Transpose trans; + trans(context, input, &output, axis); std::vector out_dims = {in_dims[1], in_dims[0] * in_dims[2]}; output.Resize({in_dims[1], in_dims[0] * in_dims[2]}); } else { @@ -112,7 +112,7 @@ Tensor CombineBatchAndN(const framework::ExecutionContext& context, // // To handle this sort of scenario, we reshape X : P x M x K, dOut: P x M x N // to X: (P * M) x K, dOut: (P * M) x N. -template +template class MatMulGradKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { @@ -178,24 +178,23 @@ class MatMulGradKernel : public framework::OpKernel { Tensor Y = Reshape(y, make_ddim(y_dims)); Tensor dOut = Reshape(dout, make_ddim(dout_dims)); + auto& dev_ctx = context.template device_context(); if (dx) { dx->mutable_data(context.GetPlace()); const Tensor& dOut_for_dX = (x_dims.size() == 2 && y_dims.size() == 3) - ? CombineBatchAndN(context, dOut) + ? CombineBatchAndN(dev_ctx, dOut) : dOut; if (x_dims.size() == 2 && y_dims.size() == 3) { Y = transpose_y ? CombineBatchAndM(Y) - : CombineBatchAndN(context, Y); + : CombineBatchAndN(dev_ctx, Y); } if (transpose_x) { - math::MatMulFunctor()(context.device_context(), Y, - transpose_y, dOut_for_dX, transpose_x, - T(1), dx, T(0)); + math::MatMulFunctor()( + dev_ctx, Y, transpose_y, dOut_for_dX, transpose_x, T(1), dx, T(0)); } else { - math::MatMulFunctor()(context.device_context(), dOut_for_dX, - transpose_x, Y, !transpose_y, T(1), dx, - T(0)); + math::MatMulFunctor()( + dev_ctx, dOut_for_dX, transpose_x, Y, !transpose_y, T(1), dx, T(0)); } } @@ -205,18 +204,16 @@ class MatMulGradKernel : public framework::OpKernel { ? CombineBatchAndM(dOut) : dOut; if (y_dims.size() == 2 && x_dims.size() == 3) { - X = transpose_x ? CombineBatchAndN(context, X) + X = transpose_x ? CombineBatchAndN(dev_ctx, X) : CombineBatchAndM(X); dOut = CombineBatchAndM(dOut); } if (transpose_y) { - math::MatMulFunctor()(context.device_context(), dOut_for_dY, - transpose_y, X, transpose_x, T(1), dy, - T(0)); + math::MatMulFunctor()( + dev_ctx, dOut_for_dY, transpose_y, X, transpose_x, T(1), dy, T(0)); } else { - math::MatMulFunctor()(context.device_context(), X, - !transpose_x, dOut_for_dY, transpose_y, - T(1), dy, T(0)); + math::MatMulFunctor()( + dev_ctx, X, !transpose_x, dOut_for_dY, transpose_y, T(1), dy, T(0)); } } } diff --git a/paddle/operators/maxout_op.cc b/paddle/operators/maxout_op.cc index 44bf402e95..011616e615 100644 --- a/paddle/operators/maxout_op.cc +++ b/paddle/operators/maxout_op.cc @@ -101,7 +101,8 @@ class MaxOutOpGrad : public framework::OperatorWithKernel { namespace ops = paddle::operators; REGISTER_OP(maxout, ops::MaxOutOp, ops::MaxOutOpMaker, maxout_grad, ops::MaxOutOpGrad); -REGISTER_OP_CPU_KERNEL(maxout, - ops::MaxOutKernel); REGISTER_OP_CPU_KERNEL( - maxout_grad, ops::MaxOutGradKernel); + maxout, ops::MaxOutKernel); +REGISTER_OP_CPU_KERNEL( + maxout_grad, + ops::MaxOutGradKernel); diff --git a/paddle/operators/maxout_op.cu.cc b/paddle/operators/maxout_op.cu.cc index decd43913d..2904f0ff96 100644 --- a/paddle/operators/maxout_op.cu.cc +++ b/paddle/operators/maxout_op.cu.cc @@ -15,9 +15,10 @@ #include "paddle/operators/maxout_op.h" namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL(maxout, - ops::MaxOutKernel, - ops::MaxOutKernel); -REGISTER_OP_GPU_KERNEL( - maxout_grad, ops::MaxOutGradKernel, - ops::MaxOutGradKernel); +REGISTER_OP_CUDA_KERNEL( + maxout, ops::MaxOutKernel, + ops::MaxOutKernel); +REGISTER_OP_CUDA_KERNEL( + maxout_grad, + ops::MaxOutGradKernel, + ops::MaxOutGradKernel); diff --git a/paddle/operators/maxout_op.h b/paddle/operators/maxout_op.h index 44a0d073dd..e8b12552b9 100644 --- a/paddle/operators/maxout_op.h +++ b/paddle/operators/maxout_op.h @@ -23,7 +23,7 @@ namespace operators { using Tensor = framework::Tensor; -template +template class MaxOutKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { @@ -31,12 +31,13 @@ class MaxOutKernel : public framework::OpKernel { Tensor* out = context.Output("Out"); int groups = context.template Attr("groups"); - math::MaxOutFunctor maxout_forward; - maxout_forward(context.device_context(), *in_x, out, groups); + math::MaxOutFunctor maxout_forward; + maxout_forward(context.template device_context(), *in_x, out, + groups); } }; -template +template class MaxOutGradKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { @@ -46,14 +47,13 @@ class MaxOutGradKernel : public framework::OpKernel { context.Input(framework::GradVarName("Out")); Tensor* in_x_grad = context.Output(framework::GradVarName("X")); int groups = context.template Attr("groups"); - auto& device_ctx = context.device_context(); - math::SetConstant zero; + auto& device_ctx = context.template device_context(); + math::SetConstant zero; if (in_x_grad) { in_x_grad->mutable_data(context.GetPlace()); zero(device_ctx, in_x_grad, static_cast(0.0)); - math::MaxOutGradFunctor maxout_backward; - maxout_backward(context.device_context(), *in_x, in_x_grad, *out, - *out_grad, groups); + math::MaxOutGradFunctor maxout_backward; + maxout_backward(device_ctx, *in_x, in_x_grad, *out, *out_grad, groups); } } }; diff --git a/paddle/operators/mean_op.cc b/paddle/operators/mean_op.cc index dcc5b4286f..8932d700c2 100644 --- a/paddle/operators/mean_op.cc +++ b/paddle/operators/mean_op.cc @@ -76,8 +76,9 @@ class MeanGradMaker : public framework::SingleGradOpDescMaker { namespace ops = paddle::operators; REGISTER_OPERATOR(mean, ops::MeanOp, ops::MeanOpMaker, ops::MeanGradMaker); REGISTER_OPERATOR(mean_grad, ops::MeanGradOp); -REGISTER_OP_CPU_KERNEL(mean, ops::MeanKernel, - ops::MeanKernel); -REGISTER_OP_CPU_KERNEL(mean_grad, - ops::MeanGradKernel, - ops::MeanGradKernel); +REGISTER_OP_CPU_KERNEL( + mean, ops::MeanKernel, + ops::MeanKernel); +REGISTER_OP_CPU_KERNEL( + mean_grad, ops::MeanGradKernel, + ops::MeanGradKernel); diff --git a/paddle/operators/mean_op.cu b/paddle/operators/mean_op.cu index ca089938c0..93062bf540 100644 --- a/paddle/operators/mean_op.cu +++ b/paddle/operators/mean_op.cu @@ -17,8 +17,9 @@ #include "paddle/operators/mean_op.h" namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL(mean, ops::MeanKernel, - ops::MeanKernel); -REGISTER_OP_GPU_KERNEL(mean_grad, - ops::MeanGradKernel, - ops::MeanGradKernel); +REGISTER_OP_CUDA_KERNEL( + mean, ops::MeanKernel, + ops::MeanKernel); +REGISTER_OP_CUDA_KERNEL( + mean_grad, ops::MeanGradKernel, + ops::MeanGradKernel); diff --git a/paddle/operators/mean_op.h b/paddle/operators/mean_op.h index c99286a5b9..351b345959 100644 --- a/paddle/operators/mean_op.h +++ b/paddle/operators/mean_op.h @@ -27,7 +27,7 @@ template using EigenVector = framework::EigenVector; -template +template class MeanKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { @@ -38,13 +38,14 @@ class MeanKernel : public framework::OpKernel { auto X = EigenVector::Flatten(*input); auto y = EigenScalar::From(*output); - auto& place = context.GetEigenDevice(); + auto& place = + *context.template device_context().eigen_device(); y.device(place) = X.mean(); } }; -template +template class MeanGradKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { @@ -56,7 +57,8 @@ class MeanGradKernel : public framework::OpKernel { T ig_size = static_cast(IG->numel()); Eigen::DSizes bcast(ig_size); - EigenVector::Flatten(*IG).device(context.GetEigenDevice()) = + EigenVector::Flatten(*IG).device( + *context.template device_context().eigen_device()) = (EigenVector::From(*OG) / ig_size).broadcast(bcast); } }; diff --git a/paddle/operators/minus_op.cc b/paddle/operators/minus_op.cc index 4684c20208..27f0c8de20 100644 --- a/paddle/operators/minus_op.cc +++ b/paddle/operators/minus_op.cc @@ -102,5 +102,5 @@ class MinusGradMaker : public framework::GradOpDescMakerBase { namespace ops = paddle::operators; REGISTER_OPERATOR(minus, ops::MinusOp, ops::MinusOpMaker, ops::MinusGradMaker); -REGISTER_OP_CPU_KERNEL(minus, - ops::MinusKernel); +REGISTER_OP_CPU_KERNEL( + minus, ops::MinusKernel); diff --git a/paddle/operators/minus_op.cu b/paddle/operators/minus_op.cu index a8375cc630..3b202ea92e 100644 --- a/paddle/operators/minus_op.cu +++ b/paddle/operators/minus_op.cu @@ -14,5 +14,6 @@ #include "paddle/operators/minus_op.h" -REGISTER_OP_GPU_KERNEL( - minus, paddle::operators::MinusKernel); +REGISTER_OP_CUDA_KERNEL( + minus, + paddle::operators::MinusKernel); diff --git a/paddle/operators/minus_op.h b/paddle/operators/minus_op.h index bd9a2790aa..78e1e1be6d 100644 --- a/paddle/operators/minus_op.h +++ b/paddle/operators/minus_op.h @@ -19,7 +19,7 @@ namespace paddle { namespace operators { -template +template class MinusKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { @@ -28,7 +28,8 @@ class MinusKernel : public framework::OpKernel { auto* out_tensor = context.Output("Out"); out_tensor->mutable_data(context.GetPlace()); - auto& dev = context.GetEigenDevice(); + auto& dev = + *context.template device_context().eigen_device(); framework::EigenVector::Flatten(*out_tensor).device(dev) = framework::EigenVector::Flatten(*left_tensor) - framework::EigenVector::Flatten(*right_tensor); diff --git a/paddle/operators/modified_huber_loss_op.cc b/paddle/operators/modified_huber_loss_op.cc index 28528848af..f0a42491bf 100644 --- a/paddle/operators/modified_huber_loss_op.cc +++ b/paddle/operators/modified_huber_loss_op.cc @@ -115,6 +115,6 @@ REGISTER_OP(modified_huber_loss, ops::ModifiedHuberLossOp, REGISTER_OP_CPU_KERNEL( modified_huber_loss, - ops::ModifiedHuberLossKernel); + ops::ModifiedHuberLossKernel); REGISTER_OP_CPU_KERNEL(modified_huber_loss_grad, ops::ModifiedHuberLossGradCPUKernel); diff --git a/paddle/operators/modified_huber_loss_op.cu b/paddle/operators/modified_huber_loss_op.cu index 8854e166cd..40a8447da4 100644 --- a/paddle/operators/modified_huber_loss_op.cu +++ b/paddle/operators/modified_huber_loss_op.cu @@ -71,8 +71,8 @@ class ModifiedHuberLossGradGPUKernel : public framework::OpKernel { } // namespace paddle namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL( +REGISTER_OP_CUDA_KERNEL( modified_huber_loss, - ops::ModifiedHuberLossKernel); -REGISTER_OP_GPU_KERNEL(modified_huber_loss_grad, - ops::ModifiedHuberLossGradGPUKernel); + ops::ModifiedHuberLossKernel); +REGISTER_OP_CUDA_KERNEL(modified_huber_loss_grad, + ops::ModifiedHuberLossGradGPUKernel); diff --git a/paddle/operators/modified_huber_loss_op.h b/paddle/operators/modified_huber_loss_op.h index aba75efad9..157ae0682e 100644 --- a/paddle/operators/modified_huber_loss_op.h +++ b/paddle/operators/modified_huber_loss_op.h @@ -46,7 +46,7 @@ struct ModifiedHuberLossForward { } }; -template +template class ModifiedHuberLossKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { @@ -57,7 +57,8 @@ class ModifiedHuberLossKernel : public framework::OpKernel { out0->mutable_data(context.GetPlace()); out1->mutable_data(context.GetPlace()); - auto place = context.GetEigenDevice(); + auto& place = + *context.template device_context().eigen_device(); auto x = EigenVector::Flatten(*in0); auto y = EigenVector::Flatten(*in1); diff --git a/paddle/operators/momentum_op.cu b/paddle/operators/momentum_op.cu index be0c8ea071..00f1253465 100644 --- a/paddle/operators/momentum_op.cu +++ b/paddle/operators/momentum_op.cu @@ -74,5 +74,5 @@ class MomentumOpCUDAKernel : public framework::OpKernel { } // namespace paddle namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL(momentum, ops::MomentumOpCUDAKernel, - ops::MomentumOpCUDAKernel); +REGISTER_OP_CUDA_KERNEL(momentum, ops::MomentumOpCUDAKernel, + ops::MomentumOpCUDAKernel); diff --git a/paddle/operators/mul_op.cc b/paddle/operators/mul_op.cc index 3c39ae10dc..bc4a5fdf0b 100644 --- a/paddle/operators/mul_op.cc +++ b/paddle/operators/mul_op.cc @@ -149,6 +149,7 @@ REGISTER_OPERATOR(mul, paddle::framework::OperatorWithKernel, ops::MulOpMaker, ops::MulOpShapeInference, paddle::framework::DefaultGradOpDescMaker); REGISTER_OPERATOR(mul_grad, ops::MulOpGrad); -REGISTER_OP_CPU_KERNEL(mul, ops::MulKernel); -REGISTER_OP_CPU_KERNEL(mul_grad, - ops::MulGradKernel); +REGISTER_OP_CPU_KERNEL( + mul, ops::MulKernel); +REGISTER_OP_CPU_KERNEL( + mul_grad, ops::MulGradKernel); diff --git a/paddle/operators/mul_op.cu.cc b/paddle/operators/mul_op.cu.cc index 66dc3d6d10..6095de58d0 100644 --- a/paddle/operators/mul_op.cu.cc +++ b/paddle/operators/mul_op.cu.cc @@ -15,6 +15,7 @@ #include "paddle/operators/mul_op.h" namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL(mul, ops::MulKernel); -REGISTER_OP_GPU_KERNEL(mul_grad, - ops::MulGradKernel); +REGISTER_OP_CUDA_KERNEL( + mul, ops::MulKernel); +REGISTER_OP_CUDA_KERNEL( + mul_grad, ops::MulGradKernel); diff --git a/paddle/operators/mul_op.h b/paddle/operators/mul_op.h index 0eb9df41e9..1b467dca83 100644 --- a/paddle/operators/mul_op.h +++ b/paddle/operators/mul_op.h @@ -23,7 +23,7 @@ namespace operators { using Tensor = framework::Tensor; -template +template class MulKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { @@ -46,15 +46,16 @@ class MulKernel : public framework::OpKernel { if (z_dim.size() != 2) { z->Resize({x_matrix.dims()[0], y_matrix.dims()[1]}); } - math::matmul(context.device_context(), x_matrix, false, y_matrix, - false, 1, z, 0); + math::matmul( + context.template device_context(), x_matrix, false, + y_matrix, false, 1, z, 0); if (z_dim.size() != 2) { z->Resize(z_dim); } } }; -template +template class MulGradKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& ctx) const override { @@ -77,6 +78,7 @@ class MulGradKernel : public framework::OpKernel { Tensor* dx = ctx.Output(framework::GradVarName("X")); Tensor* dy = ctx.Output(framework::GradVarName("Y")); + auto& dev_ctx = ctx.template device_context(); if (dx) { dx->mutable_data(ctx.GetPlace()); Tensor dx_matrix = dx->dims().size() > 2 @@ -84,8 +86,8 @@ class MulGradKernel : public framework::OpKernel { : *dx; // dx = dout * y'. dx: M x K, dout : M x N, y : K x N - math::matmul(ctx.device_context(), dout_mat, false, y_matrix, - true, 1, &dx_matrix, 0); + math::matmul(dev_ctx, dout_mat, false, y_matrix, true, + 1, &dx_matrix, 0); } if (dy) { dy->mutable_data(ctx.GetPlace()); @@ -93,8 +95,8 @@ class MulGradKernel : public framework::OpKernel { ? framework::ReshapeToMatrix(*dy, y_num_col_dims) : *dy; // dy = x' * dout. dy K x N, dout : M x N, x : M x K - math::matmul(ctx.device_context(), x_matrix, true, dout_mat, - false, 1, &dy_matrix, 0); + math::matmul(dev_ctx, x_matrix, true, dout_mat, false, + 1, &dy_matrix, 0); } } }; diff --git a/paddle/operators/multiplex_op.cc b/paddle/operators/multiplex_op.cc index 8e7f544e0d..b1ee8051c4 100644 --- a/paddle/operators/multiplex_op.cc +++ b/paddle/operators/multiplex_op.cc @@ -119,7 +119,8 @@ REGISTER_OPERATOR(multiplex, ops::MultiplexOp, ops::MultiplexOpMaker, paddle::framework::DefaultGradOpDescMaker); REGISTER_OPERATOR(multiplex_grad, ops::MultiplexGradOp); REGISTER_OP_CPU_KERNEL( - multiplex, ops::MultiplexCPUKernel); + multiplex, + ops::MultiplexCPUKernel); REGISTER_OP_CPU_KERNEL( multiplex_grad, - ops::MultiplexGradCPUKernel); + ops::MultiplexGradCPUKernel); diff --git a/paddle/operators/multiplex_op.cu b/paddle/operators/multiplex_op.cu index 10dff8d021..47986e9ff8 100644 --- a/paddle/operators/multiplex_op.cu +++ b/paddle/operators/multiplex_op.cu @@ -36,7 +36,7 @@ class MultiplexGPUKernel : public framework::OpKernel { CopyFrom(*ids, platform::CPUPlace(), ctx.device_context(), &index_t_cpu); auto* index = index_t_cpu.data(); auto stream = ctx.cuda_device_context().stream(); - Place place = boost::get(ctx.GetPlace()); + platform::GPUPlace place = boost::get(ctx.GetPlace()); for (auto i = 0; i < rows; i++) { int32_t k = index[i]; PADDLE_ENFORCE_GE(k, 0, "index must be nonnegative."); @@ -60,7 +60,8 @@ class MultiplexGradGPUKernel : public framework::OpKernel { if (d_ins[i]) { d_ins[i]->mutable_data(ctx.GetPlace()); auto t = framework::EigenVector::Flatten(*d_ins[i]); - t.device(ctx.GetEigenDevice()) = t.constant(static_cast(0)); + t.device(*ctx.template device_context().eigen_device()) = + t.constant(static_cast(0)); } } @@ -72,7 +73,7 @@ class MultiplexGradGPUKernel : public framework::OpKernel { auto* index = index_t_cpu.data(); auto stream = ctx.cuda_device_context().stream(); - Place place = boost::get(ctx.GetPlace()); + platform::GPUPlace place = boost::get(ctx.GetPlace()); for (auto i = 0; i < rows; i++) { size_t k = static_cast(index[i]); if (d_ins[k]) { @@ -87,8 +88,9 @@ class MultiplexGradGPUKernel : public framework::OpKernel { namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL( - multiplex, ops::MultiplexGPUKernel); -REGISTER_OP_GPU_KERNEL( +REGISTER_OP_CUDA_KERNEL( + multiplex, + ops::MultiplexGPUKernel); +REGISTER_OP_CUDA_KERNEL( multiplex_grad, - ops::MultiplexGradGPUKernel); + ops::MultiplexGradGPUKernel); diff --git a/paddle/operators/multiplex_op.h b/paddle/operators/multiplex_op.h index ab3cafaa32..3443151161 100644 --- a/paddle/operators/multiplex_op.h +++ b/paddle/operators/multiplex_op.h @@ -22,7 +22,7 @@ namespace paddle { namespace operators { -template +template class MultiplexCPUKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& ctx) const { @@ -35,7 +35,7 @@ class MultiplexCPUKernel : public framework::OpKernel { auto rows = ins[0]->dims()[0]; auto cols = ins[0]->numel() / rows; auto index = ids->data(); - Place place = boost::get(ctx.GetPlace()); + platform::CPUPlace place = boost::get(ctx.GetPlace()); for (auto i = 0; i < rows; i++) { int32_t k = index[i]; PADDLE_ENFORCE_GE(k, 0, "index must be nonnegative."); @@ -47,7 +47,7 @@ class MultiplexCPUKernel : public framework::OpKernel { } }; -template +template class MultiplexGradCPUKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& ctx) const { @@ -60,14 +60,15 @@ class MultiplexGradCPUKernel : public framework::OpKernel { if (d_ins[i]) { d_ins[i]->mutable_data(ctx.GetPlace()); auto t = framework::EigenVector::Flatten(*d_ins[i]); - t.device(ctx.GetEigenDevice()) = t.constant(static_cast(0)); + t.device(*ctx.template device_context().eigen_device()) = + t.constant(static_cast(0)); } } auto rows = ins[0]->dims()[0]; auto cols = ins[0]->numel() / rows; auto* index = ids->data(); - Place place = boost::get(ctx.GetPlace()); + platform::CPUPlace place = boost::get(ctx.GetPlace()); for (auto i = 0; i < rows; i++) { size_t k = static_cast(index[i]); if (d_ins[k]) { diff --git a/paddle/operators/nccl_op.cu.cc b/paddle/operators/nccl_op.cu.cc index 4f0a2a79ed..6ca6db7253 100644 --- a/paddle/operators/nccl_op.cu.cc +++ b/paddle/operators/nccl_op.cu.cc @@ -204,6 +204,6 @@ class NCCLBcastKernel : public framework::OpKernel { } // namespace paddle namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL(ncclAllReduce, ops::NCCLAllReduceKernel); -REGISTER_OP_GPU_KERNEL(ncclBcast, ops::NCCLBcastKernel); -REGISTER_OP_GPU_KERNEL(ncclReduce, ops::NCCLReduceKernel); +REGISTER_OP_CUDA_KERNEL(ncclAllReduce, ops::NCCLAllReduceKernel); +REGISTER_OP_CUDA_KERNEL(ncclBcast, ops::NCCLBcastKernel); +REGISTER_OP_CUDA_KERNEL(ncclReduce, ops::NCCLReduceKernel); diff --git a/paddle/operators/nccl_op_test.cu.cc b/paddle/operators/nccl_op_test.cu.cc index bb7ae20286..d747cc0cf5 100644 --- a/paddle/operators/nccl_op_test.cu.cc +++ b/paddle/operators/nccl_op_test.cu.cc @@ -33,9 +33,9 @@ #include "paddle/platform/place.h" USE_NO_KERNEL_OP(ncclInit); -USE_GPU_ONLY_OP(ncclAllReduce); -USE_GPU_ONLY_OP(ncclReduce); -USE_GPU_ONLY_OP(ncclBcast); +USE_CUDA_ONLY_OP(ncclAllReduce); +USE_CUDA_ONLY_OP(ncclReduce); +USE_CUDA_ONLY_OP(ncclBcast); namespace f = paddle::framework; namespace p = paddle::platform; diff --git a/paddle/operators/nce_op.cc b/paddle/operators/nce_op.cc index 952da10434..5ad1610fde 100644 --- a/paddle/operators/nce_op.cc +++ b/paddle/operators/nce_op.cc @@ -67,7 +67,7 @@ class NCEOp : public framework::OperatorWithKernel { const framework::ExecutionContext& ctx) const override { return framework::OpKernelType( framework::ToDataType(ctx.Input("Input")->type()), - ctx.device_context()); + ctx.GetPlace()); } }; @@ -170,7 +170,7 @@ class NCEOpGrad : public framework::OperatorWithKernel { const framework::ExecutionContext& ctx) const override { return framework::OpKernelType( framework::ToDataType(ctx.Input("Input")->type()), - ctx.device_context()); + ctx.GetPlace()); } }; diff --git a/paddle/operators/nce_op.h b/paddle/operators/nce_op.h index 0a8a95de5f..6636dad060 100644 --- a/paddle/operators/nce_op.h +++ b/paddle/operators/nce_op.h @@ -28,7 +28,7 @@ template using EigenMatrix = framework::EigenMatrix; -template +template void PrepareSamples(const framework::ExecutionContext& context) { auto label = context.Input("Label"); const int64_t* label_data = label->data(); @@ -67,11 +67,11 @@ void PrepareSamples(const framework::ExecutionContext& context) { } } -template +template class NCEKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { - PrepareSamples(context); + PrepareSamples(context); auto sample_labels = context.Output("SampleLabels"); const int64_t* sample_labels_data = sample_labels->data(); auto sample_out = context.Output("SampleLogits"); @@ -135,7 +135,7 @@ class NCEKernel : public framework::OpKernel { } }; -template +template class NCEGradKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { diff --git a/paddle/operators/pad_op.cc b/paddle/operators/pad_op.cc index adb75df6ef..936dde22c3 100644 --- a/paddle/operators/pad_op.cc +++ b/paddle/operators/pad_op.cc @@ -134,6 +134,7 @@ namespace ops = paddle::operators; REGISTER_OPERATOR(pad, ops::PadOp, ops::PadOpMaker, ops::PadOpGradMaker); REGISTER_OPERATOR(pad_grad, ops::PadOpGrad); -REGISTER_OP_CPU_KERNEL(pad, ops::PadKernel); -REGISTER_OP_CPU_KERNEL(pad_grad, - ops::PadGradKernel); +REGISTER_OP_CPU_KERNEL( + pad, ops::PadKernel); +REGISTER_OP_CPU_KERNEL( + pad_grad, ops::PadGradKernel); diff --git a/paddle/operators/pad_op.cu b/paddle/operators/pad_op.cu index 555a7dba23..c309fb625c 100644 --- a/paddle/operators/pad_op.cu +++ b/paddle/operators/pad_op.cu @@ -16,6 +16,7 @@ #include "paddle/operators/pad_op.h" namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL(pad, ops::PadKernel); -REGISTER_OP_GPU_KERNEL(pad_grad, - ops::PadGradKernel); +REGISTER_OP_CUDA_KERNEL( + pad, ops::PadKernel); +REGISTER_OP_CUDA_KERNEL( + pad_grad, ops::PadGradKernel); diff --git a/paddle/operators/pad_op.h b/paddle/operators/pad_op.h index 9534dbf545..1b95942af3 100644 --- a/paddle/operators/pad_op.h +++ b/paddle/operators/pad_op.h @@ -26,7 +26,7 @@ template using EigenTensor = framework::EigenTensor; -template +template void PadFunction(const framework::ExecutionContext& context) { auto pads = context.Attr>("paddings"); Eigen::array, D> paddings; @@ -42,33 +42,34 @@ void PadFunction(const framework::ExecutionContext& context) { auto x_tensor = EigenTensor::From(*x); auto out_tensor = EigenTensor::From(*out); - auto place = context.GetEigenDevice(); + auto& place = + *context.template device_context().eigen_device(); out_tensor.device(place) = x_tensor.pad(paddings, pad_value); } -template +template class PadKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { int rank = context.Input("X")->dims().size(); switch (rank) { case 1: - PadFunction(context); + PadFunction(context); break; case 2: - PadFunction(context); + PadFunction(context); break; case 3: - PadFunction(context); + PadFunction(context); break; case 4: - PadFunction(context); + PadFunction(context); break; case 5: - PadFunction(context); + PadFunction(context); break; case 6: - PadFunction(context); + PadFunction(context); break; default: PADDLE_THROW( @@ -77,7 +78,7 @@ class PadKernel : public framework::OpKernel { } }; -template +template void PadGradFunction(const framework::ExecutionContext& context) { auto pads = context.Attr>("paddings"); Eigen::array, D> paddings; @@ -91,12 +92,13 @@ void PadGradFunction(const framework::ExecutionContext& context) { d_x->mutable_data(context.GetPlace()); auto d_x_tensor = EigenTensor::From(*d_x); auto d_out_tensor = EigenTensor::From(*d_out); - auto place = context.GetEigenDevice(); + auto& place = + *context.template device_context().eigen_device(); d_x_tensor.device(place) = d_out_tensor.pad(paddings, 0); } } -template +template class PadGradKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { @@ -104,22 +106,22 @@ class PadGradKernel : public framework::OpKernel { context.Input(framework::GradVarName("Out"))->dims().size(); switch (rank) { case 1: - PadGradFunction(context); + PadGradFunction(context); break; case 2: - PadGradFunction(context); + PadGradFunction(context); break; case 3: - PadGradFunction(context); + PadGradFunction(context); break; case 4: - PadGradFunction(context); + PadGradFunction(context); break; case 5: - PadGradFunction(context); + PadGradFunction(context); break; case 6: - PadGradFunction(context); + PadGradFunction(context); break; default: PADDLE_THROW( diff --git a/paddle/operators/pool_cudnn_op.cc b/paddle/operators/pool_cudnn_op.cc index be9fcc5661..77407f5cdf 100644 --- a/paddle/operators/pool_cudnn_op.cc +++ b/paddle/operators/pool_cudnn_op.cc @@ -19,19 +19,21 @@ namespace ops = paddle::operators; REGISTER_OP(pool2d_cudnn, ops::PoolOp, ops::Pool2dOpMaker, pool2d_cudnn_grad, ops::PoolOpGrad); -REGISTER_OP_CPU_KERNEL(pool2d_cudnn, - ops::PoolKernel, - ops::PoolKernel); -REGISTER_OP_CPU_KERNEL(pool2d_cudnn_grad, - ops::PoolGradKernel, - ops::PoolGradKernel) +REGISTER_OP_CPU_KERNEL( + pool2d_cudnn, ops::PoolKernel, + ops::PoolKernel); +REGISTER_OP_CPU_KERNEL( + pool2d_cudnn_grad, + ops::PoolGradKernel, + ops::PoolGradKernel) REGISTER_OP(pool3d_cudnn, ops::PoolOp, ops::Pool3dOpMaker, pool3d_cudnn_grad, ops::PoolOpGrad); -REGISTER_OP_CPU_KERNEL(pool3d_cudnn, - ops::PoolKernel, - ops::PoolKernel); -REGISTER_OP_CPU_KERNEL(pool3d_cudnn_grad, - ops::PoolGradKernel, - ops::PoolGradKernel) +REGISTER_OP_CPU_KERNEL( + pool3d_cudnn, ops::PoolKernel, + ops::PoolKernel); +REGISTER_OP_CPU_KERNEL( + pool3d_cudnn_grad, + ops::PoolGradKernel, + ops::PoolGradKernel) diff --git a/paddle/operators/pool_cudnn_op.cu.cc b/paddle/operators/pool_cudnn_op.cu.cc index 66dd194ccd..fc2b37bd0f 100644 --- a/paddle/operators/pool_cudnn_op.cu.cc +++ b/paddle/operators/pool_cudnn_op.cu.cc @@ -162,12 +162,12 @@ class PoolCudnnGradOpKernel : public framework::OpKernel { namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL(pool2d_cudnn, ops::PoolCudnnOpKernel, - ops::PoolCudnnOpKernel); -REGISTER_OP_GPU_KERNEL(pool2d_cudnn_grad, ops::PoolCudnnGradOpKernel, - ops::PoolCudnnGradOpKernel); - -REGISTER_OP_GPU_KERNEL(pool3d_cudnn, ops::PoolCudnnOpKernel, - ops::PoolCudnnOpKernel); -REGISTER_OP_GPU_KERNEL(pool3d_cudnn_grad, ops::PoolCudnnGradOpKernel, - ops::PoolCudnnGradOpKernel); +REGISTER_OP_CUDA_KERNEL(pool2d_cudnn, ops::PoolCudnnOpKernel, + ops::PoolCudnnOpKernel); +REGISTER_OP_CUDA_KERNEL(pool2d_cudnn_grad, ops::PoolCudnnGradOpKernel, + ops::PoolCudnnGradOpKernel); + +REGISTER_OP_CUDA_KERNEL(pool3d_cudnn, ops::PoolCudnnOpKernel, + ops::PoolCudnnOpKernel); +REGISTER_OP_CUDA_KERNEL(pool3d_cudnn_grad, ops::PoolCudnnGradOpKernel, + ops::PoolCudnnGradOpKernel); diff --git a/paddle/operators/pool_op.cc b/paddle/operators/pool_op.cc index e26ffd86e5..45fa20280c 100644 --- a/paddle/operators/pool_op.cc +++ b/paddle/operators/pool_op.cc @@ -216,19 +216,19 @@ namespace ops = paddle::operators; REGISTER_OP(pool2d, ops::PoolOp, ops::Pool2dOpMaker, pool2d_grad, ops::PoolOpGrad); -REGISTER_OP_CPU_KERNEL(pool2d, - ops::PoolKernel, - ops::PoolKernel); -REGISTER_OP_CPU_KERNEL(pool2d_grad, - ops::PoolGradKernel, - ops::PoolGradKernel) +REGISTER_OP_CPU_KERNEL( + pool2d, ops::PoolKernel, + ops::PoolKernel); +REGISTER_OP_CPU_KERNEL( + pool2d_grad, ops::PoolGradKernel, + ops::PoolGradKernel) REGISTER_OP(pool3d, ops::PoolOp, ops::Pool3dOpMaker, pool3d_grad, ops::PoolOpGrad); -REGISTER_OP_CPU_KERNEL(pool3d, - ops::PoolKernel, - ops::PoolKernel); -REGISTER_OP_CPU_KERNEL(pool3d_grad, - ops::PoolGradKernel, - ops::PoolGradKernel); +REGISTER_OP_CPU_KERNEL( + pool3d, ops::PoolKernel, + ops::PoolKernel); +REGISTER_OP_CPU_KERNEL( + pool3d_grad, ops::PoolGradKernel, + ops::PoolGradKernel); diff --git a/paddle/operators/pool_op.cu.cc b/paddle/operators/pool_op.cu.cc index 1010cb7622..39a9dfbf79 100644 --- a/paddle/operators/pool_op.cu.cc +++ b/paddle/operators/pool_op.cu.cc @@ -16,16 +16,18 @@ limitations under the License. */ namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL(pool2d, - ops::PoolKernel, - ops::PoolKernel); -REGISTER_OP_GPU_KERNEL(pool2d_grad, - ops::PoolGradKernel, - ops::PoolGradKernel); +REGISTER_OP_CUDA_KERNEL( + pool2d, ops::PoolKernel, + ops::PoolKernel); +REGISTER_OP_CUDA_KERNEL( + pool2d_grad, + ops::PoolGradKernel, + ops::PoolGradKernel); -REGISTER_OP_GPU_KERNEL(pool3d, - ops::PoolKernel, - ops::PoolKernel); -REGISTER_OP_GPU_KERNEL(pool3d_grad, - ops::PoolGradKernel, - ops::PoolGradKernel); +REGISTER_OP_CUDA_KERNEL( + pool3d, ops::PoolKernel, + ops::PoolKernel); +REGISTER_OP_CUDA_KERNEL( + pool3d_grad, + ops::PoolGradKernel, + ops::PoolGradKernel); diff --git a/paddle/operators/pool_op.h b/paddle/operators/pool_op.h index 63492a89e8..ab85d587a3 100644 --- a/paddle/operators/pool_op.h +++ b/paddle/operators/pool_op.h @@ -50,7 +50,7 @@ class Pool3dOpMaker : public framework::OpProtoAndCheckerMaker { framework::OpAttrChecker* op_checker); }; -template +template class PoolKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { @@ -67,41 +67,41 @@ class PoolKernel : public framework::OpKernel { ksize[i] = static_cast(in_x->dims()[i + 2]); } } - + auto& dev_ctx = context.template device_context(); switch (ksize.size()) { case 2: { if (pooling_type == "max") { paddle::operators::math::Pool2dFunctor< - Place, paddle::operators::math::MaxPool, T> + DeviceContext, paddle::operators::math::MaxPool, T> pool2d_forward; paddle::operators::math::MaxPool pool_process; - pool2d_forward(context.device_context(), *in_x, ksize, strides, - paddings, pool_process, out); + pool2d_forward(dev_ctx, *in_x, ksize, strides, paddings, pool_process, + out); } else if (pooling_type == "avg") { paddle::operators::math::Pool2dFunctor< - Place, paddle::operators::math::AvgPool, T> + DeviceContext, paddle::operators::math::AvgPool, T> pool2d_forward; paddle::operators::math::AvgPool pool_process; - pool2d_forward(context.device_context(), *in_x, ksize, strides, - paddings, pool_process, out); + pool2d_forward(dev_ctx, *in_x, ksize, strides, paddings, pool_process, + out); } } break; case 3: { if (pooling_type == "max") { paddle::operators::math::Pool3dFunctor< - Place, paddle::operators::math::MaxPool, T> + DeviceContext, paddle::operators::math::MaxPool, T> pool3d_forward; paddle::operators::math::MaxPool pool_process; - pool3d_forward(context.device_context(), *in_x, ksize, strides, - paddings, pool_process, out); + pool3d_forward(dev_ctx, *in_x, ksize, strides, paddings, pool_process, + out); } else if (pooling_type == "avg") { paddle::operators::math::Pool3dFunctor< - Place, paddle::operators::math::AvgPool, T> + DeviceContext, paddle::operators::math::AvgPool, T> pool3d_forward; paddle::operators::math::AvgPool pool_process; - pool3d_forward(context.device_context(), *in_x, ksize, strides, - paddings, pool_process, out); + pool3d_forward(dev_ctx, *in_x, ksize, strides, paddings, pool_process, + out); } } break; default: { PADDLE_THROW("Pool op only supports 2D and 3D input."); } @@ -109,7 +109,7 @@ class PoolKernel : public framework::OpKernel { } }; -template +template class PoolGradKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { @@ -130,42 +130,43 @@ class PoolGradKernel : public framework::OpKernel { ksize[i] = static_cast(in_x->dims()[i + 2]); } } - + auto& dev_ctx = context.template device_context(); if (in_x_grad) { in_x_grad->mutable_data(context.GetPlace()); auto temp = framework::EigenVector::Flatten(*in_x_grad); - temp.device(context.GetEigenDevice()) = + temp.device( + *context.template device_context().eigen_device()) = temp.constant(static_cast(0)); switch (ksize.size()) { case 2: { if (pooling_type == "max") { - paddle::operators::math::MaxPool2dGradFunctor + paddle::operators::math::MaxPool2dGradFunctor pool2d_backward; - pool2d_backward(context.device_context(), *in_x, *out, *out_grad, - ksize, strides, paddings, in_x_grad); + pool2d_backward(dev_ctx, *in_x, *out, *out_grad, ksize, strides, + paddings, in_x_grad); } else if (pooling_type == "avg") { paddle::operators::math::Pool2dGradFunctor< - Place, paddle::operators::math::AvgPoolGrad, T> + DeviceContext, paddle::operators::math::AvgPoolGrad, T> pool2d_backward; paddle::operators::math::AvgPoolGrad pool_process; - pool2d_backward(context.device_context(), *in_x, *out, *out_grad, - ksize, strides, paddings, pool_process, in_x_grad); + pool2d_backward(dev_ctx, *in_x, *out, *out_grad, ksize, strides, + paddings, pool_process, in_x_grad); } } break; case 3: { if (pooling_type == "max") { - paddle::operators::math::MaxPool3dGradFunctor + paddle::operators::math::MaxPool3dGradFunctor pool3d_backward; - pool3d_backward(context.device_context(), *in_x, *out, *out_grad, - ksize, strides, paddings, in_x_grad); + pool3d_backward(dev_ctx, *in_x, *out, *out_grad, ksize, strides, + paddings, in_x_grad); } else if (pooling_type == "avg") { paddle::operators::math::Pool3dGradFunctor< - Place, paddle::operators::math::AvgPoolGrad, T> + DeviceContext, paddle::operators::math::AvgPoolGrad, T> pool3d_backward; paddle::operators::math::AvgPoolGrad pool_process; - pool3d_backward(context.device_context(), *in_x, *out, *out_grad, - ksize, strides, paddings, pool_process, in_x_grad); + pool3d_backward(dev_ctx, *in_x, *out, *out_grad, ksize, strides, + paddings, pool_process, in_x_grad); } } break; default: { PADDLE_THROW("Pool op only supports 2D and 3D input."); } diff --git a/paddle/operators/pool_with_index_op.cc b/paddle/operators/pool_with_index_op.cc index b9c42a6912..1a2383f8b8 100644 --- a/paddle/operators/pool_with_index_op.cc +++ b/paddle/operators/pool_with_index_op.cc @@ -266,12 +266,15 @@ REGISTER_OP(max_pool2d_with_index, ops::MaxPoolWithIndexOp, REGISTER_OP_CPU_KERNEL( max_pool2d_with_index, - ops::MaxPoolWithIndexKernel, - ops::MaxPoolWithIndexKernel); + ops::MaxPoolWithIndexKernel, + ops::MaxPoolWithIndexKernel); REGISTER_OP_CPU_KERNEL( max_pool2d_with_index_grad, - ops::MaxPoolWithIndexGradKernel, - ops::MaxPoolWithIndexGradKernel) + ops::MaxPoolWithIndexGradKernel, + ops::MaxPoolWithIndexGradKernel) REGISTER_OP(max_pool3d_with_index, ops::MaxPoolWithIndexOp, ops::MaxPool3dWithIndexOpMaker, max_pool3d_with_index_grad, @@ -279,9 +282,12 @@ REGISTER_OP(max_pool3d_with_index, ops::MaxPoolWithIndexOp, REGISTER_OP_CPU_KERNEL( max_pool3d_with_index, - ops::MaxPoolWithIndexKernel, - ops::MaxPoolWithIndexKernel); + ops::MaxPoolWithIndexKernel, + ops::MaxPoolWithIndexKernel); REGISTER_OP_CPU_KERNEL( max_pool3d_with_index_grad, - ops::MaxPoolWithIndexGradKernel, - ops::MaxPoolWithIndexGradKernel) + ops::MaxPoolWithIndexGradKernel, + ops::MaxPoolWithIndexGradKernel) diff --git a/paddle/operators/pool_with_index_op.cu.cc b/paddle/operators/pool_with_index_op.cu.cc index 335064a7ee..4c9804da63 100644 --- a/paddle/operators/pool_with_index_op.cu.cc +++ b/paddle/operators/pool_with_index_op.cu.cc @@ -16,20 +16,28 @@ limitations under the License. */ namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL( +REGISTER_OP_CUDA_KERNEL( max_pool2d_with_index, - ops::MaxPoolWithIndexKernel, - ops::MaxPoolWithIndexKernel); -REGISTER_OP_GPU_KERNEL( + ops::MaxPoolWithIndexKernel, + ops::MaxPoolWithIndexKernel); +REGISTER_OP_CUDA_KERNEL( max_pool2d_with_index_grad, - ops::MaxPoolWithIndexGradKernel, - ops::MaxPoolWithIndexGradKernel) + ops::MaxPoolWithIndexGradKernel, + ops::MaxPoolWithIndexGradKernel) -REGISTER_OP_GPU_KERNEL( +REGISTER_OP_CUDA_KERNEL( max_pool3d_with_index, - ops::MaxPoolWithIndexKernel, - ops::MaxPoolWithIndexKernel); -REGISTER_OP_GPU_KERNEL( + ops::MaxPoolWithIndexKernel, + ops::MaxPoolWithIndexKernel); +REGISTER_OP_CUDA_KERNEL( max_pool3d_with_index_grad, - ops::MaxPoolWithIndexGradKernel, - ops::MaxPoolWithIndexGradKernel) + ops::MaxPoolWithIndexGradKernel, + ops::MaxPoolWithIndexGradKernel) diff --git a/paddle/operators/pool_with_index_op.h b/paddle/operators/pool_with_index_op.h index 40766c7e82..4f4087d1dd 100644 --- a/paddle/operators/pool_with_index_op.h +++ b/paddle/operators/pool_with_index_op.h @@ -24,7 +24,7 @@ namespace operators { using Tensor = framework::Tensor; -template +template class MaxPoolWithIndexKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { @@ -35,6 +35,8 @@ class MaxPoolWithIndexKernel : public framework::OpKernel { std::vector ksize = context.Attr>("ksize"); std::vector strides = context.Attr>("strides"); std::vector paddings = context.Attr>("paddings"); + + auto& dev_ctx = context.template device_context(); if (context.Attr("global_pooling")) { for (size_t i = 0; i < ksize.size(); ++i) { paddings[i] = 0; @@ -44,23 +46,23 @@ class MaxPoolWithIndexKernel : public framework::OpKernel { switch (ksize.size()) { case 2: { - paddle::operators::math::MaxPool2dWithIndexFunctor + paddle::operators::math::MaxPool2dWithIndexFunctor pool2d_forward; - pool2d_forward(context.device_context(), *in_x, ksize, strides, - paddings, out, mask); + pool2d_forward(dev_ctx, *in_x, ksize, strides, paddings, out, mask); } break; case 3: { - paddle::operators::math::MaxPool3dWithIndexFunctor + paddle::operators::math::MaxPool3dWithIndexFunctor pool3d_forward; - pool3d_forward(context.device_context(), *in_x, ksize, strides, - paddings, out, mask); + pool3d_forward(dev_ctx, *in_x, ksize, strides, paddings, out, mask); } break; default: { PADDLE_THROW("Pool op only supports 2D and 3D input."); } } } }; -template +template class MaxPoolWithIndexGradKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { @@ -81,18 +83,20 @@ class MaxPoolWithIndexGradKernel : public framework::OpKernel { if (in_x_grad) { in_x_grad->mutable_data(context.GetPlace()); - auto& device_ctx = context.device_context(); + auto& device_ctx = context.template device_context(); math::set_constant(device_ctx, in_x_grad, 0); switch (ksize.size()) { case 2: { - paddle::operators::math::MaxPool2dWithIndexGradFunctor + paddle::operators::math::MaxPool2dWithIndexGradFunctor pool2d_backward; pool2d_backward(device_ctx, *out_grad, *mask, ksize, strides, paddings, in_x_grad); } break; case 3: { - paddle::operators::math::MaxPool3dWithIndexGradFunctor + paddle::operators::math::MaxPool3dWithIndexGradFunctor pool3d_backward; pool3d_backward(device_ctx, *out_grad, *mask, ksize, strides, paddings, in_x_grad); diff --git a/paddle/operators/positive_negative_pair_op.h b/paddle/operators/positive_negative_pair_op.h index 2efd3777e0..977e59b7d2 100644 --- a/paddle/operators/positive_negative_pair_op.h +++ b/paddle/operators/positive_negative_pair_op.h @@ -22,7 +22,7 @@ namespace operators { using Tensor = framework::Tensor; using LoDTensor = framework::LoDTensor; -template +template class PositiveNegativePairKernel : public framework::OpKernel { public: struct PredictionResult { diff --git a/paddle/operators/precision_recall_op.h b/paddle/operators/precision_recall_op.h index 4a871ce674..c0d55405a3 100644 --- a/paddle/operators/precision_recall_op.h +++ b/paddle/operators/precision_recall_op.h @@ -26,7 +26,7 @@ using EigenMatrix = framework::EigenMatrix; enum StateVariable { TP = 0, FP, TN, FN }; -template +template class PrecisionRecallKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& ctx) const override { diff --git a/paddle/operators/prelu_op.cc b/paddle/operators/prelu_op.cc index 055c471b45..317a2a4015 100644 --- a/paddle/operators/prelu_op.cc +++ b/paddle/operators/prelu_op.cc @@ -85,7 +85,8 @@ namespace ops = paddle::operators; REGISTER_OP(prelu, ops::PReluOp, ops::PReluOpMaker, prelu_grad, ops::PReluGradOp); -REGISTER_OP_CPU_KERNEL(prelu, - ops::PReluKernel); -REGISTER_OP_CPU_KERNEL(prelu_grad, - ops::PReluGradKernel); +REGISTER_OP_CPU_KERNEL( + prelu, ops::PReluKernel); +REGISTER_OP_CPU_KERNEL( + prelu_grad, + ops::PReluGradKernel); diff --git a/paddle/operators/prelu_op.cu b/paddle/operators/prelu_op.cu index 9e391dabae..12033dee0e 100644 --- a/paddle/operators/prelu_op.cu +++ b/paddle/operators/prelu_op.cu @@ -14,8 +14,9 @@ #include "paddle/operators/prelu_op.h" -REGISTER_OP_GPU_KERNEL( - prelu, paddle::operators::PReluKernel); -REGISTER_OP_GPU_KERNEL( - prelu_grad, - paddle::operators::PReluGradKernel); +REGISTER_OP_CUDA_KERNEL( + prelu, + paddle::operators::PReluKernel); +REGISTER_OP_CUDA_KERNEL(prelu_grad, + paddle::operators::PReluGradKernel< + paddle::platform::CUDADeviceContext, float>); diff --git a/paddle/operators/prelu_op.h b/paddle/operators/prelu_op.h index 5ad31c2203..56f9a553ec 100644 --- a/paddle/operators/prelu_op.h +++ b/paddle/operators/prelu_op.h @@ -39,7 +39,7 @@ class PReluFunctor { const T* alpha_; }; -template +template class PReluKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { @@ -54,9 +54,9 @@ class PReluKernel : public framework::OpKernel { int numel = x->numel(); - Transform trans; - trans(context.device_context(), x_ptr, x_ptr + numel, o_ptr, - PReluFunctor(alpha_ptr)); + Transform trans; + trans(context.template device_context(), x_ptr, + x_ptr + numel, o_ptr, PReluFunctor(alpha_ptr)); } }; @@ -76,7 +76,7 @@ class PReluGradFunctor { const T* alpha_; }; -template +template class PReluGradKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { @@ -92,9 +92,9 @@ class PReluGradKernel : public framework::OpKernel { const T* out_ptr = out->data(); int numel = dx->numel(); - Transform trans; - trans(context.device_context(), out_ptr, out_ptr + numel, dout_ptr, dx_ptr, - PReluGradFunctor(alpha_ptr)); + Transform trans; + trans(context.template device_context(), out_ptr, + out_ptr + numel, dout_ptr, dx_ptr, PReluGradFunctor(alpha_ptr)); // TODO(Zhuoyuan): add dalpha upgrade when GPU kernels ready } diff --git a/paddle/operators/proximal_adagrad_op.cc b/paddle/operators/proximal_adagrad_op.cc index 36e460103a..cc350f6d26 100644 --- a/paddle/operators/proximal_adagrad_op.cc +++ b/paddle/operators/proximal_adagrad_op.cc @@ -114,4 +114,4 @@ REGISTER_OP_WITHOUT_GRADIENT(proximal_adagrad, ops::ProximalAdagradOp, ops::ProximalAdagradOpMaker); REGISTER_OP_CPU_KERNEL( proximal_adagrad, - ops::ProximalAdagradOpKernel); + ops::ProximalAdagradOpKernel); diff --git a/paddle/operators/proximal_adagrad_op.cu b/paddle/operators/proximal_adagrad_op.cu index d0ae039518..42a178f94b 100644 --- a/paddle/operators/proximal_adagrad_op.cu +++ b/paddle/operators/proximal_adagrad_op.cu @@ -15,6 +15,6 @@ specific language governing permissions and limitations under the License. */ #include "paddle/operators/proximal_adagrad_op.h" namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL( +REGISTER_OP_CUDA_KERNEL( proximal_adagrad, - ops::ProximalAdagradOpKernel); + ops::ProximalAdagradOpKernel); diff --git a/paddle/operators/proximal_adagrad_op.h b/paddle/operators/proximal_adagrad_op.h index 7a1560e8cb..523924d80e 100644 --- a/paddle/operators/proximal_adagrad_op.h +++ b/paddle/operators/proximal_adagrad_op.h @@ -24,7 +24,7 @@ template using EigenVector = framework::EigenVector; -template +template class ProximalAdagradOpKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& ctx) const override { @@ -45,20 +45,20 @@ class ProximalAdagradOpKernel : public framework::OpKernel { auto p_out = EigenVector::Flatten(*param_out); auto m_out = EigenVector::Flatten(*moment_out); - auto place = ctx.GetEigenDevice(); + auto* place = ctx.template device_context().eigen_device(); Eigen::DSizes grad_dsize(grad->numel()); - m_out.device(place) = m + g * g; + m_out.device(*place) = m + g * g; auto prox_param = p - lr.broadcast(grad_dsize) * g / m_out.sqrt(); if (l1 > static_cast(0)) { - p_out.device(place) = + p_out.device(*place) = prox_param.sign() * (((prox_param.abs() - (lr * l1).broadcast(grad_dsize)) .cwiseMax(static_cast(0.0))) / (static_cast(1.0) + (lr * l2).broadcast(grad_dsize))); } else { - p_out.device(place) = + p_out.device(*place) = prox_param / (static_cast(1.0) + (lr * l2).broadcast(grad_dsize)); } } diff --git a/paddle/operators/proximal_gd_op.cc b/paddle/operators/proximal_gd_op.cc index 5693d0ec9e..0b26beb3ac 100644 --- a/paddle/operators/proximal_gd_op.cc +++ b/paddle/operators/proximal_gd_op.cc @@ -94,4 +94,5 @@ namespace ops = paddle::operators; REGISTER_OP_WITHOUT_GRADIENT(proximal_gd, ops::ProximalGDOp, ops::ProximalGDOpMaker); REGISTER_OP_CPU_KERNEL( - proximal_gd, ops::ProximalGDOpKernel); + proximal_gd, + ops::ProximalGDOpKernel); diff --git a/paddle/operators/proximal_gd_op.cu b/paddle/operators/proximal_gd_op.cu index 26f4ebaa0f..b7dd840d19 100644 --- a/paddle/operators/proximal_gd_op.cu +++ b/paddle/operators/proximal_gd_op.cu @@ -15,5 +15,6 @@ specific language governing permissions and limitations under the License. */ #include "paddle/operators/proximal_gd_op.h" namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL( - proximal_gd, ops::ProximalGDOpKernel); +REGISTER_OP_CUDA_KERNEL( + proximal_gd, + ops::ProximalGDOpKernel); diff --git a/paddle/operators/proximal_gd_op.h b/paddle/operators/proximal_gd_op.h index bebda02041..64648b3cca 100644 --- a/paddle/operators/proximal_gd_op.h +++ b/paddle/operators/proximal_gd_op.h @@ -24,7 +24,7 @@ template using EigenVector = framework::EigenVector; -template +template class ProximalGDOpKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& ctx) const override { @@ -42,7 +42,7 @@ class ProximalGDOpKernel : public framework::OpKernel { auto lr = EigenVector::Flatten(*ctx.Input("LearningRate")); auto p_out = EigenVector::Flatten(*param_out); - auto place = ctx.GetEigenDevice(); + auto& place = *ctx.template device_context().eigen_device(); Eigen::DSizes grad_dsize(grad->numel()); diff --git a/paddle/operators/rank_loss_op.cc b/paddle/operators/rank_loss_op.cc index 912f88f455..b80b175792 100644 --- a/paddle/operators/rank_loss_op.cc +++ b/paddle/operators/rank_loss_op.cc @@ -123,7 +123,8 @@ namespace ops = paddle::operators; REGISTER_OP(rank_loss, ops::RankLossOp, ops::RankLossOpMaker, rank_loss_grad, ops::RankLossGradOp); -REGISTER_OP_CPU_KERNEL(rank_loss, - ops::RankLossKernel); REGISTER_OP_CPU_KERNEL( - rank_loss_grad, ops::RankLossGradKernel); + rank_loss, ops::RankLossKernel); +REGISTER_OP_CPU_KERNEL( + rank_loss_grad, + ops::RankLossGradKernel); diff --git a/paddle/operators/rank_loss_op.cu b/paddle/operators/rank_loss_op.cu index 5382e3a629..5aee66443d 100644 --- a/paddle/operators/rank_loss_op.cu +++ b/paddle/operators/rank_loss_op.cu @@ -14,9 +14,9 @@ #include "paddle/operators/rank_loss_op.h" -REGISTER_OP_GPU_KERNEL( - rank_loss, - paddle::operators::RankLossKernel); -REGISTER_OP_GPU_KERNEL( - rank_loss_grad, - paddle::operators::RankLossGradKernel); +REGISTER_OP_CUDA_KERNEL(rank_loss, + paddle::operators::RankLossKernel< + paddle::platform::CUDADeviceContext, float>); +REGISTER_OP_CUDA_KERNEL(rank_loss_grad, + paddle::operators::RankLossGradKernel< + paddle::platform::CUDADeviceContext, float>); diff --git a/paddle/operators/rank_loss_op.h b/paddle/operators/rank_loss_op.h index 703c77a0b2..ea24b61fd9 100644 --- a/paddle/operators/rank_loss_op.h +++ b/paddle/operators/rank_loss_op.h @@ -20,7 +20,7 @@ namespace paddle { namespace operators { -template +template class RankLossKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& ctx) const { @@ -35,13 +35,13 @@ class RankLossKernel : public framework::OpKernel { auto left = framework::EigenVector::Flatten(*left_t); auto right = framework::EigenVector::Flatten(*right_t); - auto& dev = ctx.GetEigenDevice(); + auto& dev = *ctx.template device_context().eigen_device(); out.device(dev) = (1. + (left - right).exp()).log() - label * (left - right); } }; -template +template class RankLossGradKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& ctx) const { @@ -55,7 +55,7 @@ class RankLossGradKernel : public framework::OpKernel { auto* left_t = ctx.Input("Left"); auto* right_t = ctx.Input("Right"); - auto& dev = ctx.GetEigenDevice(); + auto& dev = *ctx.template device_context().eigen_device(); auto d_out = framework::EigenVector::Flatten(*d_out_t); auto label = framework::EigenVector::Flatten(*label_t); auto left = framework::EigenVector::Flatten(*left_t); diff --git a/paddle/operators/reduce_op.cc b/paddle/operators/reduce_op.cc index 2589a54cfc..b754637bf2 100644 --- a/paddle/operators/reduce_op.cc +++ b/paddle/operators/reduce_op.cc @@ -180,12 +180,13 @@ REGISTER_OP(reduce_max, ops::ReduceOp, ops::ReduceMaxOpMaker, reduce_max_grad, REGISTER_OP(reduce_min, ops::ReduceOp, ops::ReduceMinOpMaker, reduce_min_grad, ops::ReduceGradOp); -#define REGISTER_REDUCE_CPU_KERNEL(reduce_type, functor, grad_functor) \ - REGISTER_OP_CPU_KERNEL( \ - reduce_type, \ - ops::ReduceKernel); \ - REGISTER_OP_CPU_KERNEL(reduce_type##_grad, \ - ops::ReduceGradKernel); +#define REGISTER_REDUCE_CPU_KERNEL(reduce_type, functor, grad_functor) \ + REGISTER_OP_CPU_KERNEL(reduce_type, \ + ops::ReduceKernel); \ + REGISTER_OP_CPU_KERNEL( \ + reduce_type##_grad, \ + ops::ReduceGradKernel); FOR_EACH_KERNEL_FUNCTOR(REGISTER_REDUCE_CPU_KERNEL); diff --git a/paddle/operators/reduce_op.cu b/paddle/operators/reduce_op.cu index d306e1a240..a10ace5253 100644 --- a/paddle/operators/reduce_op.cu +++ b/paddle/operators/reduce_op.cu @@ -17,12 +17,13 @@ namespace ops = paddle::operators; -#define REGISTER_REDUCE_GPU_KERNEL(reduce_type, functor, grad_functor) \ - REGISTER_OP_GPU_KERNEL( \ - reduce_type, \ - ops::ReduceKernel); \ - REGISTER_OP_GPU_KERNEL(reduce_type##_grad, \ - ops::ReduceGradKernel); +#define REGISTER_REDUCE_GPU_KERNEL(reduce_type, functor, grad_functor) \ + REGISTER_OP_CUDA_KERNEL( \ + reduce_type, ops::ReduceKernel); \ + REGISTER_OP_CUDA_KERNEL( \ + reduce_type##_grad, \ + ops::ReduceGradKernel); FOR_EACH_KERNEL_FUNCTOR(REGISTER_REDUCE_GPU_KERNEL); diff --git a/paddle/operators/reduce_op.h b/paddle/operators/reduce_op.h index dd6547542d..47ce910f28 100644 --- a/paddle/operators/reduce_op.h +++ b/paddle/operators/reduce_op.h @@ -32,55 +32,55 @@ template ; struct SumFunctor { - template - void operator()(const Place& place, X& x, Y& y, const Dim& dim) { + template + void operator()(const DeviceContext& place, X& x, Y& y, const Dim& dim) { y.device(place) = x.sum(dim); } }; struct SumGradFunctor { - template - void operator()(const Place& place, X& x, Y& y, DX& dx, DY& dy, + template + void operator()(const DeviceContext& place, X& x, Y& y, DX& dx, DY& dy, const Dim& dim, int size) { dx.device(place) = dy.broadcast(dim); } }; struct MeanFunctor { - template - void operator()(const Place& place, X& x, Y& y, const Dim& dim) { + template + void operator()(const DeviceContext& place, X& x, Y& y, const Dim& dim) { y.device(place) = x.mean(dim); } }; struct MeanGradFunctor { - template - void operator()(const Place& place, X& x, Y& y, DX& dx, DY& dy, + template + void operator()(const DeviceContext& place, X& x, Y& y, DX& dx, DY& dy, const Dim& dim, int size) { dx.device(place) = dy.broadcast(dim) / dx.constant(size); } }; struct MaxFunctor { - template - void operator()(const Place& place, X& x, Y& y, const Dim& dim) { + template + void operator()(const DeviceContext& place, X& x, Y& y, const Dim& dim) { y.device(place) = x.maximum(dim); } }; struct MinFunctor { - template - void operator()(const Place& place, X& x, Y& y, const Dim& dim) { + template + void operator()(const DeviceContext& place, X& x, Y& y, const Dim& dim) { y.device(place) = x.minimum(dim); } }; struct MaxOrMinGradFunctor { - template - void operator()(const Place& place, X& x, Y& y, DX& dx, DY& dy, + template + void operator()(const DeviceContext& place, X& x, Y& y, DX& dx, DY& dy, const Dim& dim, int size) { auto equals = x == y.broadcast(dim); auto ones = dx.constant(1); @@ -91,7 +91,7 @@ struct MaxOrMinGradFunctor { } }; -template +template class ReduceKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { @@ -139,7 +139,8 @@ class ReduceKernel : public framework::OpKernel { dims = framework::make_ddim(dims_vector); } - auto& place = context.GetEigenDevice(); + auto& place = + *context.template device_context().eigen_device(); Functor functor; if (D == 1) { @@ -152,7 +153,7 @@ class ReduceKernel : public framework::OpKernel { } }; -template +template class ReduceGradKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { @@ -201,7 +202,8 @@ class ReduceGradKernel : public framework::OpKernel { Eigen::array broadcast_dim; for (size_t i = 0; i < D; ++i) broadcast_dim[i] = 1; broadcast_dim[dim] = input0->dims()[dim]; - auto& place = context.GetEigenDevice(); + auto& place = + *context.template device_context().eigen_device(); Functor functor; functor(place, x, x_reduce, x_grad, x_reduce_grad, broadcast_dim, broadcast_dim[dim]); diff --git a/paddle/operators/reshape_op.cu b/paddle/operators/reshape_op.cu index dca6c15007..b7329238c0 100644 --- a/paddle/operators/reshape_op.cu +++ b/paddle/operators/reshape_op.cu @@ -14,9 +14,9 @@ #include "paddle/operators/reshape_op.h" -REGISTER_OP_GPU_KERNEL( +REGISTER_OP_CUDA_KERNEL( reshape, paddle::operators::ReshapeKernel); -REGISTER_OP_GPU_KERNEL( +REGISTER_OP_CUDA_KERNEL( reshape_grad, paddle::operators::ReshapeGradKernel); diff --git a/paddle/operators/reshape_op.h b/paddle/operators/reshape_op.h index 73fd1da642..92d8cbbb56 100644 --- a/paddle/operators/reshape_op.h +++ b/paddle/operators/reshape_op.h @@ -20,7 +20,7 @@ namespace paddle { namespace operators { -template +template class ReshapeKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& ctx) const { @@ -33,7 +33,7 @@ class ReshapeKernel : public framework::OpKernel { } }; -template +template class ReshapeGradKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& ctx) const { diff --git a/paddle/operators/rmsprop_op.cc b/paddle/operators/rmsprop_op.cc index a9c45f639c..fc3f9b8988 100644 --- a/paddle/operators/rmsprop_op.cc +++ b/paddle/operators/rmsprop_op.cc @@ -116,5 +116,5 @@ http://www.cs.toronto.edu/~tijmen/csc321/slides/lecture_slides_lec6.pdf) namespace ops = paddle::operators; REGISTER_OP_WITHOUT_GRADIENT(rmsprop, ops::RmspropOp, ops::RmspropOpMaker); -REGISTER_OP_CPU_KERNEL(rmsprop, - ops::RmspropOpKernel); +REGISTER_OP_CPU_KERNEL( + rmsprop, ops::RmspropOpKernel); diff --git a/paddle/operators/rmsprop_op.cu b/paddle/operators/rmsprop_op.cu index 52634a5481..2a9fd6e104 100644 --- a/paddle/operators/rmsprop_op.cu +++ b/paddle/operators/rmsprop_op.cu @@ -16,5 +16,5 @@ #include "paddle/operators/rmsprop_op.h" namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL(rmsprop, - ops::RmspropOpKernel); +REGISTER_OP_CUDA_KERNEL( + rmsprop, ops::RmspropOpKernel); diff --git a/paddle/operators/rmsprop_op.h b/paddle/operators/rmsprop_op.h index 7bf2129010..16a561835d 100644 --- a/paddle/operators/rmsprop_op.h +++ b/paddle/operators/rmsprop_op.h @@ -24,7 +24,7 @@ template using EigenVector = framework::EigenVector; -template +template class RmspropOpKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& ctx) const override { @@ -51,7 +51,7 @@ class RmspropOpKernel : public framework::OpKernel { auto p_out = EigenVector::Flatten(*param_out); auto mom_out = EigenVector::Flatten(*moment_out); auto ms_out = EigenVector::Flatten(*mean_square_out); - auto place = ctx.GetEigenDevice(); + auto& place = *ctx.template device_context().eigen_device(); Eigen::DSizes grad_dsize(grad->numel()); diff --git a/paddle/operators/roi_pool_op.cc b/paddle/operators/roi_pool_op.cc index 2b5e66c96b..75fcea8401 100644 --- a/paddle/operators/roi_pool_op.cc +++ b/paddle/operators/roi_pool_op.cc @@ -157,9 +157,10 @@ namespace ops = paddle::operators; REGISTER_OP(roi_pool, ops::ROIPoolOp, ops::ROIPoolOpMaker, roi_pool_grad, ops::ROIPoolGradOp); REGISTER_OP_CPU_KERNEL( - roi_pool, ops::CPUROIPoolOpKernel, - ops::CPUROIPoolOpKernel); + roi_pool, + ops::CPUROIPoolOpKernel, + ops::CPUROIPoolOpKernel); REGISTER_OP_CPU_KERNEL( roi_pool_grad, - ops::CPUROIPoolGradOpKernel, - ops::CPUROIPoolOpKernel); + ops::CPUROIPoolGradOpKernel, + ops::CPUROIPoolOpKernel); diff --git a/paddle/operators/roi_pool_op.cu b/paddle/operators/roi_pool_op.cu index 9a4c8ca752..a874befe4d 100644 --- a/paddle/operators/roi_pool_op.cu +++ b/paddle/operators/roi_pool_op.cu @@ -177,7 +177,7 @@ class GPUROIPoolGradOpKernel : public framework::OpKernel { if (x_grad) { x_grad->mutable_data(ctx.GetPlace()); math::SetConstant set_zero; - set_zero(ctx.device_context(), x_grad, static_cast(0)); + set_zero(ctx.cuda_device_context(), x_grad, static_cast(0)); int output_grad_size = out_grad->numel(); int blocks = NumBlocks(output_grad_size); @@ -199,10 +199,11 @@ class GPUROIPoolGradOpKernel : public framework::OpKernel { } // namespace paddle namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL( - roi_pool, ops::GPUROIPoolOpKernel, - ops::GPUROIPoolOpKernel); -REGISTER_OP_GPU_KERNEL( +REGISTER_OP_CUDA_KERNEL( + roi_pool, + ops::GPUROIPoolOpKernel, + ops::GPUROIPoolOpKernel); +REGISTER_OP_CUDA_KERNEL( roi_pool_grad, - ops::GPUROIPoolGradOpKernel, - ops::GPUROIPoolOpKernel); + ops::GPUROIPoolGradOpKernel, + ops::GPUROIPoolOpKernel); diff --git a/paddle/operators/roi_pool_op.h b/paddle/operators/roi_pool_op.h index 3812c66c65..09a9d3d870 100644 --- a/paddle/operators/roi_pool_op.h +++ b/paddle/operators/roi_pool_op.h @@ -19,7 +19,7 @@ limitations under the License. */ namespace paddle { namespace operators { -template +template class CPUROIPoolOpKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& ctx) const override { @@ -126,7 +126,7 @@ class CPUROIPoolOpKernel : public framework::OpKernel { } }; -template +template class CPUROIPoolGradOpKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& ctx) const override { @@ -145,8 +145,9 @@ class CPUROIPoolGradOpKernel : public framework::OpKernel { const T* out_grad_data = out_grad->data(); const int64_t* argmax_data = argmax->data(); T* in_grad_data = in_grad->mutable_data(ctx.GetPlace()); - math::SetConstant set_zero; - set_zero(ctx.device_context(), in_grad, static_cast(0)); + math::SetConstant set_zero; + set_zero(ctx.template device_context(), in_grad, + static_cast(0)); auto in_stride = framework::stride(in->dims()); auto argmax_stride = framework::stride(argmax->dims()); diff --git a/paddle/operators/row_conv_op.cc b/paddle/operators/row_conv_op.cc index ea0bb99f8d..5203a5079c 100644 --- a/paddle/operators/row_conv_op.cc +++ b/paddle/operators/row_conv_op.cc @@ -124,7 +124,8 @@ $$ }; template -class RowConvKernel : public framework::OpKernel { +class RowConvKernel + : public framework::OpKernel { public: void Compute(const framework::ExecutionContext &context) const override { auto *x = context.Input("X"); @@ -169,7 +170,8 @@ class RowConvKernel : public framework::OpKernel { }; template -class RowConvGradKernel : public framework::OpKernel { +class RowConvGradKernel + : public framework::OpKernel { public: void Compute(const framework::ExecutionContext &context) const override { auto *x = context.Input("X"); @@ -251,7 +253,8 @@ class RowConvGradKernel : public framework::OpKernel { namespace ops = paddle::operators; REGISTER_OP(row_conv, ops::RowConvOp, ops::RowConvOpMaker, row_conv_grad, ops::RowConvGradOp); -REGISTER_OP_CPU_KERNEL(row_conv, - ops::RowConvKernel); REGISTER_OP_CPU_KERNEL( - row_conv_grad, ops::RowConvGradKernel); + row_conv, ops::RowConvKernel); +REGISTER_OP_CPU_KERNEL( + row_conv_grad, + ops::RowConvGradKernel); diff --git a/paddle/operators/row_conv_op.cu b/paddle/operators/row_conv_op.cu index e0d7ebda7e..3fc5eabcf5 100644 --- a/paddle/operators/row_conv_op.cu +++ b/paddle/operators/row_conv_op.cu @@ -292,7 +292,8 @@ __global__ void RowConvGradFilter(const T *in, const T *dout, int num_sequence, } // namespace template -class RowConvKernel : public framework::OpKernel { +class RowConvKernel + : public framework::OpKernel { public: void Compute(const framework::ExecutionContext &context) const override { auto *X = context.Input("X"); @@ -327,7 +328,8 @@ class RowConvKernel : public framework::OpKernel { }; template -class RowConvGradKernel : public framework::OpKernel { +class RowConvGradKernel + : public framework::OpKernel { public: void Compute(const framework::ExecutionContext &context) const override { auto *X = context.Input("X"); @@ -347,7 +349,7 @@ class RowConvGradKernel : public framework::OpKernel { size_t *idx = batch_indices.data(); auto &device_ctx = context.cuda_device_context(); - math::SetConstant zero; + math::SetConstant zero; if (dFilter) { T *dfilter = dFilter->mutable_data(context.GetPlace()); @@ -402,7 +404,8 @@ class RowConvGradKernel : public framework::OpKernel { } // namespace paddle namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL(row_conv, - ops::RowConvKernel); -REGISTER_OP_GPU_KERNEL( - row_conv_grad, ops::RowConvGradKernel); +REGISTER_OP_CUDA_KERNEL( + row_conv, ops::RowConvKernel); +REGISTER_OP_CUDA_KERNEL( + row_conv_grad, + ops::RowConvGradKernel); diff --git a/paddle/operators/row_conv_op.h b/paddle/operators/row_conv_op.h index 525e83908d..80912ad8f7 100644 --- a/paddle/operators/row_conv_op.h +++ b/paddle/operators/row_conv_op.h @@ -18,13 +18,13 @@ namespace paddle { namespace operators { -template +template class RowConvKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext &context) const override; }; -template +template class RowConvGradKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext &context) const override; diff --git a/paddle/operators/scale_op.cc b/paddle/operators/scale_op.cc index e5c10fec4d..d848be823e 100644 --- a/paddle/operators/scale_op.cc +++ b/paddle/operators/scale_op.cc @@ -75,8 +75,8 @@ namespace ops = paddle::operators; REGISTER_OPERATOR(scale, ops::ScaleOp, ops::ScaleOpMaker, ops::ScaleGradMaker); -REGISTER_OP_CPU_KERNEL(scale, - ops::ScaleKernel, - ops::ScaleKernel, - ops::ScaleKernel, - ops::ScaleKernel); +REGISTER_OP_CPU_KERNEL( + scale, ops::ScaleKernel, + ops::ScaleKernel, + ops::ScaleKernel, + ops::ScaleKernel); diff --git a/paddle/operators/scale_op.cu b/paddle/operators/scale_op.cu index 0d70775159..0c7980430f 100644 --- a/paddle/operators/scale_op.cu +++ b/paddle/operators/scale_op.cu @@ -14,8 +14,10 @@ #include "paddle/operators/scale_op.h" -REGISTER_OP_GPU_KERNEL( - scale, paddle::operators::ScaleKernel, - paddle::operators::ScaleKernel, - paddle::operators::ScaleKernel, - paddle::operators::ScaleKernel); +REGISTER_OP_CUDA_KERNEL( + scale, + paddle::operators::ScaleKernel, + paddle::operators::ScaleKernel, + paddle::operators::ScaleKernel, + paddle::operators::ScaleKernel); diff --git a/paddle/operators/scale_op.h b/paddle/operators/scale_op.h index 4931294c9d..02a8c97a83 100644 --- a/paddle/operators/scale_op.h +++ b/paddle/operators/scale_op.h @@ -19,7 +19,7 @@ namespace paddle { namespace operators { -template +template class ScaleKernel : public framework::OpKernel { public: virtual void Compute(const framework::ExecutionContext& context) const { @@ -31,7 +31,8 @@ class ScaleKernel : public framework::OpKernel { auto eigen_out = framework::EigenVector::Flatten(*tensor); auto eigen_in = framework::EigenVector::Flatten(*in); - auto& dev = context.GetEigenDevice(); + auto& dev = + *context.template device_context().eigen_device(); eigen_out.device(dev) = scale * eigen_in; } }; diff --git a/paddle/operators/scatter_op.cu b/paddle/operators/scatter_op.cu index 3b32ae2fb7..6b43a1389f 100644 --- a/paddle/operators/scatter_op.cu +++ b/paddle/operators/scatter_op.cu @@ -59,5 +59,5 @@ class ScatterGradOpCUDAKernel : public framework::OpKernel { } // namespace paddle namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL(scatter, ops::ScatterOpCUDAKernel); -REGISTER_OP_GPU_KERNEL(scatter_grad, ops::ScatterGradOpCUDAKernel); +REGISTER_OP_CUDA_KERNEL(scatter, ops::ScatterOpCUDAKernel); +REGISTER_OP_CUDA_KERNEL(scatter_grad, ops::ScatterGradOpCUDAKernel); diff --git a/paddle/operators/seq_expand_op.cc b/paddle/operators/seq_expand_op.cc index b862056ad4..ede9754697 100644 --- a/paddle/operators/seq_expand_op.cc +++ b/paddle/operators/seq_expand_op.cc @@ -148,8 +148,9 @@ class SeqExpandOpGrad : public framework::OperatorWithKernel { namespace ops = paddle::operators; REGISTER_OP(seq_expand, ops::SeqExpandOp, ops::SeqExpandOpMaker, seq_expand_grad, ops::SeqExpandOpGrad); -REGISTER_OP_CPU_KERNEL(seq_expand, - ops::SeqExpandKernel); +REGISTER_OP_CPU_KERNEL( + seq_expand, + ops::SeqExpandKernel); REGISTER_OP_CPU_KERNEL( seq_expand_grad, - ops::SeqExpandGradKernel); + ops::SeqExpandGradKernel); diff --git a/paddle/operators/seq_expand_op.cu b/paddle/operators/seq_expand_op.cu index f1e4b82a76..8e67ce9ccb 100644 --- a/paddle/operators/seq_expand_op.cu +++ b/paddle/operators/seq_expand_op.cu @@ -16,8 +16,9 @@ #include "paddle/operators/seq_expand_op.h" namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL(seq_expand, - ops::SeqExpandKernel); -REGISTER_OP_GPU_KERNEL( +REGISTER_OP_CUDA_KERNEL( + seq_expand, + ops::SeqExpandKernel); +REGISTER_OP_CUDA_KERNEL( seq_expand_grad, - ops::SeqExpandGradKernel); + ops::SeqExpandGradKernel); diff --git a/paddle/operators/seq_expand_op.h b/paddle/operators/seq_expand_op.h index 4ef0d02cf8..fbee0db454 100644 --- a/paddle/operators/seq_expand_op.h +++ b/paddle/operators/seq_expand_op.h @@ -23,7 +23,7 @@ namespace operators { using LoDTensor = framework::LoDTensor; -template +template class SeqExpandKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { @@ -37,7 +37,8 @@ class SeqExpandKernel : public framework::OpKernel { "The size of last lod level in Input(Y)" "must be equal to dims[0] of Input(X)."); out->set_lod(y->lod()); - auto place = context.GetEigenDevice(); + auto* place = + context.template device_context().eigen_device(); size_t element_len = framework::product(x_dims) / x_dims[0]; T* out_data = out->mutable_data(context.GetPlace()); auto out_starts = out->lod().back(); @@ -50,7 +51,7 @@ class SeqExpandKernel : public framework::OpKernel { Eigen::TensorMap> out_t(out_data, scale, element_len); Eigen::array cast({{scale, 1}}); - out_t.device(place) = x_t.broadcast(cast); + out_t.device(*place) = x_t.broadcast(cast); x_data += element_len; out_data += element_len * scale; } @@ -69,7 +70,7 @@ class SeqExpandKernel : public framework::OpKernel { * Grad(X).lod = Input(X).lod * * */ -template +template class SeqExpandGradKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { @@ -89,8 +90,9 @@ class SeqExpandGradKernel : public framework::OpKernel { d_out_t(d_out_data, static_cast(repeat), element_len); Eigen::TensorMap> d_x_t(d_x_data, static_cast(element_len)); - auto place = context.GetEigenDevice(); - d_x_t.device(place) = d_out_t.sum(Eigen::array({{0}})); + auto place = + context.template device_context().eigen_device(); + d_x_t.device(*place) = d_out_t.sum(Eigen::array({{0}})); d_out_data += (repeat * element_len); d_x_data += element_len; } diff --git a/paddle/operators/sequence_concat_op.cc b/paddle/operators/sequence_concat_op.cc index d1de0b4447..9c7e5456e8 100644 --- a/paddle/operators/sequence_concat_op.cc +++ b/paddle/operators/sequence_concat_op.cc @@ -129,7 +129,7 @@ REGISTER_OP(sequence_concat, ops::SequenceConcatOp, ops::SequenceConcatOpMaker, sequence_concat_grad, ops::SequenceConcatGradOp); REGISTER_OP_CPU_KERNEL( sequence_concat, - ops::SequenceConcatOpKernel); + ops::SequenceConcatOpKernel); REGISTER_OP_CPU_KERNEL( sequence_concat_grad, - ops::SequenceConcatGradOpKernel); + ops::SequenceConcatGradOpKernel); diff --git a/paddle/operators/sequence_concat_op.cu.cc b/paddle/operators/sequence_concat_op.cu.cc index 9ca99c2258..144bdb5af6 100644 --- a/paddle/operators/sequence_concat_op.cu.cc +++ b/paddle/operators/sequence_concat_op.cu.cc @@ -15,9 +15,9 @@ limitations under the License. */ #include "paddle/operators/sequence_concat_op.h" namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL( +REGISTER_OP_CUDA_KERNEL( sequence_concat, - ops::SequenceConcatOpKernel); -REGISTER_OP_GPU_KERNEL( - sequence_concat_grad, - ops::SequenceConcatGradOpKernel); + ops::SequenceConcatOpKernel); +REGISTER_OP_CUDA_KERNEL(sequence_concat_grad, + ops::SequenceConcatGradOpKernel< + paddle::platform::CUDADeviceContext, float>); diff --git a/paddle/operators/sequence_concat_op.h b/paddle/operators/sequence_concat_op.h index 09212070aa..8445224f46 100644 --- a/paddle/operators/sequence_concat_op.h +++ b/paddle/operators/sequence_concat_op.h @@ -59,7 +59,7 @@ LoD ConcatLoD(const std::vector ins, const size_t level) { return out_lod; } -template +template class SequenceConcatOpKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& ctx) const override { @@ -119,7 +119,7 @@ class SequenceConcatOpKernel : public framework::OpKernel { } }; -template +template class SequenceConcatGradOpKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& ctx) const override { diff --git a/paddle/operators/sequence_conv_op.cc b/paddle/operators/sequence_conv_op.cc index c5533732d4..f5c4f1c133 100644 --- a/paddle/operators/sequence_conv_op.cc +++ b/paddle/operators/sequence_conv_op.cc @@ -179,9 +179,10 @@ REGISTER_OP(sequence_conv, ops::SequenceConvOp, ops::SequenceConvOpMaker, sequence_conv_grad, ops::SequenceConvGradOp); REGISTER_OP_CPU_KERNEL( - sequence_conv, ops::SequenceConvKernel, - ops::SequenceConvKernel); + sequence_conv, + ops::SequenceConvKernel, + ops::SequenceConvKernel); REGISTER_OP_CPU_KERNEL( sequence_conv_grad, - ops::SequenceConvGradKernel, - ops::SequenceConvGradKernel); + ops::SequenceConvGradKernel, + ops::SequenceConvGradKernel); diff --git a/paddle/operators/sequence_conv_op.cu.cc b/paddle/operators/sequence_conv_op.cu.cc index c8136dbcb3..eacba79ace 100644 --- a/paddle/operators/sequence_conv_op.cu.cc +++ b/paddle/operators/sequence_conv_op.cu.cc @@ -15,10 +15,11 @@ #include "paddle/operators/sequence_conv_op.h" namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL( - sequence_conv, ops::SequenceConvKernel, - ops::SequenceConvKernel); -REGISTER_OP_GPU_KERNEL( +REGISTER_OP_CUDA_KERNEL( + sequence_conv, + ops::SequenceConvKernel, + ops::SequenceConvKernel); +REGISTER_OP_CUDA_KERNEL( sequence_conv_grad, - ops::SequenceConvGradKernel, - ops::SequenceConvGradKernel); + ops::SequenceConvGradKernel, + ops::SequenceConvGradKernel); diff --git a/paddle/operators/sequence_conv_op.h b/paddle/operators/sequence_conv_op.h index b8fbe2647c..bb584b7bfa 100644 --- a/paddle/operators/sequence_conv_op.h +++ b/paddle/operators/sequence_conv_op.h @@ -23,7 +23,7 @@ namespace operators { using Tensor = framework::Tensor; using LoDTensor = framework::LoDTensor; -template +template class SequenceConvKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { @@ -56,21 +56,23 @@ class SequenceConvKernel : public framework::OpKernel { Tensor col; col.mutable_data(col_shape, context.GetPlace()); // Because if padding_trainable is false, padding data should be zeros. - math::SetConstant set_zero; - set_zero(context.device_context(), &col, static_cast(0)); + math::SetConstant set_zero; + auto& dev_ctx = context.template device_context(); + set_zero(dev_ctx, &col, static_cast(0)); - math::ContextProjectFunctor seq_project_functor; + math::ContextProjectFunctor seq_project_functor; - seq_project_functor(context.device_context(), *in, *padding_data, - padding_trainable, context_start, context_length, - context_stride, up_pad, down_pad, &col); + seq_project_functor(dev_ctx, *in, *padding_data, padding_trainable, + context_start, context_length, context_stride, up_pad, + down_pad, &col); - math::matmul(context.device_context(), col, false, filter, false, - static_cast(1.0), out, static_cast(0.0)); + math::matmul(dev_ctx, col, false, filter, false, + static_cast(1.0), out, + static_cast(0.0)); } }; -template +template class SequenceConvGradKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { @@ -95,7 +97,8 @@ class SequenceConvGradKernel : public framework::OpKernel { int down_pad = std::max(0, context_start + context_length - 1); int sequence_width = static_cast(in->dims()[1]); - math::SetConstant set_zero; + math::SetConstant set_zero; + auto& dev_ctx = context.template device_context(); // use col_shape in the im2col calculation framework::DDim col_shape = {in->dims()[0], sequence_width * context_length}; @@ -104,38 +107,36 @@ class SequenceConvGradKernel : public framework::OpKernel { if (in_g || filter_g || (padding_trainable && padding_data_g)) { col.mutable_data(col_shape, context.GetPlace()); // Because if padding_trainable is false, padding data should be zeros. - set_zero(context.device_context(), &col, static_cast(0)); - math::matmul(context.device_context(), *out_g, false, *filter, - true, T(1.0), &col, T(1.0)); + set_zero(dev_ctx, &col, static_cast(0)); + math::matmul(dev_ctx, *out_g, false, *filter, true, + T(1.0), &col, T(1.0)); } - math::ContextProjectFunctor seq_project_functor; - math::ContextProjectGradFunctor seq_project_grad_functor; + math::ContextProjectFunctor seq_project_functor; + math::ContextProjectGradFunctor seq_project_grad_functor; if (in_g) { in_g->mutable_data(context.GetPlace()); in_g->set_lod(in->lod()); - set_zero(context.device_context(), in_g, static_cast(0)); + set_zero(dev_ctx, in_g, static_cast(0)); - seq_project_grad_functor(context.device_context(), *in_g, - padding_trainable, context_start, context_length, - context_stride, up_pad, down_pad, false, true, - padding_data_g, &col); + seq_project_grad_functor(dev_ctx, *in_g, padding_trainable, context_start, + context_length, context_stride, up_pad, down_pad, + false, true, padding_data_g, &col); } if (padding_trainable && padding_data_g) { padding_data_g->mutable_data(context.GetPlace()); - set_zero(context.device_context(), padding_data_g, static_cast(0)); + set_zero(dev_ctx, padding_data_g, static_cast(0)); LoDTensor* input = const_cast(in); - seq_project_grad_functor(context.device_context(), *input, - padding_trainable, context_start, context_length, - context_stride, up_pad, down_pad, true, false, - padding_data_g, &col); + seq_project_grad_functor( + dev_ctx, *input, padding_trainable, context_start, context_length, + context_stride, up_pad, down_pad, true, false, padding_data_g, &col); } if (filter_g) { filter_g->mutable_data(context.GetPlace()); - set_zero(context.device_context(), filter_g, static_cast(0)); + set_zero(dev_ctx, filter_g, static_cast(0)); Tensor filter_grad = *filter_g; LoDTensor out_grad = *out_g; @@ -145,12 +146,12 @@ class SequenceConvGradKernel : public framework::OpKernel { padding_data = context.Input("PaddingData"); } - seq_project_functor(context.device_context(), *in, *padding_data, - padding_trainable, context_start, context_length, - context_stride, up_pad, down_pad, &col); + seq_project_functor(dev_ctx, *in, *padding_data, padding_trainable, + context_start, context_length, context_stride, up_pad, + down_pad, &col); - math::matmul(context.device_context(), col, true, out_grad, - false, T(1.0), &filter_grad, T(1.0)); + math::matmul(dev_ctx, col, true, out_grad, false, + T(1.0), &filter_grad, T(1.0)); } } }; diff --git a/paddle/operators/sequence_pool_op.cc b/paddle/operators/sequence_pool_op.cc index bfda8649cd..3526e45a1b 100644 --- a/paddle/operators/sequence_pool_op.cc +++ b/paddle/operators/sequence_pool_op.cc @@ -123,7 +123,8 @@ namespace ops = paddle::operators; REGISTER_OP(sequence_pool, ops::SequencePoolOp, ops::SequencePoolOpMaker, sequence_pool_grad, ops::SequencePoolGradOp); REGISTER_OP_CPU_KERNEL( - sequence_pool, ops::SequencePoolKernel); + sequence_pool, + ops::SequencePoolKernel); REGISTER_OP_CPU_KERNEL( sequence_pool_grad, - ops::SequencePoolGradKernel); + ops::SequencePoolGradKernel); diff --git a/paddle/operators/sequence_pool_op.cu b/paddle/operators/sequence_pool_op.cu index 66850772d5..fcd6508435 100644 --- a/paddle/operators/sequence_pool_op.cu +++ b/paddle/operators/sequence_pool_op.cu @@ -17,8 +17,9 @@ #include "paddle/operators/sequence_pool_op.h" namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL( - sequence_pool, ops::SequencePoolKernel); -REGISTER_OP_GPU_KERNEL( +REGISTER_OP_CUDA_KERNEL( + sequence_pool, + ops::SequencePoolKernel); +REGISTER_OP_CUDA_KERNEL( sequence_pool_grad, - ops::SequencePoolGradKernel); + ops::SequencePoolGradKernel); diff --git a/paddle/operators/sequence_pool_op.h b/paddle/operators/sequence_pool_op.h index 7f136d8cf0..7519aa1d72 100644 --- a/paddle/operators/sequence_pool_op.h +++ b/paddle/operators/sequence_pool_op.h @@ -30,7 +30,7 @@ template using EigenMatrix = framework::EigenMatrix; -template +template class SequencePoolKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { @@ -54,17 +54,18 @@ class SequencePoolKernel : public framework::OpKernel { auto lod_level_0 = lod[0]; out->mutable_data(context.GetPlace()); - + auto& dev_ctx = context.template device_context(); if (pooltype == "MAX") { - math::MaxSeqPoolFunctor max_pool; + math::MaxSeqPoolFunctor max_pool; auto* index = context.Output("MaxIndex"); index->Resize({dims}); index->mutable_data(context.GetPlace()); - max_pool(context.device_context(), *in, out, index); + max_pool(dev_ctx, *in, out, index); return; } - auto place = context.GetEigenDevice(); + auto& place = + *context.template device_context().eigen_device(); for (int i = 0; i < static_cast(lod_level_0.size()) - 1; ++i) { Tensor in_t = in->Slice(static_cast(lod_level_0[i]), static_cast(lod_level_0[i + 1])); @@ -91,7 +92,7 @@ class SequencePoolKernel : public framework::OpKernel { } }; -template +template class SequencePoolGradKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { @@ -105,20 +106,23 @@ class SequencePoolGradKernel : public framework::OpKernel { int64_t w = in->numel() / dims[0]; in_g->mutable_data(context.GetPlace()); + auto& dev_ctx = context.template device_context(); if (pooltype == "MAX") { - math::MaxSeqPoolGradFunctor max_pool_grad; + math::MaxSeqPoolGradFunctor max_pool_grad; auto* index = context.Input("MaxIndex"); - max_pool_grad(context.device_context(), *out_g, *index, in_g); + max_pool_grad(dev_ctx, *out_g, *index, in_g); return; } if (pooltype == "LAST" || pooltype == "FIRST") { // set X@Grad be zero at first when pooltype is LAST/FIRST - math::SetConstant functor; - functor(context.device_context(), in_g, 0); + math::SetConstant functor; + functor(dev_ctx, in_g, 0); } - auto place = context.GetEigenDevice(); + auto& place = + *context.template device_context().eigen_device(); + for (int i = 0; i < static_cast(lod.size()) - 1; ++i) { auto in_g_t = in_g->Slice(static_cast(lod[i]), static_cast(lod[i + 1])); diff --git a/paddle/operators/sequence_slice_op.cc b/paddle/operators/sequence_slice_op.cc index 255683a572..481db8f9e5 100644 --- a/paddle/operators/sequence_slice_op.cc +++ b/paddle/operators/sequence_slice_op.cc @@ -125,7 +125,7 @@ REGISTER_OP(sequence_slice, ops::SequenceSliceOp, ops::SequenceSliceOpMaker, sequence_slice_grad, ops::SequenceSliceGradOp); REGISTER_OP_CPU_KERNEL( sequence_slice, - ops::SequenceSliceOpKernel); + ops::SequenceSliceOpKernel); REGISTER_OP_CPU_KERNEL( sequence_slice_grad, - ops::SequenceSliceGradOpKernel); + ops::SequenceSliceGradOpKernel); diff --git a/paddle/operators/sequence_slice_op.cu b/paddle/operators/sequence_slice_op.cu index a9f59dadba..43a21d619f 100755 --- a/paddle/operators/sequence_slice_op.cu +++ b/paddle/operators/sequence_slice_op.cu @@ -15,9 +15,9 @@ limitations under the License. */ #include "paddle/operators/sequence_slice_op.h" namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL( +REGISTER_OP_CUDA_KERNEL( sequence_slice, - ops::SequenceSliceOpKernel); -REGISTER_OP_GPU_KERNEL( + ops::SequenceSliceOpKernel); +REGISTER_OP_CUDA_KERNEL( sequence_slice_grad, - ops::SequenceSliceGradOpKernel); + ops::SequenceSliceGradOpKernel); diff --git a/paddle/operators/sequence_slice_op.h b/paddle/operators/sequence_slice_op.h index 428ef556da..14bcaebbb4 100644 --- a/paddle/operators/sequence_slice_op.h +++ b/paddle/operators/sequence_slice_op.h @@ -39,7 +39,7 @@ inline LoD SequenceSliceLoD(const T& in, const int64_t* offset_data, return out_lod; } -template +template class SequenceSliceOpKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& ctx) const override { @@ -108,7 +108,7 @@ class SequenceSliceOpKernel : public framework::OpKernel { } }; -template +template class SequenceSliceGradOpKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& ctx) const override { @@ -143,8 +143,9 @@ class SequenceSliceGradOpKernel : public framework::OpKernel { if (x_grad) { x_grad->mutable_data(ctx.GetPlace()); x_grad->set_lod(in->lod()); - math::SetConstant set_zero; - set_zero(ctx.device_context(), x_grad, static_cast(0)); + math::SetConstant set_zero; + set_zero(ctx.template device_context(), x_grad, + static_cast(0)); auto out_grad_stride = framework::stride(out_grad->dims()); diff --git a/paddle/operators/sequence_softmax_op.cc b/paddle/operators/sequence_softmax_op.cc index 32c1502566..37d5452e6b 100644 --- a/paddle/operators/sequence_softmax_op.cc +++ b/paddle/operators/sequence_softmax_op.cc @@ -99,7 +99,7 @@ REGISTER_OP(sequence_softmax, ops::SequenceSoftmaxOp, ops::SequenceSoftmaxGradOp); REGISTER_OP_CPU_KERNEL( sequence_softmax, - ops::SequenceSoftmaxKernel); + ops::SequenceSoftmaxKernel); REGISTER_OP_CPU_KERNEL( sequence_softmax_grad, - ops::SequenceSoftmaxGradKernel); + ops::SequenceSoftmaxGradKernel); diff --git a/paddle/operators/sequence_softmax_op.cu.cc b/paddle/operators/sequence_softmax_op.cu.cc index 7023795a3b..5f65b4daf9 100644 --- a/paddle/operators/sequence_softmax_op.cu.cc +++ b/paddle/operators/sequence_softmax_op.cu.cc @@ -15,9 +15,9 @@ limitations under the License. */ #include "paddle/operators/sequence_softmax_op.h" namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL( +REGISTER_OP_CUDA_KERNEL( sequence_softmax, - ops::SequenceSoftmaxKernel) -REGISTER_OP_GPU_KERNEL( + ops::SequenceSoftmaxKernel) +REGISTER_OP_CUDA_KERNEL( sequence_softmax_grad, - ops::SequenceSoftmaxGradKernel); + ops::SequenceSoftmaxGradKernel); diff --git a/paddle/operators/sequence_softmax_op.h b/paddle/operators/sequence_softmax_op.h index 1b68dd0662..e889e88cb3 100644 --- a/paddle/operators/sequence_softmax_op.h +++ b/paddle/operators/sequence_softmax_op.h @@ -23,7 +23,7 @@ namespace operators { using Tensor = framework::Tensor; using LoDTensor = framework::LoDTensor; -template +template class SequenceSoftmaxKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& ctx) const override { @@ -52,12 +52,13 @@ class SequenceSoftmaxKernel : public framework::OpKernel { framework::DDim dims_i = framework::make_ddim({1UL, end_pos - start_pos}); x_i.Resize(dims_i); out_i.Resize(dims_i); - math::SoftmaxFunctor()(ctx.device_context(), &x_i, &out_i); + math::SoftmaxFunctor()( + ctx.template device_context(), &x_i, &out_i); } } }; -template +template class SequenceSoftmaxGradKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& ctx) const override { @@ -83,8 +84,9 @@ class SequenceSoftmaxGradKernel : public framework::OpKernel { out_i.Resize(dims_i); out_grad_i.Resize(dims_i); x_grad_i.Resize(dims_i); - math::SoftmaxGradFunctor()(ctx.device_context(), &out_i, - &out_grad_i, &x_grad_i); + math::SoftmaxGradFunctor()( + ctx.template device_context(), &out_i, &out_grad_i, + &x_grad_i); } } }; diff --git a/paddle/operators/sgd_op.cc b/paddle/operators/sgd_op.cc index 5576d7b8be..121bf60b27 100644 --- a/paddle/operators/sgd_op.cc +++ b/paddle/operators/sgd_op.cc @@ -62,8 +62,8 @@ $$param\_out = param - learning\_rate * grad$$ }; template -struct SparseSGDFunctor { - void operator()(const platform::DeviceContext& context, +struct SparseSGDFunctor { + void operator()(const platform::CPUDeviceContext& context, const framework::SelectedRows& input, const framework::Tensor& learning_rate, framework::Tensor* output) { @@ -90,13 +90,14 @@ struct SparseSGDFunctor { } }; -template struct SparseSGDFunctor; -template struct SparseSGDFunctor; +template struct SparseSGDFunctor; +template struct SparseSGDFunctor; } // namespace operators } // namespace paddle namespace ops = paddle::operators; REGISTER_OP_WITHOUT_GRADIENT(sgd, ops::SGDOp, ops::SGDOpMaker); -REGISTER_OP_CPU_KERNEL(sgd, ops::SGDOpKernel, - ops::SGDOpKernel); +REGISTER_OP_CPU_KERNEL( + sgd, ops::SGDOpKernel, + ops::SGDOpKernel); diff --git a/paddle/operators/sgd_op.cu b/paddle/operators/sgd_op.cu index 7b6c5ec306..a3c0db7e50 100644 --- a/paddle/operators/sgd_op.cu +++ b/paddle/operators/sgd_op.cu @@ -41,8 +41,8 @@ __global__ void SparseSGDFunctorKernel(const T* selected_rows, } // namespace template -struct SparseSGDFunctor { - void operator()(const platform::DeviceContext& context, +struct SparseSGDFunctor { + void operator()(const platform::CUDADeviceContext& context, const framework::SelectedRows& input, const framework::Tensor& learning_rate, framework::Tensor* output) { @@ -62,21 +62,19 @@ struct SparseSGDFunctor { const int block_size = 256; dim3 threads(block_size, 1); dim3 grid(1, in_rows.size()); - SparseSGDFunctorKernel< - T, 256><<(context) - .stream()>>>(in_data, in_rows.data(), - learning_rate.data(), out_data, - in_row_numel); + SparseSGDFunctorKernel<<>>( + in_data, in_rows.data(), learning_rate.data(), out_data, + in_row_numel); } }; -template struct SparseSGDFunctor; -template struct SparseSGDFunctor; +template struct SparseSGDFunctor; +template struct SparseSGDFunctor; } // namespace operators } // namespace paddle namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL(sgd, ops::SGDOpKernel, - ops::SGDOpKernel); +REGISTER_OP_CUDA_KERNEL( + sgd, ops::SGDOpKernel, + ops::SGDOpKernel); diff --git a/paddle/operators/sgd_op.h b/paddle/operators/sgd_op.h index 78b595fc6c..c920025a91 100644 --- a/paddle/operators/sgd_op.h +++ b/paddle/operators/sgd_op.h @@ -20,15 +20,15 @@ limitations under the License. */ namespace paddle { namespace operators { -template +template struct SparseSGDFunctor { - void operator()(const platform::DeviceContext& context, + void operator()(const DeviceContext& context, const framework::SelectedRows& input, const framework::Tensor& learning_rate, framework::Tensor* output); }; -template +template class SGDOpKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& ctx) const override { @@ -46,7 +46,8 @@ class SGDOpKernel : public framework::OpKernel { auto g = framework::EigenVector::Flatten(*grad); auto o = framework::EigenVector::Flatten(*param_out); auto lr = framework::EigenVector::Flatten(*learning_rate); - auto place = ctx.GetEigenDevice(); + auto& place = + *ctx.template device_context().eigen_device(); Eigen::DSizes grad_dsize(grad->numel()); o.device(place) = p - lr.broadcast(grad_dsize) * g; @@ -56,8 +57,9 @@ class SGDOpKernel : public framework::OpKernel { // It's better to find a more elegant solution. PADDLE_ENFORCE_EQ(param, param_out); auto* grad = ctx.Input("Grad"); - SparseSGDFunctor functor; - functor(ctx.device_context(), *grad, *learning_rate, param_out); + SparseSGDFunctor functor; + functor(ctx.template device_context(), *grad, + *learning_rate, param_out); } else { PADDLE_THROW("Unsupported Variable Type of Grad"); } diff --git a/paddle/operators/sigmoid_cross_entropy_with_logits_op.cc b/paddle/operators/sigmoid_cross_entropy_with_logits_op.cc index 782f4c7936..b8a1bf122a 100644 --- a/paddle/operators/sigmoid_cross_entropy_with_logits_op.cc +++ b/paddle/operators/sigmoid_cross_entropy_with_logits_op.cc @@ -142,7 +142,7 @@ REGISTER_OP(sigmoid_cross_entropy_with_logits, ops::SigmoidCrossEntropyWithLogitsGradOp); REGISTER_OP_CPU_KERNEL(sigmoid_cross_entropy_with_logits, ops::SigmoidCrossEntropyWithLogitsKernel< - paddle::platform::CPUPlace, float>); + paddle::platform::CPUDeviceContext, float>); REGISTER_OP_CPU_KERNEL(sigmoid_cross_entropy_with_logits_grad, ops::SigmoidCrossEntropyWithLogitsGradKernel< - paddle::platform::CPUPlace, float>); + paddle::platform::CPUDeviceContext, float>); diff --git a/paddle/operators/sigmoid_cross_entropy_with_logits_op.cu b/paddle/operators/sigmoid_cross_entropy_with_logits_op.cu index 32a39956a1..1b569c93ed 100644 --- a/paddle/operators/sigmoid_cross_entropy_with_logits_op.cu +++ b/paddle/operators/sigmoid_cross_entropy_with_logits_op.cu @@ -16,9 +16,9 @@ #include "paddle/operators/sigmoid_cross_entropy_with_logits_op.h" namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL(sigmoid_cross_entropy_with_logits, - ops::SigmoidCrossEntropyWithLogitsKernel< - paddle::platform::GPUPlace, float>); -REGISTER_OP_GPU_KERNEL(sigmoid_cross_entropy_with_logits_grad, - ops::SigmoidCrossEntropyWithLogitsGradKernel< - paddle::platform::GPUPlace, float>); +REGISTER_OP_CUDA_KERNEL(sigmoid_cross_entropy_with_logits, + ops::SigmoidCrossEntropyWithLogitsKernel< + paddle::platform::CUDADeviceContext, float>); +REGISTER_OP_CUDA_KERNEL(sigmoid_cross_entropy_with_logits_grad, + ops::SigmoidCrossEntropyWithLogitsGradKernel< + paddle::platform::CUDADeviceContext, float>); diff --git a/paddle/operators/sigmoid_cross_entropy_with_logits_op.h b/paddle/operators/sigmoid_cross_entropy_with_logits_op.h index 2a9d9bbc77..8fe7c5ba82 100644 --- a/paddle/operators/sigmoid_cross_entropy_with_logits_op.h +++ b/paddle/operators/sigmoid_cross_entropy_with_logits_op.h @@ -20,7 +20,7 @@ namespace paddle { namespace operators { // Out = max(X, 0) - X * Labels + log(1 + exp(-abs(X))) -template +template class SigmoidCrossEntropyWithLogitsKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext &context) const override { @@ -32,7 +32,7 @@ class SigmoidCrossEntropyWithLogitsKernel : public framework::OpKernel { auto x = framework::EigenVector::Flatten(*X); auto labels = framework::EigenVector::Flatten(*Labels); auto out = framework::EigenVector::Flatten(*Out); - auto place = context.GetEigenDevice(); + auto &place = *context.device_context().eigen_device(); // term1 = max(x, 0) auto term1 = x.cwiseMax(static_cast(0)); @@ -46,7 +46,7 @@ class SigmoidCrossEntropyWithLogitsKernel : public framework::OpKernel { }; // dX = sigmoid(X) - labels -template +template class SigmoidCrossEntropyWithLogitsGradKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext &context) const override { @@ -62,7 +62,8 @@ class SigmoidCrossEntropyWithLogitsGradKernel : public framework::OpKernel { auto labels = framework::EigenVector::Flatten(*Labels); auto dout = framework::EigenVector::Flatten(*dOut); auto dx = framework::EigenVector::Flatten(*dX); - auto place = context.GetEigenDevice(); + auto &place = + *context.template device_context().eigen_device(); auto sigmoid_x = static_cast(1) / (static_cast(1) + (-x).exp()); dx.device(place) = dout * (sigmoid_x - labels); diff --git a/paddle/operators/sign_op.cc b/paddle/operators/sign_op.cc index 08bf2e4e7c..d5a7ccb77e 100644 --- a/paddle/operators/sign_op.cc +++ b/paddle/operators/sign_op.cc @@ -67,5 +67,5 @@ namespace ops = paddle::operators; REGISTER_OPERATOR(sign, ops::SignOp, ops::SignOpMaker, ops::SignGradMaker); -REGISTER_OP_CPU_KERNEL(sign, - ops::SignKernel); +REGISTER_OP_CPU_KERNEL( + sign, ops::SignKernel); diff --git a/paddle/operators/sign_op.cu b/paddle/operators/sign_op.cu index 4d0638cb97..9bc1c65d21 100644 --- a/paddle/operators/sign_op.cu +++ b/paddle/operators/sign_op.cu @@ -14,5 +14,6 @@ #include "paddle/operators/sign_op.h" -REGISTER_OP_GPU_KERNEL( - sign, paddle::operators::SignKernel); +REGISTER_OP_CUDA_KERNEL( + sign, + paddle::operators::SignKernel); diff --git a/paddle/operators/sign_op.h b/paddle/operators/sign_op.h index ab5cd4bac0..2e476ed665 100644 --- a/paddle/operators/sign_op.h +++ b/paddle/operators/sign_op.h @@ -19,7 +19,7 @@ namespace paddle { namespace operators { -template +template class SignKernel : public framework::OpKernel { public: virtual void Compute(const framework::ExecutionContext& context) const { @@ -29,7 +29,8 @@ class SignKernel : public framework::OpKernel { auto eigen_out = framework::EigenVector::Flatten(*out); auto eigen_in = framework::EigenVector::Flatten(*in); - auto& place = context.GetEigenDevice(); + auto& place = + *context.template device_context().eigen_device(); eigen_out.device(place) = eigen_in.sign(); } }; diff --git a/paddle/operators/smooth_l1_loss_op.cc b/paddle/operators/smooth_l1_loss_op.cc index 50543fcc14..56e8d9058f 100644 --- a/paddle/operators/smooth_l1_loss_op.cc +++ b/paddle/operators/smooth_l1_loss_op.cc @@ -138,7 +138,8 @@ REGISTER_OP(smooth_l1_loss, ops::SmoothL1LossOp, ops::SmoothL1LossOpMaker, smooth_l1_loss_grad, ops::SmoothL1LossGradOp); REGISTER_OP_CPU_KERNEL( - smooth_l1_loss, ops::SmoothL1LossKernel); + smooth_l1_loss, + ops::SmoothL1LossKernel); REGISTER_OP_CPU_KERNEL( smooth_l1_loss_grad, - ops::SmoothL1LossGradKernel); + ops::SmoothL1LossGradKernel); diff --git a/paddle/operators/smooth_l1_loss_op.cu b/paddle/operators/smooth_l1_loss_op.cu index 1c3172f438..8e94ebac64 100644 --- a/paddle/operators/smooth_l1_loss_op.cu +++ b/paddle/operators/smooth_l1_loss_op.cu @@ -17,8 +17,9 @@ #include "paddle/operators/smooth_l1_loss_op.h" namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL( - smooth_l1_loss, ops::SmoothL1LossKernel); -REGISTER_OP_GPU_KERNEL( +REGISTER_OP_CUDA_KERNEL( + smooth_l1_loss, + ops::SmoothL1LossKernel); +REGISTER_OP_CUDA_KERNEL( smooth_l1_loss_grad, - ops::SmoothL1LossGradKernel); + ops::SmoothL1LossGradKernel); diff --git a/paddle/operators/smooth_l1_loss_op.h b/paddle/operators/smooth_l1_loss_op.h index 39d0070b6c..1a70c9c63c 100644 --- a/paddle/operators/smooth_l1_loss_op.h +++ b/paddle/operators/smooth_l1_loss_op.h @@ -44,7 +44,7 @@ struct SmoothL1LossForward { T sigma2; }; -template +template class SmoothL1LossKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { @@ -57,7 +57,8 @@ class SmoothL1LossKernel : public framework::OpKernel { out0->mutable_data(context.GetPlace()); out1->mutable_data(context.GetPlace()); - auto place = context.GetEigenDevice(); + auto* place = + context.template device_context().eigen_device(); auto sigma = static_cast(context.Attr("sigma")); T sigma2 = sigma * sigma; @@ -67,12 +68,12 @@ class SmoothL1LossKernel : public framework::OpKernel { auto y = EigenVector::Flatten(*in1); auto diff = EigenVector::Flatten(*out0); - diff.device(place) = x - y; + diff.device(*place) = x - y; // multiply inside weight if (has_weight) { auto inside_weight = EigenVector::Flatten(*in2); // cache diff, reused in bp - diff.device(place) = diff * inside_weight; + diff.device(*place) = diff * inside_weight; } auto in_counts = in0->numel(); @@ -81,12 +82,12 @@ class SmoothL1LossKernel : public framework::OpKernel { context.GetPlace()); auto errors = EigenVector::Flatten(ptensor_errors); // apply smooth l1 forward - errors.device(place) = diff.unaryExpr(SmoothL1LossForward(sigma2)); + errors.device(*place) = diff.unaryExpr(SmoothL1LossForward(sigma2)); // multiply outside weight if (has_weight) { auto outside_weight = EigenVector::Flatten(*in3); - errors.device(place) = errors * outside_weight; + errors.device(*place) = errors * outside_weight; } auto loss = EigenVector::Flatten(*out1); // first dimension of 'X' is the number of samples @@ -94,7 +95,7 @@ class SmoothL1LossKernel : public framework::OpKernel { framework::make_ddim({static_cast(in0->dims()[0]), static_cast(in_counts / in0->dims()[0])}); auto errors_mat_view = EigenMatrix::From(ptensor_errors, mat_dims); - loss.device(place) = errors_mat_view.sum(Eigen::array({{1}})); + loss.device(*place) = errors_mat_view.sum(Eigen::array({{1}})); } }; @@ -114,7 +115,7 @@ struct SmoothL1LossBackward { T sigma2; }; -template +template class SmoothL1LossGradKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { @@ -126,7 +127,8 @@ class SmoothL1LossGradKernel : public framework::OpKernel { T sigma2 = sigma * sigma; bool has_weight = (in0 != nullptr) && (in1 != nullptr); - auto place = context.GetEigenDevice(); + auto* place = + context.template device_context().eigen_device(); auto in_dims = in2->dims(); auto counts = in2->numel(); @@ -139,7 +141,7 @@ class SmoothL1LossGradKernel : public framework::OpKernel { context.GetPlace()); auto diff = EigenVector::Flatten(ptensor_diff); // apply smooth l1 backwoard - diff.device(place) = EigenVector::Flatten(*in2).unaryExpr( + diff.device(*place) = EigenVector::Flatten(*in2).unaryExpr( SmoothL1LossBackward(sigma2)); // compute weights @@ -147,11 +149,11 @@ class SmoothL1LossGradKernel : public framework::OpKernel { ptensor_weights.mutable_data(mat_dims, context.GetPlace()); auto weights = EigenMatrix::From(ptensor_weights); // initialize to 1.0 - weights.device(place) = weights.constant(static_cast(1.0)); + weights.device(*place) = weights.constant(static_cast(1.0)); if (has_weight) { auto inside_weight = EigenMatrix::From(*in0, mat_dims); auto outside_weight = EigenMatrix::From(*in1, mat_dims); - weights.device(place) = inside_weight * outside_weight; + weights.device(*place) = inside_weight * outside_weight; } // compute gradients @@ -167,13 +169,13 @@ class SmoothL1LossGradKernel : public framework::OpKernel { if (out0) { out0->mutable_data(context.GetPlace()); auto x_grad = EigenMatrix::From(*out0, mat_dims); - x_grad.device(place) = gradients; + x_grad.device(*place) = gradients; } if (out1) { out1->mutable_data(context.GetPlace()); auto y_grad = EigenMatrix::From(*out1, mat_dims); - y_grad.device(place) = -1 * gradients; + y_grad.device(*place) = -1 * gradients; } } }; diff --git a/paddle/operators/softmax_op.cc b/paddle/operators/softmax_op.cc index 93e0525bad..0988c83d43 100644 --- a/paddle/operators/softmax_op.cc +++ b/paddle/operators/softmax_op.cc @@ -89,7 +89,8 @@ namespace ops = paddle::operators; REGISTER_OP(softmax, ops::SoftmaxOp, ops::SoftmaxOpMaker, softmax_grad, ops::SoftmaxOpGrad); -REGISTER_OP_CPU_KERNEL(softmax, - ops::SoftmaxKernel); REGISTER_OP_CPU_KERNEL( - softmax_grad, ops::SoftmaxGradKernel); + softmax, ops::SoftmaxKernel); +REGISTER_OP_CPU_KERNEL( + softmax_grad, + ops::SoftmaxGradKernel); diff --git a/paddle/operators/softmax_op.cu.cc b/paddle/operators/softmax_op.cu.cc index 013ace19ae..7b9882cbcf 100644 --- a/paddle/operators/softmax_op.cu.cc +++ b/paddle/operators/softmax_op.cu.cc @@ -16,7 +16,8 @@ namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL(softmax, - ops::SoftmaxKernel); -REGISTER_OP_GPU_KERNEL( - softmax_grad, ops::SoftmaxGradKernel); +REGISTER_OP_CUDA_KERNEL( + softmax, ops::SoftmaxKernel); +REGISTER_OP_CUDA_KERNEL( + softmax_grad, + ops::SoftmaxGradKernel); diff --git a/paddle/operators/softmax_op.h b/paddle/operators/softmax_op.h index 44d1e63f1b..0f8998b99e 100644 --- a/paddle/operators/softmax_op.h +++ b/paddle/operators/softmax_op.h @@ -21,7 +21,7 @@ namespace operators { using Tensor = framework::Tensor; -template +template class SoftmaxKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { @@ -31,11 +31,12 @@ class SoftmaxKernel : public framework::OpKernel { // allocate memory on device. Y->mutable_data(context.GetPlace()); - math::SoftmaxFunctor()(context.device_context(), X, Y); + math::SoftmaxFunctor()( + context.template device_context(), X, Y); } }; -template +template class SoftmaxGradKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { @@ -46,7 +47,8 @@ class SoftmaxGradKernel : public framework::OpKernel { // allocate memory on device. dX->mutable_data(context.GetPlace()); - math::SoftmaxGradFunctor()(context.device_context(), Y, dY, dX); + math::SoftmaxGradFunctor()( + context.template device_context(), Y, dY, dX); } }; diff --git a/paddle/operators/softmax_with_cross_entropy_op.cu b/paddle/operators/softmax_with_cross_entropy_op.cu index b1faddac3f..6100c63f9a 100644 --- a/paddle/operators/softmax_with_cross_entropy_op.cu +++ b/paddle/operators/softmax_with_cross_entropy_op.cu @@ -69,10 +69,10 @@ class SoftmaxWithCrossEntropyCUDAKernel : public framework::OpKernel { softmax->mutable_data(context.GetPlace()); loss->mutable_data(context.GetPlace()); - math::SoftmaxFunctor()(context.device_context(), - logits, softmax); - math::CrossEntropyFunctor()( - context.device_context(), loss, softmax, labels, + math::SoftmaxFunctor()( + context.cuda_device_context(), logits, softmax); + math::CrossEntropyFunctor()( + context.cuda_device_context(), loss, softmax, labels, context.Attr("soft_label")); } }; @@ -98,18 +98,18 @@ class SoftmaxWithCrossEntropyGradCUDAKernel : public framework::OpKernel { if (context.Attr("soft_label")) { const T* label_data = labels->data(); - SoftCrossEntropyGradientKernel<<< - grid, block, 0, reinterpret_cast( - context.device_context()) - .stream()>>>(logit_grad_data, loss_grad_data, - label_data, batch_size, class_num); + SoftCrossEntropyGradientKernel< + T><<() + .stream()>>>(logit_grad_data, loss_grad_data, label_data, + batch_size, class_num); } else { const int64_t* label_data = labels->data(); - CrossEntropyGrad<<< - grid, block, 0, reinterpret_cast( - context.device_context()) - .stream()>>>(logit_grad_data, loss_grad_data, - label_data, batch_size, class_num); + CrossEntropyGrad< + T><<() + .stream()>>>(logit_grad_data, loss_grad_data, label_data, + batch_size, class_num); } } }; @@ -118,9 +118,9 @@ class SoftmaxWithCrossEntropyGradCUDAKernel : public framework::OpKernel { } // namespace paddle namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL(softmax_with_cross_entropy, - ops::SoftmaxWithCrossEntropyCUDAKernel, - ops::SoftmaxWithCrossEntropyCUDAKernel); -REGISTER_OP_GPU_KERNEL(softmax_with_cross_entropy_grad, - ops::SoftmaxWithCrossEntropyGradCUDAKernel, - ops::SoftmaxWithCrossEntropyGradCUDAKernel); +REGISTER_OP_CUDA_KERNEL(softmax_with_cross_entropy, + ops::SoftmaxWithCrossEntropyCUDAKernel, + ops::SoftmaxWithCrossEntropyCUDAKernel); +REGISTER_OP_CUDA_KERNEL(softmax_with_cross_entropy_grad, + ops::SoftmaxWithCrossEntropyGradCUDAKernel, + ops::SoftmaxWithCrossEntropyGradCUDAKernel); diff --git a/paddle/operators/softmax_with_cross_entropy_op.h b/paddle/operators/softmax_with_cross_entropy_op.h index c4ab3f74b4..9c3431605b 100644 --- a/paddle/operators/softmax_with_cross_entropy_op.h +++ b/paddle/operators/softmax_with_cross_entropy_op.h @@ -40,11 +40,12 @@ class SoftmaxWithCrossEntropyKernel : public framework::OpKernel { softmax->mutable_data(context.GetPlace()); loss->mutable_data(context.GetPlace()); - math::SoftmaxFunctor()(context.device_context(), - logits, softmax); - math::CrossEntropyFunctor()( - context.device_context(), loss, softmax, labels, - context.Attr("soft_label")); + auto& dev_ctx = + context.template device_context(); + math::SoftmaxFunctor()(dev_ctx, logits, + softmax); + math::CrossEntropyFunctor()( + dev_ctx, loss, softmax, labels, context.Attr("soft_label")); } }; @@ -62,14 +63,15 @@ class SoftmaxWithCrossEntropyGradKernel : public framework::OpKernel { const int class_num = logit_grad->dims()[1]; auto out_grad_mat = EigenMatrix::From(*out_grad); auto logit_grad_mat = EigenMatrix::From(*logit_grad); - + auto& place = *context.template device_context() + .eigen_device(); if (context.Attr("soft_label")) { auto lbl_mat = EigenMatrix::From(*labels); - logit_grad_mat.device(context.GetEigenDevice()) = + logit_grad_mat.device(place) = out_grad_mat.broadcast(Eigen::DSizes(1, class_num)) * (logit_grad_mat - lbl_mat); } else { - logit_grad_mat.device(context.GetEigenDevice()) = + logit_grad_mat.device(place) = logit_grad_mat * out_grad_mat.broadcast(Eigen::DSizes(1, class_num)); diff --git a/paddle/operators/split_op.cu.cc b/paddle/operators/split_op.cu.cc index 93d1fc3c44..dbad0bbf68 100644 --- a/paddle/operators/split_op.cu.cc +++ b/paddle/operators/split_op.cu.cc @@ -14,5 +14,5 @@ limitations under the License. */ #include "paddle/operators/split_op.h" namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL(split, - ops::SplitOpKernel); +REGISTER_OP_CUDA_KERNEL( + split, ops::SplitOpKernel); diff --git a/paddle/operators/split_op.h b/paddle/operators/split_op.h index fa26e5f677..a38c435d53 100644 --- a/paddle/operators/split_op.h +++ b/paddle/operators/split_op.h @@ -21,7 +21,7 @@ limitations under the License. */ namespace paddle { namespace operators { -template +template class SplitOpKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& ctx) const override { diff --git a/paddle/operators/squared_l2_distance_op.cc b/paddle/operators/squared_l2_distance_op.cc index bec2a2c18a..50bc6da196 100644 --- a/paddle/operators/squared_l2_distance_op.cc +++ b/paddle/operators/squared_l2_distance_op.cc @@ -115,7 +115,7 @@ REGISTER_OP(squared_l2_distance, ops::SquaredL2DistanceOp, ops::SquaredL2DistanceGradOp); REGISTER_OP_CPU_KERNEL( squared_l2_distance, - ops::SquaredL2DistanceKernel); -REGISTER_OP_CPU_KERNEL( - squared_l2_distance_grad, - ops::SquaredL2DistanceGradKernel); + ops::SquaredL2DistanceKernel); +REGISTER_OP_CPU_KERNEL(squared_l2_distance_grad, + ops::SquaredL2DistanceGradKernel< + paddle::platform::CPUDeviceContext, float>); diff --git a/paddle/operators/squared_l2_distance_op.cu b/paddle/operators/squared_l2_distance_op.cu index 3fe62f1a9c..ecc82ed1e4 100644 --- a/paddle/operators/squared_l2_distance_op.cu +++ b/paddle/operators/squared_l2_distance_op.cu @@ -17,9 +17,9 @@ #include "paddle/operators/squared_l2_distance_op.h" namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL( +REGISTER_OP_CUDA_KERNEL( squared_l2_distance, - ops::SquaredL2DistanceKernel); -REGISTER_OP_GPU_KERNEL( - squared_l2_distance_grad, - ops::SquaredL2DistanceGradKernel); + ops::SquaredL2DistanceKernel); +REGISTER_OP_CUDA_KERNEL(squared_l2_distance_grad, + ops::SquaredL2DistanceGradKernel< + paddle::platform::CUDADeviceContext, float>); diff --git a/paddle/operators/squared_l2_distance_op.h b/paddle/operators/squared_l2_distance_op.h index 259ef40296..5bd5f4819a 100644 --- a/paddle/operators/squared_l2_distance_op.h +++ b/paddle/operators/squared_l2_distance_op.h @@ -27,7 +27,7 @@ template using EigenMatrix = framework::EigenMatrix; -template +template class SquaredL2DistanceKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { @@ -51,7 +51,8 @@ class SquaredL2DistanceKernel : public framework::OpKernel { auto sub_result = EigenMatrix::From(*out0); auto z = EigenVector::Flatten(*out1); - auto place = context.GetEigenDevice(); + auto& place = + *context.template device_context().eigen_device(); auto x_dims = x.dimensions(); auto y_dims = y.dimensions(); // buffer the substraction result @@ -67,7 +68,7 @@ class SquaredL2DistanceKernel : public framework::OpKernel { } }; -template +template class SquaredL2DistanceGradKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { @@ -89,7 +90,8 @@ class SquaredL2DistanceGradKernel : public framework::OpKernel { sub_result; // propagate back to input - auto eigen_place = context.GetEigenDevice(); + auto& eigen_place = + *context.template device_context().eigen_device(); if (x_g) { x_g->mutable_data(context.GetPlace()); // eigen matrix diff --git a/paddle/operators/squared_l2_norm_op.cc b/paddle/operators/squared_l2_norm_op.cc index 3c10e6159f..3cff61a02f 100644 --- a/paddle/operators/squared_l2_norm_op.cc +++ b/paddle/operators/squared_l2_norm_op.cc @@ -72,7 +72,7 @@ REGISTER_OP(squared_l2_norm, ops::SquaredL2NormOp, ops::SquaredL2NormOpMaker, squared_l2_norm_grad, ops::SquaredL2NormGradOp); REGISTER_OP_CPU_KERNEL( squared_l2_norm, - ops::SquaredL2NormKernel); + ops::SquaredL2NormKernel); REGISTER_OP_CPU_KERNEL( squared_l2_norm_grad, - ops::SquaredL2NormGradKernel); + ops::SquaredL2NormGradKernel); diff --git a/paddle/operators/squared_l2_norm_op.cu b/paddle/operators/squared_l2_norm_op.cu index d384e9c28c..2d6567d090 100644 --- a/paddle/operators/squared_l2_norm_op.cu +++ b/paddle/operators/squared_l2_norm_op.cu @@ -16,9 +16,9 @@ #include "paddle/operators/squared_l2_norm_op.h" namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL( +REGISTER_OP_CUDA_KERNEL( squared_l2_norm, - ops::SquaredL2NormKernel); -REGISTER_OP_GPU_KERNEL( + ops::SquaredL2NormKernel); +REGISTER_OP_CUDA_KERNEL( squared_l2_norm_grad, - ops::SquaredL2NormGradKernel); + ops::SquaredL2NormGradKernel); diff --git a/paddle/operators/squared_l2_norm_op.h b/paddle/operators/squared_l2_norm_op.h index 48d7b1c2d5..0ced7e7d70 100644 --- a/paddle/operators/squared_l2_norm_op.h +++ b/paddle/operators/squared_l2_norm_op.h @@ -20,7 +20,7 @@ namespace paddle { namespace operators { // Out = sum(square(X)) -template +template class SquaredL2NormKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext &context) const override { @@ -30,14 +30,15 @@ class SquaredL2NormKernel : public framework::OpKernel { auto x = framework::EigenVector::Flatten(*X); auto out = framework::EigenScalar::From(*Out); - auto place = context.GetEigenDevice(); + auto *place = + context.template device_context().eigen_device(); - out.device(place) = x.square().sum(); + out.device(*place) = x.square().sum(); } }; // dX = X -template +template class SquaredL2NormGradKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext &context) const override { @@ -53,10 +54,11 @@ class SquaredL2NormGradKernel : public framework::OpKernel { auto x = framework::EigenVector::Flatten(*X); auto dout = framework::EigenVector::Flatten(*dOut); auto dx = framework::EigenVector::Flatten(*dX); - auto place = context.GetEigenDevice(); + auto *place = + context.template device_context().eigen_device(); Eigen::DSizes x_dsize(X->numel()); - dx.device(place) = (dout.broadcast(x_dsize) * x) * static_cast(2.0); + dx.device(*place) = (dout.broadcast(x_dsize) * x) * static_cast(2.0); } }; diff --git a/paddle/operators/sum_op.cc b/paddle/operators/sum_op.cc index 744b2fe3f2..cd52672f78 100644 --- a/paddle/operators/sum_op.cc +++ b/paddle/operators/sum_op.cc @@ -195,7 +195,8 @@ namespace ops = paddle::operators; REGISTER_OPERATOR(sum, ops::SumOp, ops::SumOpMaker, ops::SumGradMaker, ops::SumOpVarTypeInference); -REGISTER_OP_CPU_KERNEL(sum, ops::SumKernel, - ops::SumKernel, - ops::SumKernel, - ops::SumKernel); +REGISTER_OP_CPU_KERNEL( + sum, ops::SumKernel, + ops::SumKernel, + ops::SumKernel, + ops::SumKernel); diff --git a/paddle/operators/sum_op.cu b/paddle/operators/sum_op.cu index 5c30dd4d47..873155076c 100644 --- a/paddle/operators/sum_op.cu +++ b/paddle/operators/sum_op.cu @@ -13,7 +13,8 @@ limitations under the License. */ #include "paddle/operators/sum_op.h" namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL(sum, ops::SumKernel, - ops::SumKernel, - ops::SumKernel, - ops::SumKernel); +REGISTER_OP_CUDA_KERNEL( + sum, ops::SumKernel, + ops::SumKernel, + ops::SumKernel, + ops::SumKernel); diff --git a/paddle/operators/sum_op.h b/paddle/operators/sum_op.h index ed6c80ce60..eaa36aa1ae 100644 --- a/paddle/operators/sum_op.h +++ b/paddle/operators/sum_op.h @@ -26,7 +26,7 @@ template using EigenVector = framework::EigenVector; -template +template class SumKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext &context) const override { @@ -43,12 +43,14 @@ class SumKernel : public framework::OpKernel { auto result = EigenVector::Flatten(*out); if (!in_place) { - math::SetConstant constant_functor; - constant_functor(context.device_context(), out, 0.0); + math::SetConstant constant_functor; + constant_functor(context.template device_context(), out, + 0.0); } - math::SelectedRowsAddToTensor functor; - auto place = context.GetEigenDevice(); + math::SelectedRowsAddToTensor functor; + auto &place = + *context.template device_context().eigen_device(); // If in_place, just skip the first tensor for (int i = in_place ? 1 : 0; i < N; i++) { if (in_vars[i]->IsType()) { @@ -60,7 +62,7 @@ class SumKernel : public framework::OpKernel { result.device(place) = result + in; } else if (in_vars[i]->IsType()) { auto &in_t = in_vars[i]->Get(); - functor(context.device_context(), in_t, out); + functor(context.template device_context(), in_t, out); } else { PADDLE_THROW("Variable type must be LoDTensor/SelectedRows."); } @@ -82,14 +84,14 @@ class SumKernel : public framework::OpKernel { out_value->Resize(framework::make_ddim(in_dim_vec)); out_value->mutable_data(context.GetPlace()); - math::SelectedRowsAddTo functor; + math::SelectedRowsAddTo functor; int64_t offset = 0; for (int i = 0; i < N; i++) { PADDLE_ENFORCE_EQ(out->height(), in_vars[i]->Get().height()); - functor(context.device_context(), in_vars[i]->Get(), - offset, out); + functor(context.template device_context(), + in_vars[i]->Get(), offset, out); offset += in_vars[i]->Get().value().numel(); } } else if (out_var->IsType()) { @@ -112,7 +114,8 @@ class SumKernel : public framework::OpKernel { PADDLE_ENFORCE(out_array[i].lod() == in_array[i].lod()); auto in = EigenVector::Flatten(in_array[i]); auto result = EigenVector::Flatten(out_array[i]); - result.device(context.GetEigenDevice()) = result + in; + result.device(*context.template device_context() + .eigen_device()) = result + in; } } } diff --git a/paddle/operators/top_k_op.cu b/paddle/operators/top_k_op.cu index 7851c71bbe..453bd07267 100644 --- a/paddle/operators/top_k_op.cu +++ b/paddle/operators/top_k_op.cu @@ -317,4 +317,4 @@ class TopkOpCUDAKernel : public framework::OpKernel { } // namespace operators } // namespace paddle -REGISTER_OP_GPU_KERNEL(top_k, paddle::operators::TopkOpCUDAKernel); +REGISTER_OP_CUDA_KERNEL(top_k, paddle::operators::TopkOpCUDAKernel); diff --git a/paddle/operators/top_k_op.h b/paddle/operators/top_k_op.h index bc8563717a..e9cd9bbd4d 100644 --- a/paddle/operators/top_k_op.h +++ b/paddle/operators/top_k_op.h @@ -27,7 +27,7 @@ template using EigenMatrix = framework::EigenMatrix; -template +template class TopkKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& ctx) const override { diff --git a/paddle/operators/transpose_op.cc b/paddle/operators/transpose_op.cc index 94de3d5069..de5ff561ad 100644 --- a/paddle/operators/transpose_op.cc +++ b/paddle/operators/transpose_op.cc @@ -112,8 +112,8 @@ class TransposeOpGrad : public framework::OperatorWithKernel { namespace ops = paddle::operators; REGISTER_OP(transpose, ops::TransposeOp, ops::TransposeOpMaker, transpose_grad, ops::TransposeOpGrad); -REGISTER_OP_CPU_KERNEL(transpose, - ops::TransposeKernel); +REGISTER_OP_CPU_KERNEL( + transpose, ops::TransposeKernel); REGISTER_OP_CPU_KERNEL( transpose_grad, - ops::TransposeGradKernel); + ops::TransposeGradKernel); diff --git a/paddle/operators/transpose_op.cu.cc b/paddle/operators/transpose_op.cu.cc index af3f581462..7d23f1493e 100644 --- a/paddle/operators/transpose_op.cu.cc +++ b/paddle/operators/transpose_op.cu.cc @@ -15,8 +15,9 @@ #include "paddle/operators/transpose_op.h" namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL(transpose, - ops::TransposeKernel); -REGISTER_OP_GPU_KERNEL( +REGISTER_OP_CUDA_KERNEL( + transpose, + ops::TransposeKernel); +REGISTER_OP_CUDA_KERNEL( transpose_grad, - ops::TransposeGradKernel); + ops::TransposeGradKernel); diff --git a/paddle/operators/transpose_op.h b/paddle/operators/transpose_op.h index e296032f41..d995271a6b 100644 --- a/paddle/operators/transpose_op.h +++ b/paddle/operators/transpose_op.h @@ -20,33 +20,33 @@ namespace paddle { namespace operators { -template -inline void TransCompute(const int dim, const platform::DeviceContext& dev_ctx, +template +inline void TransCompute(const int dim, const DeviceContext& dev_ctx, const framework::Tensor& in, framework::Tensor* out, const std::vector& axis) { switch (dim) { case 1: - math::Transpose trans1; + math::Transpose trans1; trans1(dev_ctx, in, out, axis); break; case 2: - math::Transpose trans2; + math::Transpose trans2; trans2(dev_ctx, in, out, axis); break; case 3: - math::Transpose trans3; + math::Transpose trans3; trans3(dev_ctx, in, out, axis); break; case 4: - math::Transpose trans4; + math::Transpose trans4; trans4(dev_ctx, in, out, axis); break; case 5: - math::Transpose trans5; + math::Transpose trans5; trans5(dev_ctx, in, out, axis); break; case 6: - math::Transpose trans6; + math::Transpose trans6; trans6(dev_ctx, in, out, axis); break; default: @@ -54,7 +54,7 @@ inline void TransCompute(const int dim, const platform::DeviceContext& dev_ctx, } } -template +template class TransposeKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { @@ -64,12 +64,12 @@ class TransposeKernel : public framework::OpKernel { std::vector axis = context.Attr>("axis"); int ndims = axis.size(); - auto& dev_ctx = context.device_context(); - TransCompute(ndims, dev_ctx, *x, out, axis); + auto& dev_ctx = context.template device_context(); + TransCompute(ndims, dev_ctx, *x, out, axis); } }; -template +template class TransposeGradKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { @@ -88,8 +88,9 @@ class TransposeGradKernel : public framework::OpKernel { } int ndims = axis.size(); - auto& dev_ctx = context.device_context(); - TransCompute(ndims, dev_ctx, *out_grad, x_grad, reversed_axis); + auto& dev_ctx = context.template device_context(); + TransCompute(ndims, dev_ctx, *out_grad, x_grad, + reversed_axis); } }; diff --git a/paddle/operators/uniform_random_op.cc b/paddle/operators/uniform_random_op.cc index fff1dc7ccd..2a49ee471f 100644 --- a/paddle/operators/uniform_random_op.cc +++ b/paddle/operators/uniform_random_op.cc @@ -67,7 +67,7 @@ class UniformRandomOp : public framework::OperatorWithKernel { const framework::ExecutionContext& ctx) const override { return framework::OpKernelType( static_cast(ctx.Attr("dtype")), - ctx.device_context()); + ctx.GetPlace()); } }; diff --git a/paddle/operators/uniform_random_op.cu b/paddle/operators/uniform_random_op.cu index 8b20bb8287..cfe9d293cf 100644 --- a/paddle/operators/uniform_random_op.cu +++ b/paddle/operators/uniform_random_op.cu @@ -63,6 +63,6 @@ class GPUUniformRandomKernel : public framework::OpKernel { } // namespace operators } // namespace paddle -REGISTER_OP_GPU_KERNEL(uniform_random, - paddle::operators::GPUUniformRandomKernel, - paddle::operators::GPUUniformRandomKernel); +REGISTER_OP_CUDA_KERNEL(uniform_random, + paddle::operators::GPUUniformRandomKernel, + paddle::operators::GPUUniformRandomKernel); diff --git a/paddle/operators/unpool_op.cc b/paddle/operators/unpool_op.cc index 89c48e071c..49df2a530c 100644 --- a/paddle/operators/unpool_op.cc +++ b/paddle/operators/unpool_op.cc @@ -135,9 +135,10 @@ class UnpoolOpGrad : public framework::OperatorWithKernel { namespace ops = paddle::operators; REGISTER_OP(unpool, ops::UnpoolOp, ops::Unpool2dOpMaker, unpool_grad, ops::UnpoolOpGrad); -REGISTER_OP_CPU_KERNEL(unpool, - ops::UnpoolKernel, - ops::UnpoolKernel); REGISTER_OP_CPU_KERNEL( - unpool_grad, ops::UnpoolGradKernel, - ops::UnpoolGradKernel); + unpool, ops::UnpoolKernel, + ops::UnpoolKernel); +REGISTER_OP_CPU_KERNEL( + unpool_grad, + ops::UnpoolGradKernel, + ops::UnpoolGradKernel); diff --git a/paddle/operators/unpool_op.cu.cc b/paddle/operators/unpool_op.cu.cc index 18aafb7dc7..9b002e35c4 100644 --- a/paddle/operators/unpool_op.cu.cc +++ b/paddle/operators/unpool_op.cu.cc @@ -15,9 +15,10 @@ limitations under the License. */ #include "paddle/operators/unpool_op.h" namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL(unpool, - ops::UnpoolKernel, - ops::UnpoolKernel); -REGISTER_OP_GPU_KERNEL( - unpool_grad, ops::UnpoolGradKernel, - ops::UnpoolGradKernel); +REGISTER_OP_CUDA_KERNEL( + unpool, ops::UnpoolKernel, + ops::UnpoolKernel); +REGISTER_OP_CUDA_KERNEL( + unpool_grad, + ops::UnpoolGradKernel, + ops::UnpoolGradKernel); diff --git a/paddle/operators/unpool_op.h b/paddle/operators/unpool_op.h index 243eb7e532..ee18b118c9 100644 --- a/paddle/operators/unpool_op.h +++ b/paddle/operators/unpool_op.h @@ -20,7 +20,7 @@ limitations under the License. */ namespace paddle { namespace operators { -template +template class UnpoolKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { @@ -32,15 +32,16 @@ class UnpoolKernel : public framework::OpKernel { std::vector strides = context.Attr>("strides"); std::vector paddings = context.Attr>("paddings"); T* output_data = out->mutable_data(context.GetPlace()); + auto& dev_ctx = context.template device_context(); if (output_data) { - math::SetConstant set_zero; - set_zero(context.device_context(), out, static_cast(0)); + math::SetConstant set_zero; + set_zero(dev_ctx, out, static_cast(0)); } - math::Unpool2dMaxFunctor unpool2d_max_forward; - unpool2d_max_forward(context.device_context(), *in_x, *in_y, out); + math::Unpool2dMaxFunctor unpool2d_max_forward; + unpool2d_max_forward(dev_ctx, *in_x, *in_y, out); } }; -template +template class UnpoolGradKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { @@ -56,15 +57,14 @@ class UnpoolGradKernel : public framework::OpKernel { std::vector strides = context.Attr>("strides"); std::vector paddings = context.Attr>("paddings"); - auto& device_ctx = context.device_context(); - math::SetConstant zero; + auto& device_ctx = context.template device_context(); + math::SetConstant zero; if (in_x_grad) { in_x_grad->mutable_data(context.GetPlace()); zero(device_ctx, in_x_grad, static_cast(0)); } - math::Unpool2dMaxGradFunctor unpool2d_max_backward; - unpool2d_max_backward(context.device_context(), *in_x, *in_y, *out, - *out_grad, in_x_grad); + math::Unpool2dMaxGradFunctor unpool2d_max_backward; + unpool2d_max_backward(device_ctx, *in_x, *in_y, *out, *out_grad, in_x_grad); } }; } // namespace operators diff --git a/paddle/platform/device_context.cc b/paddle/platform/device_context.cc index ae4f0bf896..2c7f964216 100644 --- a/paddle/platform/device_context.cc +++ b/paddle/platform/device_context.cc @@ -15,12 +15,6 @@ limitations under the License. */ namespace paddle { namespace platform { -template <> -Eigen::DefaultDevice* DeviceContext::GetEigenDevice< - platform::CPUPlace, Eigen::DefaultDevice>() const { - return reinterpret_cast(this)->eigen_device(); -} - CPUDeviceContext::CPUDeviceContext() { eigen_device_.reset(new Eigen::DefaultDevice()); } @@ -37,12 +31,6 @@ Place CPUDeviceContext::GetPlace() const { return CPUPlace(); } #ifdef PADDLE_WITH_CUDA -template <> -Eigen::GpuDevice* -DeviceContext::GetEigenDevice() const { - return reinterpret_cast(this)->eigen_device(); -} - class EigenCudaStreamDevice : public Eigen::StreamInterface { public: EigenCudaStreamDevice() : scratch_(nullptr), semaphore_(nullptr) { diff --git a/paddle/platform/device_context.h b/paddle/platform/device_context.h index ef5f19214d..596d9d0bba 100644 --- a/paddle/platform/device_context.h +++ b/paddle/platform/device_context.h @@ -27,24 +27,11 @@ limitations under the License. */ namespace paddle { namespace platform { -template -struct EigenDeviceConverter; - -template <> -struct EigenDeviceConverter { - using EigenDeviceType = Eigen::DefaultDevice; -}; - class DeviceContext { public: virtual ~DeviceContext() {} virtual Place GetPlace() const = 0; - template ::EigenDeviceType> - DeviceType* GetEigenDevice() const; - virtual void Wait() const {} }; @@ -62,10 +49,6 @@ class CPUDeviceContext : public DeviceContext { }; #ifdef PADDLE_WITH_CUDA -template <> -struct EigenDeviceConverter { - using EigenDeviceType = Eigen::GpuDevice; -}; class EigenCudaStreamDevice; diff --git a/paddle/platform/device_context_test.cc b/paddle/platform/device_context_test.cc index 8bf5174c4a..4893cd92f6 100644 --- a/paddle/platform/device_context_test.cc +++ b/paddle/platform/device_context_test.cc @@ -22,9 +22,8 @@ TEST(Device, Init) { int count = paddle::platform::GetCUDADeviceCount(); for (int i = 0; i < count; i++) { - DeviceContext* device_context = new CUDADeviceContext(GPUPlace(i)); - Eigen::GpuDevice* gpu_device = - device_context->template GetEigenDevice(); + CUDADeviceContext* device_context = new CUDADeviceContext(GPUPlace(i)); + Eigen::GpuDevice* gpu_device = device_context->eigen_device(); ASSERT_NE(nullptr, gpu_device); delete device_context; } diff --git a/paddle/platform/transform.h b/paddle/platform/transform.h index bb9d59ec0a..148ebaed3d 100644 --- a/paddle/platform/transform.h +++ b/paddle/platform/transform.h @@ -31,7 +31,7 @@ namespace paddle { namespace platform { // Transform on host or device. It provides the same API in std library. -template +template struct Transform { template void operator()(const DeviceContext& context, InputIter first, InputIter last, @@ -45,16 +45,16 @@ struct Transform { }; template <> -struct Transform { +struct Transform { template - void operator()(const DeviceContext& context, InputIter first, InputIter last, - OutputIter result, UnaryOperation op) { + void operator()(const platform::CPUDeviceContext& context, InputIter first, + InputIter last, OutputIter result, UnaryOperation op) { std::transform(first, last, result, op); } template - void operator()(const DeviceContext& context, InputIter1 first1, + void operator()(const platform::CPUDeviceContext& context, InputIter1 first1, InputIter1 last1, InputIter2 first2, OutputIter result, BinaryOperation op) { std::transform(first1, last1, first2, result, op); @@ -63,27 +63,25 @@ struct Transform { #ifdef __NVCC__ template <> -struct Transform { +struct Transform { template - void operator()(const DeviceContext& context, InputIter first, InputIter last, - OutputIter result, UnaryOperation op) { + void operator()(const platform::CUDADeviceContext& context, InputIter first, + InputIter last, OutputIter result, UnaryOperation op) { auto place = context.GetPlace(); PADDLE_ENFORCE(is_gpu_place(place), "It must use GPU place."); - auto& ctx = reinterpret_cast(context); - thrust::transform(thrust::cuda::par.on(ctx.stream()), + thrust::transform(thrust::cuda::par.on(context.stream()), details::DevPtrCast(first), details::DevPtrCast(last), details::DevPtrCast(result), op); } template - void operator()(const DeviceContext& context, InputIter1 first1, + void operator()(const platform::CUDADeviceContext& context, InputIter1 first1, InputIter1 last1, InputIter2 first2, OutputIter result, BinaryOperation op) { auto place = context.GetPlace(); PADDLE_ENFORCE(is_gpu_place(place), "It must use GPU place."); - auto& ctx = reinterpret_cast(context); - thrust::transform(thrust::cuda::par.on(ctx.stream()), + thrust::transform(thrust::cuda::par.on(context.stream()), details::DevPtrCast(first1), details::DevPtrCast(last1), details::DevPtrCast(first2), details::DevPtrCast(result), op); diff --git a/paddle/platform/transform_test.cu b/paddle/platform/transform_test.cu index c76cab80e4..d36eac8379 100644 --- a/paddle/platform/transform_test.cu +++ b/paddle/platform/transform_test.cu @@ -39,7 +39,7 @@ TEST(Transform, CPUUnary) { using namespace paddle::platform; CPUDeviceContext ctx; float buf[4] = {0.1, 0.2, 0.3, 0.4}; - Transform trans; + Transform trans; trans(ctx, buf, buf + 4, buf, Scale(10)); for (int i = 0; i < 4; ++i) { ASSERT_NEAR(buf[i], static_cast(i + 1), 1e-5); @@ -54,7 +54,7 @@ TEST(Transform, GPUUnary) { float cpu_buf[4] = {0.1, 0.2, 0.3, 0.4}; float* gpu_buf = static_cast(Alloc(gpu0, sizeof(float) * 4)); Copy(gpu0, gpu_buf, CPUPlace(), cpu_buf, sizeof(cpu_buf)); - Transform trans; + Transform trans; trans(ctx, gpu_buf, gpu_buf + 4, gpu_buf, Scale(10)); ctx.Wait(); Copy(CPUPlace(), cpu_buf, gpu0, gpu_buf, sizeof(cpu_buf)); @@ -68,7 +68,7 @@ TEST(Transform, CPUBinary) { using namespace paddle::platform; using namespace paddle::memory; int buf[4] = {1, 2, 3, 4}; - Transform trans; + Transform trans; CPUDeviceContext ctx; trans(ctx, buf, buf + 4, buf, buf, Multiply()); for (int i = 0; i < 4; ++i) { @@ -84,7 +84,7 @@ TEST(Transform, GPUBinary) { CUDADeviceContext ctx(gpu0); int* gpu_buf = static_cast(Alloc(gpu0, sizeof(buf))); Copy(gpu0, gpu_buf, CPUPlace(), buf, sizeof(buf)); - Transform trans; + Transform trans; trans(ctx, gpu_buf, gpu_buf + 4, gpu_buf, gpu_buf, Multiply()); ctx.Wait(); Copy(CPUPlace(), buf, gpu0, gpu_buf, sizeof(buf)); From de8c4627776b2b9a60dbcc64c48e858c80a2715f Mon Sep 17 00:00:00 2001 From: QI JUN Date: Tue, 12 Dec 2017 14:42:33 +0800 Subject: [PATCH 063/193] Update new op docs (#6505) * update docs about how to add a new operator --- doc/howto/dev/new_op_cn.md | 98 ++++++++++++++++---------------------- doc/howto/dev/new_op_en.md | 93 ++++++++++++++++-------------------- 2 files changed, 80 insertions(+), 111 deletions(-) diff --git a/doc/howto/dev/new_op_cn.md b/doc/howto/dev/new_op_cn.md index 6cfc9536f2..44dbeecbbd 100644 --- a/doc/howto/dev/new_op_cn.md +++ b/doc/howto/dev/new_op_cn.md @@ -30,8 +30,8 @@ -------------- | :---------------------- OpProtoMake定义 | `.cc`文件,Backward Op不需要定义OpProtoMake Op定义 | `.cc`文件 -Kernel实现 | CPU、GPU共享Kernel实现在`.h`文件中,否则,CPU 实现在`.cc`文件中,GPU 实现在`.cu`文件中。 -注册Op | Op注册实现在`.cc`文件;Kernel注册CPU实现在`.cc`文件中,GPU实现在`.cu`文件中 +Kernel实现 | CPU、CUDA共享Kernel实现在`.h`文件中,否则,CPU 实现在`.cc`文件中,CUDA 实现在`.cu`文件中。 +注册Op | Op注册实现在`.cc`文件;Kernel注册CPU实现在`.cc`文件中,CUDA实现在`.cu`文件中 实现新的op都添加至目录[paddle/operators](https://github.com/PaddlePaddle/Paddle/tree/develop/paddle/operators)下,文件命名以`*_op.h`(如有) 、 `*_op.cc` 、`*_op.cu`(如有)结尾。**系统会根据文件名自动构建op和其对应的Python扩展。** @@ -153,7 +153,7 @@ MulOp(const std::string &type, const framework::VariableNameMap &inputs, `MulKernel`继承自`framework::OpKernel`,带有下面两个模板参数: -- `typename Place`: 表示设备类型,不同设备(CPU、GPU)共享同一个Kernel时,需加该模板参数,不共享则不加,一个不共享的例子是[`OnehotCrossEntropyOpKernel`](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/operators/cross_entropy_op.h#L43)。 +- `typename DeviceContext`: 表示设备类型,不同设备(CPU、CUDA)共享同一个Kernel时,需加该模板参数,不共享则不加,一个不共享的例子是[`OnehotCrossEntropyOpKernel`](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/operators/cross_entropy_op.h#L43)。 - `typename T` : 表示数据类型,如`float`, `double`等。 @@ -165,7 +165,7 @@ MulOp(const std::string &type, const framework::VariableNameMap &inputs, 下面是 `MulKernel` `Compute`的实现: ```cpp - template + template class MulKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { @@ -173,18 +173,16 @@ MulOp(const std::string &type, const framework::VariableNameMap &inputs, auto* Y = context.Input("Y"); auto* Z = context.Output("Out"); Z->mutable_data(context.GetPlace()); - auto* device_context = - const_cast(context.device_context_); - math::matmul(*X, false, *Y, false, 1, Z, 0, device_context); + auto& device_context = context.template device_context(); + math::matmul(*X, false, *Y, false, 1, Z, 0, device_context); } }; - ``` -需要注意:**不同设备(CPU、GPU)共享一个Op定义,是否则共享同一个`OpKernel`,取决于`Compute`调用的函数是否支持不同设备。** +需要注意:**不同设备(CPU、CUDA)共享一个Op定义,是否则共享同一个`OpKernel`,取决于`Compute`调用的函数是否支持不同设备。** -`MulOp`的CPU、GPU实现共享同一个`Kernel`。`OpKernel`不共享的例子可以参考:[`OnehotCrossEntropyOpKernel`](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/operators/cross_entropy_op.h#L43)。 +`MulOp`的CPU、CUDA实现共享同一个`Kernel`。`OpKernel`不共享的例子可以参考:[`OnehotCrossEntropyOpKernel`](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/operators/cross_entropy_op.h#L43)。 -为了使`OpKernel`的计算过程书写更加简单,并且CPU、GPU的代码可以复用,我们通常借助 Eigen unsupported Tensor模块来实现`Compute`接口。关于在PaddlePaddle中如何使用Eigen库,请参考[使用文档](https://github.com/PaddlePaddle/Paddle/blob/develop/doc/howto/dev/use_eigen_cn.md)。 +为了使`OpKernel`的计算过程书写更加简单,并且CPU、CUDA的代码可以复用,我们通常借助 Eigen unsupported Tensor模块来实现`Compute`接口。关于在PaddlePaddle中如何使用Eigen库,请参考[使用文档](https://github.com/PaddlePaddle/Paddle/blob/develop/doc/howto/dev/use_eigen_cn.md)。 到此,前向Op实现完成。接下来,需要在`.cc`文件中注册该op和kernel。 @@ -197,9 +195,9 @@ MulOp(const std::string &type, const framework::VariableNameMap &inputs, ```cpp namespace ops = paddle::operators; REGISTER_OP(mul, ops::MulOp, ops::MulOpMaker, mul_grad, ops::MulOpGrad); - REGISTER_OP_CPU_KERNEL(mul, ops::MulKernel); + REGISTER_OP_CPU_KERNEL(mul, ops::MulKernel); REGISTER_OP_CPU_KERNEL(mul_grad, - ops::MulGradKernel); + ops::MulGradKernel); ``` 在上面的代码中: @@ -209,17 +207,17 @@ MulOp(const std::string &type, const framework::VariableNameMap &inputs, - `REGISTER_OP_CPU_KERNEL` :注册`ops::MulKernel`类,并特化模板参数为`paddle::platform::CPUPlace`和`float`类型,同理,注册`ops::MulGradKernel`类。 -- 在 `.cu`文件中注册GPU Kernel。 - - 请注意,如果GPU Kernel的实现基于Eigen unsupported模块,那么在 `.cu`的开始请加上宏定义 `#define EIGEN_USE_GPU`,代码示例如下: +- 在 `.cu`文件中注册CUDA Kernel。 + - 请注意,如果CUDA Kernel的实现基于Eigen unsupported模块,那么在 `.cu`的开始请加上宏定义 `#define EIGEN_USE_GPU`,代码示例如下: ```cpp // if use Eigen unsupported module before include head files - // #define EIGEN_USE_GPU + #define EIGEN_USE_GPU namespace ops = paddle::operators; - REGISTER_OP_GPU_KERNEL(mul, ops::MulKernel); - REGISTER_OP_GPU_KERNEL(mul_grad, - ops::MulGradKernel); + REGISTER_OP_CUDA_KERNEL(mul, ops::MulKernel); + REGISTER_OP_CUDA_KERNEL(mul_grad, + ops::MulGradKernel); ``` ### 5. 编译 @@ -236,71 +234,55 @@ make mul_op ## 实现单元测试 -单测包括对比前向Op不同设备(CPU、GPU)的实现、对比反向OP不同设备(CPU、GPU)的实现、反向Op的梯度测试。下面介绍介绍[`MulOp`的单元测试](https://github.com/PaddlePaddle/Paddle/blob/develop/python/paddle/v2/framework/tests/test_mul_op.py)。 +单测包括对比前向Op不同设备(CPU、CUDA)的实现、对比反向OP不同设备(CPU、CUDA)的实现、反向Op的梯度测试。下面介绍介绍[`MulOp`的单元测试](https://github.com/PaddlePaddle/Paddle/blob/develop/python/paddle/v2/framework/tests/test_mul_op.py)。 -### 前向Operator单元测试 -前向Op单元测试继承自`unittest.TestCase`,并定义元类`__metaclass__ = OpTestMeta`。各项更加具体的单元测试在`OpTestMeta`里完成。测试前向Operator,需要: +Op单元测试继承自`OpTest`。各项更加具体的单元测试在`TestMulOp`里完成。测试Operator,需要: 1. 在`setUp`函数定义输入、输出,以及相关的属性参数。 2. 生成随机的输入数据。 3. 在Python脚本中实现与前向operator相同的计算逻辑,得到输出值,与operator前向计算的输出进行对比。 +4. 反向计算已经自动集成进测试框架,直接调用相应接口即可。 ```python import unittest import numpy as np - from gradient_checker import GradientChecker, create_op - from op_test_util import OpTestMeta + from op_test import OpTest - class TestMulOp(unittest.TestCase): - __metaclass__ = OpTestMeta + class TestMulOp(OpTest): def setUp(self): - self.type = "mul" + self.op_type = "mul" self.inputs = { 'X': np.random.random((32, 84)).astype("float32"), 'Y': np.random.random((84, 100)).astype("float32") } self.outputs = {'Out': np.dot(self.inputs['X'], self.inputs['Y'])} - ``` -上面的代码首先导入依赖的包,下面是对`setUp`函数中操作的重要变量的详细解释: - -- `self.type = "mul" ` : 定义类型,与operator注册时注册的类型一致。 -- `self.inputs` : 定义输入,类型为`numpy.array`,并初始化。 -- `self.outputs` : 定义输出,并在Python脚本中完成与operator同样的计算逻辑,返回Python端的计算结果。 - - -### 反向Operator单元测试 + def test_check_output(self): + self.check_output() -反向Op单元测试继承自`GradientChecker`,而`GradientChecker`继承自`unittest.TestCase`,因此,**反向单元测试函数需要以`test_`开头**。 + def test_check_grad_normal(self): + self.check_grad(['X', 'Y'], 'Out', max_relative_error=0.5) -```python -class TestMulGradOp(GradientChecker): - def setUp(self): - self.op = create_op("mul") - self.inputs = { - 'X': np.random.random((32, 84)).astype("float32"), - 'Y': np.random.random((84, 100)).astype("float32") - } + def test_check_grad_ingore_x(self): + self.check_grad( + ['Y'], 'Out', max_relative_error=0.5, no_grad_set=set("X")) - def test_check_grad_normal(self): - # mul op will enlarge the relative error - self.check_grad(['X', 'Y'], 'Out', max_relative_error=0.5) + def test_check_grad_ingore_y(self): + self.check_grad( + ['X'], 'Out', max_relative_error=0.5, no_grad_set=set('Y')) - def test_check_grad_ingore_x(self): - self.check_grad( - ['Y'], 'Out', max_relative_error=0.5, no_grad_set=set("X")) + ``` - def test_check_grad_ingore_y(self): - self.check_grad( - ['X'], 'Out', max_relative_error=0.5, no_grad_set=set('Y')) -``` +上面的代码首先导入依赖的包,下面是对`setUp`函数中操作的重要变量的详细解释: -下面解释代码中一些关键的地方: +- `self.op_type = "mul" ` : 定义类型,与operator注册时注册的类型一致。 +- `self.inputs` : 定义输入,类型为`numpy.array`,并初始化。 +- `self.outputs` : 定义输出,并在Python脚本中完成与operator同样的计算逻辑,返回Python端的计算结果。 -- 调用`create_op("mul")`创建反向Op对应的前向Op。 +而反向测试中: - `test_check_grad_normal`中调用`check_grad`使用数值法检测梯度正确性和稳定性。 - 第一个参数`["X", "Y"]` : 指定对输入变量`X`、`Y`做梯度检测。 - 第二个参数`"Out"` : 指定前向网络最终的输出目标变量`Out`。 @@ -328,5 +310,5 @@ ctest -R test_mul_op - 为每个Op创建单独的`*_op.h`(如有)、`*_op.cc`和`*_op.cu`(如有)。不允许一个文件中包含多个Op,这将会导致编译出错。 - 注册Op时的类型名,需要和该Op的名字一样。即不允许在`A_op.cc`里面,注册`REGISTER_OP(B, ...)`等,这将会导致单元测试出错。 -- 如果Op没有实现GPU Kernel,请不要创建空的`*_op.cu`,这将会导致单元测试出错。 +- 如果Op没有实现CUDA Kernel,请不要创建空的`*_op.cu`,这将会导致单元测试出错。 - 如果多个Op依赖一些共用的函数,可以创建非`*_op.*`格式的文件来存放,如`gather.h`文件。 diff --git a/doc/howto/dev/new_op_en.md b/doc/howto/dev/new_op_en.md index 1e88e1f5b4..510233306c 100644 --- a/doc/howto/dev/new_op_en.md +++ b/doc/howto/dev/new_op_en.md @@ -28,8 +28,8 @@ An operator can be differentiated by whether in has kernel methods. An operator -------------- | :---------------------- OpProtoMake definition | `.cc`files, Backward Op does not need an OpProtoMake interface. Op definition | `.cc` files -Kernel implementation | The kernel methods shared between CPU and GPU are defined in `.h` files. CPU-specific kernels live in `.cc` files, while GPU-specific kernels are implemented in `.cu`files. -Registering the Op | Ops are registered in `.cc` files; For Kernel registration, `.cc` files contain the CPU implementation, while `.cu` files contain the GPU implementation. +Kernel implementation | The kernel methods shared between CPU and CUDA are defined in `.h` files. CPU-specific kernels live in `.cc` files, while CUDA-specific kernels are implemented in `.cu`files. +Registering the Op | Ops are registered in `.cc` files; For Kernel registration, `.cc` files contain the CPU implementation, while `.cu` files contain the CUDA implementation. New Operator implementations are added to the list [paddle/operators](https://github.com/PaddlePaddle/Paddle/tree/develop/paddle/operators), with file names in the format `*_op.h` (if applicable), `*_op.cc`, `*_op.cu` (if applicable).** The system will use the naming scheme to automatically build operators and their corresponding Python extensions. ** @@ -151,7 +151,7 @@ Usually `OpProtoMaker` and `Op`'s type definitions are written in `.cc` files, w `MulKernel` inherits `framework::OpKernel`, which includes the following templates: -- `typename Place` denotes device type. When different devices, namely the CPU and the GPU, share the same kernel, this template needs to be added. If they don't share kernels, this must not be added. An example of a non-sharing kernel is [`OnehotCrossEntropyOpKernel`](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/operators/cross_entropy_op.h#L43). +- `typename DeviceContext` denotes device context type. When different devices, namely the CPUDeviceContext and the CUDADeviceContext, share the same kernel, this template needs to be added. If they don't share kernels, this must not be added. An example of a non-sharing kernel is [`OnehotCrossEntropyOpKernel`](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/operators/cross_entropy_op.h#L43). - `typename T` denotes data type, such as `float` or `double`. @@ -163,7 +163,7 @@ Usually `OpProtoMaker` and `Op`'s type definitions are written in `.cc` files, w `MulKernel`'s implementation of `Compute` is as follows: ```cpp - template + template class MulKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { @@ -171,16 +171,15 @@ Usually `OpProtoMaker` and `Op`'s type definitions are written in `.cc` files, w auto* Y = context.Input("Y"); auto* Z = context.Output("Out"); Z->mutable_data(context.GetPlace()); - auto* device_context = - const_cast(context.device_context_); - math::matmul(*X, false, *Y, false, 1, Z, 0, device_context); + auto& device_context = context.template device_context(); + math::matmul(*X, false, *Y, false, 1, Z, 0, device_context); } }; ``` -Note that **different devices (CPU, GPU)share an Op definition; whether or not they share the same `OpKernel` depends on whether `Compute` calls functions that support both devices.** +Note that **different devices (CPU, CUDA)share an Op definition; whether or not they share the same `OpKernel` depends on whether `Compute` calls functions that support both devices.** -`MulOp`'s CPU and GPU share the same `Kernel`. A non-sharing `OpKernel` example can be seen in [`OnehotCrossEntropyOpKernel`](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/operators/cross_entropy_op.h#L43). +`MulOp`'s CPU and CUDA share the same `Kernel`. A non-sharing `OpKernel` example can be seen in [`OnehotCrossEntropyOpKernel`](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/operators/cross_entropy_op.h#L43). To ease the writing of `OpKernel` compute, and for reusing code cross-device, [`Eigen-unsupported Tensor`](https://bitbucket.org/eigen/eigen/src/default/unsupported/Eigen/CXX11/src/Tensor/README.md?fileviewer=file-view-default) module is used to implement `Compute` interface. To learn about how the Eigen library is used in PaddlePaddle, please see [usage document](https://github.com/PaddlePaddle/Paddle/blob/develop/doc/howto/dev/use_eigen_cn.md). @@ -196,9 +195,9 @@ The definition of its corresponding backward operator, if applicable, is similar ```cpp namespace ops = paddle::operators; REGISTER_OP(mul, ops::MulOp, ops::MulOpMaker, mul_grad, ops::MulOpGrad); - REGISTER_OP_CPU_KERNEL(mul, ops::MulKernel); + REGISTER_OP_CPU_KERNEL(mul, ops::MulKernel); REGISTER_OP_CPU_KERNEL(mul_grad, - ops::MulGradKernel); + ops::MulGradKernel); ``` In that code block, @@ -208,17 +207,17 @@ The definition of its corresponding backward operator, if applicable, is similar - `REGISTER_OP_CPU_KERNEL` registers `ops::MulKernel` class and specialized template types `paddle::platform::CPUPlace` and `float`, which also registers `ops::MulGradKernel`. -- Registering GPU Kernel in `.cu` files - - Note that if GPU Kernel is implemented using the `Eigen unsupported` module, then on top of `.cu`, a macro definition `#define EIGEN_USE_GPU` is needed, such as +- Registering CUDA Kernel in `.cu` files + - Note that if CUDA Kernel is implemented using the `Eigen unsupported` module, then on top of `.cu`, a macro definition `#define EIGEN_USE_GPU` is needed, such as ```cpp // if use Eigen unsupported module before include head files #define EIGEN_USE_GPU namespace ops = paddle::operators; - REGISTER_OP_GPU_KERNEL(mul, ops::MulKernel); - REGISTER_OP_GPU_KERNEL(mul_grad, - ops::MulGradKernel); + REGISTER_OP_CUDA_KERNEL(mul, ops::MulKernel); + REGISTER_OP_CUDA_KERNEL(mul_grad, + ops::MulGradKernel); ``` ### 5. Compilation @@ -253,62 +252,50 @@ A forward operator unit test inherits `unittest.TestCase` and defines metaclass 2. Generating random input data. -3. Implementing the same computation logic in a Python script: +3. Implementing the same computation logic in a Python script. + +4. Call check gradient function to check the backward operator. ```python import unittest import numpy as np - from gradient_checker import GradientChecker, create_op - from op_test_util import OpTestMeta + from op_test import OpTest - class TestMulOp(unittest.TestCase): - __metaclass__ = OpTestMeta + class TestMulOp(OpTest): def setUp(self): - self.type = "mul" + self.op_type = "mul" self.inputs = { 'X': np.random.random((32, 84)).astype("float32"), 'Y': np.random.random((84, 100)).astype("float32") } self.outputs = {'Out': np.dot(self.inputs['X'], self.inputs['Y'])} - ``` -Get its output, and compare it with the forward operator's own output. - -The code above first loads required packages. In addition, we have - -- `self.type = "mul" ` defines the type that is identical to what the operator's registered type. -- `self.inputs` defines input, with type `numpy.array` and initializes it. -- `self.outputs` defines output and completes the same operator computation in the Python script, and returns its result from the Python script. -### Testing Backward Operators + def test_check_output(self): + self.check_output() + + def test_check_grad_normal(self): + self.check_grad(['X', 'Y'], 'Out', max_relative_error=0.5) -A backward operator unit test inherits `GradientChecker`, which inherits `unittest.TestCase`. As a result, **a backward operator unit test needs to be have the prefix `test_`**. + def test_check_grad_ingore_x(self): + self.check_grad( + ['Y'], 'Out', max_relative_error=0.5, no_grad_set=set("X")) -```python -class TestMulGradOp(GradientChecker): - def setUp(self): - self.op = create_op("mul") - self.inputs = { - 'X': np.random.random((32, 84)).astype("float32"), - 'Y': np.random.random((84, 100)).astype("float32") - } + def test_check_grad_ingore_y(self): + self.check_grad( + ['X'], 'Out', max_relative_error=0.5, no_grad_set=set('Y')) - def test_check_grad_normal(self): - # mul op will enlarge the relative error - self.check_grad(['X', 'Y'], 'Out', max_relative_error=0.5) + ``` +Get its output, and compare it with the forward operator's own output. - def test_check_grad_ingore_x(self): - self.check_grad( - ['Y'], 'Out', max_relative_error=0.5, no_grad_set=set("X")) +The code above first loads required packages. In addition, we have - def test_check_grad_ingore_y(self): - self.check_grad( - ['X'], 'Out', max_relative_error=0.5, no_grad_set=set('Y')) -``` +- `self.op_type = "mul" ` defines the type that is identical to what the operator's registered type. +- `self.inputs` defines input, with type `numpy.array` and initializes it. +- `self.outputs` defines output and completes the same operator computation in the Python script, and returns its result from the Python script. -Some key points in the code above include: +Some key points in checking gradient above include: -- `create_op("mul")` creates the backward operator's corresponding forward operator. - `test_normal` calls `check_grad` to validate scaling tests' correctness and stability through numeric methods. - The first variable `["X", "Y"]` appoints `X` and `Y` to be scale tested. - The second variable `"Out"` points to the network's final output target `Out`. @@ -338,5 +325,5 @@ ctest -R test_mul_op - Every `*_op.h` (if applicable), `*_op.cc`, and `*_op.cu` (if applicable) must be created for a unique Op. Compiling will fail if multiple operators are included per file. - The type with which an operator is registered needs to be identical to the Op's name. Registering `REGISTER_OP(B, ...)` in `A_op.cc` will cause unit testing failures. -- If the operator does not implement a GPU kernel, please refrain from creating an empty `*_op.cu` file, or else unit tests will fail. +- If the operator does not implement a CUDA kernel, please refrain from creating an empty `*_op.cu` file, or else unit tests will fail. - If multiple operators rely on some shared methods, a file NOT named `*_op.*` can be created to store them, such as `gather.h`. From d918ccded35d972eba42b07767972bc4c2dd0921 Mon Sep 17 00:00:00 2001 From: Yu Yang Date: Tue, 12 Dec 2017 15:22:52 +0800 Subject: [PATCH 064/193] Add fill_op (#6477) * Add fill_op * Fix bug --- paddle/operators/fill_op.cc | 111 +++++++++++++++++++ python/paddle/v2/fluid/tests/test_fill_op.py | 24 ++++ 2 files changed, 135 insertions(+) create mode 100644 paddle/operators/fill_op.cc create mode 100644 python/paddle/v2/fluid/tests/test_fill_op.py diff --git a/paddle/operators/fill_op.cc b/paddle/operators/fill_op.cc new file mode 100644 index 0000000000..382e161c5d --- /dev/null +++ b/paddle/operators/fill_op.cc @@ -0,0 +1,111 @@ +/* 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/framework/data_type.h" +#include "paddle/framework/op_registry.h" +#include "paddle/operators/detail/safe_ref.h" + +namespace paddle { +namespace operators { + +struct FillOpVisitor { + FillOpVisitor(framework::LoDTensor *tensor, const std::vector &value) + : tensor_(tensor), value_(value) {} + + template + void operator()() const { + platform::CPUPlace cpu; + auto *data = tensor_->mutable_data(cpu); + std::transform(value_.data(), value_.data() + tensor_->numel(), data, + [](float dat) { return static_cast(dat); }); + } + + framework::LoDTensor *tensor_; + const std::vector &value_; +}; + +class FillOp : public framework::OperatorBase { + public: + FillOp(const std::string &type, const framework::VariableNameMap &inputs, + const framework::VariableNameMap &outputs, + const framework::AttributeMap &attrs) + : OperatorBase(type, inputs, outputs, attrs) {} + void Run(const framework::Scope &scope, + const platform::DeviceContext &dev_ctx) const override { + auto &out = + detail::Ref(detail::Ref(scope.FindVar(Output("Out")), + "Cannot find variable %s", Output("Out")) + .GetMutable()); + out.Resize(framework::make_ddim(Attr>("shape"))); + auto dtype = static_cast(Attr("dtype")); + platform::CPUPlace cpu; + auto force_cpu = Attr("force_cpu"); + out.mutable_data(force_cpu ? cpu : dev_ctx.GetPlace(), + framework::ToTypeIndex(dtype)); + + framework::LoDTensor tensor; + + if (force_cpu || platform::is_cpu_place(dev_ctx.GetPlace())) { + tensor.ShareDataWith(out); + } else { + // Always make tensor in CPU memory. + tensor.Resize(out.dims()); + tensor.mutable_data(cpu, framework::ToTypeIndex(dtype)); + } + + framework::VisitDataType( + dtype, FillOpVisitor(&tensor, Attr>("value"))); + + if (!force_cpu && platform::is_gpu_place(dev_ctx.GetPlace())) { + // Copy tensor to out + framework::CopyFrom(tensor, dev_ctx.GetPlace(), dev_ctx, &out); + } + } +}; + +class FillOpMaker : public framework::OpProtoAndCheckerMaker { + public: + FillOpMaker(framework::OpProto *proto, framework::OpAttrChecker *op_checker) + : OpProtoAndCheckerMaker(proto, op_checker) { + AddComment(R"DOC(Fill operator + +Fill an tensor with `value` and `shape`. The type of the tensor is specify by +`dtype`. +)DOC"); + AddOutput("Out", "(LoDTensor) The output tensor."); + AddAttr>( + "value", "The float values of tensor, which are flatten in row major"); + AddAttr>("shape", "The shape of output tensor"); + AddAttr("dtype", "The data type of output tensor, Default is float") + .SetDefault(framework::DataType::FP32); + AddAttr("force_cpu", + "Whether the output tensor must be at CPU memory or not. " + "Default is false.") + .SetDefault(false); + } +}; + +class FillOpInferShape : public framework::InferShapeBase { + public: + void operator()(framework::InferShapeContext *context) const override { + context->SetOutputDim( + "Out", + framework::make_ddim(context->Attrs().Get>("shape"))); + } +}; + +} // namespace operators +} // namespace paddle +namespace ops = paddle::operators; +REGISTER_OPERATOR(fill, ops::FillOp, ops::FillOpInferShape, ops::FillOpMaker); diff --git a/python/paddle/v2/fluid/tests/test_fill_op.py b/python/paddle/v2/fluid/tests/test_fill_op.py new file mode 100644 index 0000000000..88337598c8 --- /dev/null +++ b/python/paddle/v2/fluid/tests/test_fill_op.py @@ -0,0 +1,24 @@ +import unittest +import numpy as np +from op_test import OpTest +import paddle.v2.fluid.core as core + + +class TestFillOp(OpTest): + def setUp(self): + self.op_type = "fill" + val = np.random.random(size=[100, 200]) + self.inputs = {} + self.attrs = { + 'value': val.flatten().tolist(), + 'shape': [100, 200], + 'dtype': int(core.DataType.FP64) + } + self.outputs = {'Out': val.astype('float64')} + + def test_check_output(self): + self.check_output() + + +if __name__ == '__main__': + unittest.main() From 9a89b041ba12ab8bcf9e36e218486b224eae1d33 Mon Sep 17 00:00:00 2001 From: guosheng Date: Mon, 11 Dec 2017 23:23:46 +0800 Subject: [PATCH 065/193] Add ChunkEvaluator for multi-batches --- paddle/operators/chunk_eval_op.cc | 18 +++++ paddle/operators/chunk_eval_op.h | 42 +++++++---- python/paddle/v2/fluid/evaluator.py | 73 ++++++++++++++++++- python/paddle/v2/fluid/layers.py | 14 +++- .../tests/book/test_label_semantic_roles.py | 12 +-- .../v2/fluid/tests/test_chunk_eval_op.py | 8 +- 6 files changed, 143 insertions(+), 24 deletions(-) diff --git a/paddle/operators/chunk_eval_op.cc b/paddle/operators/chunk_eval_op.cc index 94127ab33e..ff2a08ccac 100644 --- a/paddle/operators/chunk_eval_op.cc +++ b/paddle/operators/chunk_eval_op.cc @@ -32,6 +32,13 @@ class ChunkEvalOp : public framework::OperatorWithKernel { "Output(Recall) of ChunkEvalOp should not be null."); PADDLE_ENFORCE(ctx->HasOutput("F1-Score"), "Output(F1-Score) of ChunkEvalOp should not be null."); + PADDLE_ENFORCE(ctx->HasOutput("NumInferChunks"), + "Output(NumInferChunks) of ChunkEvalOp should not be null."); + PADDLE_ENFORCE(ctx->HasOutput("NumLabelChunks"), + "Output(NumLabelChunks) of ChunkEvalOp should not be null."); + PADDLE_ENFORCE( + ctx->HasOutput("NumCorrectChunks"), + "Output(NumCorrectChunks) of ChunkEvalOp should not be null."); auto inference_dim = ctx->GetInputDim("Inference"); auto label_dim = ctx->GetInputDim("Label"); @@ -42,6 +49,9 @@ class ChunkEvalOp : public framework::OperatorWithKernel { ctx->SetOutputDim("Precision", {1}); ctx->SetOutputDim("Recall", {1}); ctx->SetOutputDim("F1-Score", {1}); + ctx->SetOutputDim("NumInferChunks", {1}); + ctx->SetOutputDim("NumLabelChunks", {1}); + ctx->SetOutputDim("NumCorrectChunks", {1}); } protected: @@ -70,6 +80,14 @@ class ChunkEvalOpMaker : public framework::OpProtoAndCheckerMaker { "sensitivity) of chunks on the given mini-batch."); AddOutput("F1-Score", "(float). The evaluated F1-Score on the given mini-batch."); + AddOutput( + "NumInferChunks", + "(int). The number of chunks in Inference on the given mini-batch."); + AddOutput("NumLabelChunks", + "(int). The number of chunks in Label on the given mini-batch."); + AddOutput("NumCorrectChunks", + "(int). The number of chunks both in Inference and Label on the " + "given mini-batch."); AddAttr("num_chunk_types", "(int). The number of chunk type. See below for details."); AddAttr( diff --git a/paddle/operators/chunk_eval_op.h b/paddle/operators/chunk_eval_op.h index dd88f2553b..5d703333c7 100644 --- a/paddle/operators/chunk_eval_op.h +++ b/paddle/operators/chunk_eval_op.h @@ -111,9 +111,7 @@ class ChunkEvalKernel : public framework::OpKernel { std::vector label_segments; std::vector output_segments; std::set excluded_chunk_types; - int64_t num_output_segments = 0; - int64_t num_label_segments = 0; - int64_t num_correct = 0; + if (context.Attr("chunk_scheme") == "IOB") { num_tag_types = 2; tag_begin = 0; @@ -151,12 +149,24 @@ class ChunkEvalKernel : public framework::OpKernel { auto* precision = context.Output("Precision"); auto* recall = context.Output("Recall"); auto* f1 = context.Output("F1-Score"); + auto* num_infer_chunks = context.Output("NumInferChunks"); + auto* num_label_chunks = context.Output("NumLabelChunks"); + auto* num_correct_chunks = context.Output("NumCorrectChunks"); const int64_t* inference_data = inference->data(); const int64_t* label_data = label->data(); T* precision_data = precision->mutable_data(context.GetPlace()); T* racall_data = recall->mutable_data(context.GetPlace()); T* f1_data = f1->mutable_data(context.GetPlace()); + int64_t* num_infer_chunks_data = + num_infer_chunks->mutable_data(context.GetPlace()); + int64_t* num_label_chunks_data = + num_label_chunks->mutable_data(context.GetPlace()); + int64_t* num_correct_chunks_data = + num_correct_chunks->mutable_data(context.GetPlace()); + *num_infer_chunks_data = 0; + *num_label_chunks_data = 0; + *num_correct_chunks_data = 0; auto lod = label->lod(); PADDLE_ENFORCE_EQ(lod.size(), 1UL, "Only support one level sequence now."); @@ -166,17 +176,23 @@ class ChunkEvalKernel : public framework::OpKernel { for (int i = 0; i < num_sequences; ++i) { int seq_length = lod[0][i + 1] - lod[0][i]; EvalOneSeq(inference_data + lod[0][i], label_data + lod[0][i], seq_length, - output_segments, label_segments, num_output_segments, - num_label_segments, num_correct, num_chunk_types, - num_tag_types, other_chunk_type, tag_begin, tag_inside, - tag_end, tag_single, excluded_chunk_types); + output_segments, label_segments, *num_infer_chunks_data, + *num_label_chunks_data, *num_correct_chunks_data, + num_chunk_types, num_tag_types, other_chunk_type, tag_begin, + tag_inside, tag_end, tag_single, excluded_chunk_types); } - *precision_data = !num_output_segments ? 0 : static_cast(num_correct) / - num_output_segments; - *racall_data = !num_label_segments ? 0 : static_cast(num_correct) / - num_label_segments; - *f1_data = !num_correct ? 0 : 2 * (*precision_data) * (*racall_data) / - ((*precision_data) + (*racall_data)); + *precision_data = !(*num_infer_chunks_data) + ? 0 + : static_cast(*num_correct_chunks_data) / + (*num_infer_chunks_data); + *racall_data = !(*num_label_chunks_data) + ? 0 + : static_cast(*num_correct_chunks_data) / + (*num_label_chunks_data); + *f1_data = !(*num_correct_chunks_data) + ? 0 + : 2 * (*precision_data) * (*racall_data) / + ((*precision_data) + (*racall_data)); } void EvalOneSeq(const int64_t* output, const int64_t* label, int length, diff --git a/python/paddle/v2/fluid/evaluator.py b/python/paddle/v2/fluid/evaluator.py index 137c573622..2d23ff0a16 100644 --- a/python/paddle/v2/fluid/evaluator.py +++ b/python/paddle/v2/fluid/evaluator.py @@ -4,7 +4,7 @@ import layers from framework import Program, unique_name, Variable from layer_helper import LayerHelper -__all__ = ['Accuracy'] +__all__ = ['Accuracy', 'ChunkEvaluator'] def _clone_var_(block, var): @@ -132,3 +132,74 @@ class Accuracy(Evaluator): correct = layers.cast(correct, dtype='float32', **kwargs) out = layers.elementwise_div(x=correct, y=total, **kwargs) return np.array(executor.run(eval_program, fetch_list=[out])[0]) + + +class ChunkEvaluator(Evaluator): + """ + Accumulate counter numbers output by chunk_eval from mini-batches and + compute the precision recall and F1-score using the accumulated counter + numbers. + """ + + def __init__(self, + input, + label, + chunk_scheme, + num_chunk_types, + excluded_chunk_types=None, + **kwargs): + super(ChunkEvaluator, self).__init__("chunk_eval", **kwargs) + main_program = self.helper.main_program + if main_program.current_block().idx != 0: + raise ValueError("You can only invoke Evaluator in root block") + + self.num_infer_chunks = self.create_state( + dtype='int64', shape=[1], suffix='num_infer_chunks') + self.num_label_chunks = self.create_state( + dtype='int64', shape=[1], suffix='num_label_chunks') + self.num_correct_chunks = self.create_state( + dtype='int64', shape=[1], suffix='num_correct_chunks') + kwargs = {'main_program': main_program} + precision, recall, f1_score, num_infer_chunks, num_label_chunks, num_correct_chunks = layers.chunk_eval( + input=input, + label=label, + chunk_scheme=chunk_scheme, + num_chunk_types=num_chunk_types, + excluded_chunk_types=excluded_chunk_types, + **kwargs) + layers.sums( + input=[self.num_infer_chunks, num_infer_chunks], + out=self.num_infer_chunks, + **kwargs) + layers.sums( + input=[self.num_label_chunks, num_label_chunks], + out=self.num_label_chunks, + **kwargs) + layers.sums( + input=[self.num_correct_chunks, num_correct_chunks], + out=self.num_correct_chunks, + **kwargs) + + self.metrics.extend([precision, recall, f1_score]) + + def eval(self, executor, eval_program=None): + if eval_program is None: + eval_program = Program() + block = eval_program.current_block() + kwargs = {'main_program': eval_program} + num_infer_chunks, num_label_chunks, num_correct_chunks = executor.run( + eval_program, + fetch_list=[_clone_var_(block, state) for state in self.states]) + num_infer_chunks = num_infer_chunks[0] + num_label_chunks = num_label_chunks[0] + num_correct_chunks = num_correct_chunks[0] + precision = float( + num_correct_chunks) / num_infer_chunks if num_infer_chunks else 0 + recall = float( + num_correct_chunks) / num_label_chunks if num_label_chunks else 0 + f1_score = float(2 * precision * recall) / ( + precision + recall) if num_correct_chunks else 0 + return np.array( + [precision], dtype='float32'), np.array( + [recall], dtype='float32'), np.array( + [f1_score], dtype='float32') diff --git a/python/paddle/v2/fluid/layers.py b/python/paddle/v2/fluid/layers.py index 98a04ea9c2..809534884b 100644 --- a/python/paddle/v2/fluid/layers.py +++ b/python/paddle/v2/fluid/layers.py @@ -640,8 +640,8 @@ def chunk_eval(input, excluded_chunk_types=None, **kwargs): """ - This function computes the accuracy using the input and label. - The output is the top_k inputs and their indices. + This function computes and outputs the precision, recall and + F1-score of chunk detection. """ helper = LayerHelper("chunk_eval", **kwargs) @@ -649,6 +649,9 @@ def chunk_eval(input, precision = helper.create_tmp_variable(dtype="float32") recall = helper.create_tmp_variable(dtype="float32") f1_score = helper.create_tmp_variable(dtype="float32") + num_infer_chunks = helper.create_tmp_variable(dtype="int64") + num_label_chunks = helper.create_tmp_variable(dtype="int64") + num_correct_chunks = helper.create_tmp_variable(dtype="int64") helper.append_op( type="chunk_eval", @@ -657,14 +660,17 @@ def chunk_eval(input, outputs={ "Precision": [precision], "Recall": [recall], - "F1-Score": [f1_score] + "F1-Score": [f1_score], + "NumInferChunks": [num_infer_chunks], + "NumLabelChunks": [num_label_chunks], + "NumCorrectChunks": [num_correct_chunks] }, attrs={ "num_chunk_types": num_chunk_types, 'chunk_scheme': chunk_scheme, 'excluded_chunk_types': excluded_chunk_types or [] }) - return precision, recall, f1_score + return precision, recall, f1_score, num_infer_chunks, num_label_chunks, num_correct_chunks def sequence_conv(input, diff --git a/python/paddle/v2/fluid/tests/book/test_label_semantic_roles.py b/python/paddle/v2/fluid/tests/book/test_label_semantic_roles.py index d2693b602e..caa51b5df4 100644 --- a/python/paddle/v2/fluid/tests/book/test_label_semantic_roles.py +++ b/python/paddle/v2/fluid/tests/book/test_label_semantic_roles.py @@ -150,7 +150,7 @@ def main(): crf_decode = fluid.layers.crf_decoding( input=feature_out, param_attr=fluid.ParamAttr(name='crfw')) - precision, recall, f1_score = fluid.layers.chunk_eval( + chunk_evaluator = fluid.evaluator.ChunkEvaluator( input=crf_decode, label=target, chunk_scheme="IOB", @@ -176,14 +176,16 @@ def main(): batch_id = 0 for pass_id in xrange(PASS_NUM): + chunk_evaluator.reset(exe) for data in train_data(): outs = exe.run(fluid.default_main_program(), feed=feeder.feed(data), - fetch_list=[avg_cost, precision, recall, f1_score]) + fetch_list=[avg_cost] + chunk_evaluator.metrics) + precision, recall, f1_score = chunk_evaluator.eval(exe) avg_cost_val = np.array(outs[0]) - precision_val = np.array(outs[1]) - recall_val = np.array(outs[2]) - f1_score_val = np.array(outs[3]) + precision_val = np.array(precision) + recall_val = np.array(recall) + f1_score_val = np.array(f1_score) if batch_id % 10 == 0: print("avg_cost=" + str(avg_cost_val)) diff --git a/python/paddle/v2/fluid/tests/test_chunk_eval_op.py b/python/paddle/v2/fluid/tests/test_chunk_eval_op.py index 819e65a653..53bf6f815b 100644 --- a/python/paddle/v2/fluid/tests/test_chunk_eval_op.py +++ b/python/paddle/v2/fluid/tests/test_chunk_eval_op.py @@ -147,7 +147,13 @@ class TestChunkEvalOp(OpTest): 'Recall': np.asarray( [recall], dtype='float32'), 'F1-Score': np.asarray( - [f1], dtype='float32') + [f1], dtype='float32'), + 'NumInferChunks': np.asarray( + [self.num_infer_chunks], dtype='int64'), + 'NumLabelChunks': np.asarray( + [self.num_label_chunks], dtype='int64'), + 'NumCorrectChunks': np.asarray( + [self.num_correct_chunks], dtype='int64') } def setUp(self): From 8f7d0b18145c8310fb36ad017aa0f1d4bce98c65 Mon Sep 17 00:00:00 2001 From: fengjiayi Date: Tue, 12 Dec 2017 15:54:38 +0800 Subject: [PATCH 066/193] add param_attr for nets (#6509) --- python/paddle/v2/fluid/layers.py | 6 ++++-- python/paddle/v2/fluid/nets.py | 7 +++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/python/paddle/v2/fluid/layers.py b/python/paddle/v2/fluid/layers.py index fd8a2ed18c..1f45487902 100644 --- a/python/paddle/v2/fluid/layers.py +++ b/python/paddle/v2/fluid/layers.py @@ -1732,8 +1732,10 @@ def conv2d_transpose(input, h_in = input.shape[2] w_in = input.shape[3] - filter_size_h = output_size[0] - (h_in - 1) * stride[0] + 2 * padding[0] - filter_size_w = output_size[1] - (w_in - 1) * stride[1] + 2 * padding[1] + filter_size_h = output_size[0] - \ + (h_in - 1) * stride[0] + 2 * padding[0] + filter_size_w = output_size[1] - \ + (w_in - 1) * stride[1] + 2 * padding[1] filter_size = [filter_size_h, filter_size_w] elif isinstance(filter_size, int): filter_size = [filter_size, filter_size] diff --git a/python/paddle/v2/fluid/nets.py b/python/paddle/v2/fluid/nets.py index 05728ad75a..7ef524318e 100644 --- a/python/paddle/v2/fluid/nets.py +++ b/python/paddle/v2/fluid/nets.py @@ -9,6 +9,7 @@ def simple_img_conv_pool(input, pool_size, pool_stride, act, + param_attr=None, pool_type='max', main_program=None, startup_program=None): @@ -16,6 +17,7 @@ def simple_img_conv_pool(input, input=input, num_filters=num_filters, filter_size=filter_size, + param_attr=param_attr, act=act, main_program=main_program, startup_program=startup_program) @@ -36,6 +38,7 @@ def img_conv_group(input, conv_padding=1, conv_filter_size=3, conv_act=None, + param_attr=None, conv_with_batchnorm=False, conv_batchnorm_drop_rate=None, pool_stride=1, @@ -57,6 +60,7 @@ def img_conv_group(input, conv_padding = __extend_list__(conv_padding) conv_filter_size = __extend_list__(conv_filter_size) + param_attr = __extend_list__(param_attr) conv_with_batchnorm = __extend_list__(conv_with_batchnorm) conv_batchnorm_drop_rate = __extend_list__(conv_batchnorm_drop_rate) @@ -70,6 +74,7 @@ def img_conv_group(input, num_filters=conv_num_filter[i], filter_size=conv_filter_size[i], padding=conv_padding[i], + param_attr=param_attr[i], act=local_conv_act, main_program=main_program, startup_program=startup_program) @@ -101,6 +106,7 @@ def img_conv_group(input, def sequence_conv_pool(input, num_filters, filter_size, + param_attr=None, act="sigmoid", pool_type="max", main_program=None, @@ -109,6 +115,7 @@ def sequence_conv_pool(input, input=input, num_filters=num_filters, filter_size=filter_size, + param_attr=param_attr, act=act, main_program=main_program, startup_program=startup_program) From e5dcefc4d3bf666627dac6047f71b99415c23a5a Mon Sep 17 00:00:00 2001 From: Luo Tao Date: Tue, 12 Dec 2017 18:28:56 +0800 Subject: [PATCH 067/193] remove ATLAS library --- README.md | 2 +- cmake/cblas.cmake | 38 +----------------------- paddle/math/tests/test_matrixCompare.cpp | 2 +- 3 files changed, 3 insertions(+), 39 deletions(-) diff --git a/README.md b/README.md index db0fbd88b2..bbb2d49858 100644 --- a/README.md +++ b/README.md @@ -36,7 +36,7 @@ Please refer to our [release announcement](https://github.com/PaddlePaddle/Paddl examples: - Optimized math operations through SSE/AVX intrinsics, BLAS libraries - (e.g. MKL, ATLAS, cuBLAS) or customized CPU/GPU kernels. + (e.g. MKL, OpenBLAS, cuBLAS) or customized CPU/GPU kernels. - Highly optimized recurrent networks which can handle **variable-length** sequence without padding. - Optimized local and distributed training for models with high dimensional diff --git a/cmake/cblas.cmake b/cmake/cblas.cmake index 13294c0548..6320b17520 100644 --- a/cmake/cblas.cmake +++ b/cmake/cblas.cmake @@ -3,7 +3,7 @@ # It will search MKLML, atlas, OpenBlas, reference-cblas in order. # # If any cblas implementation found, the following variable will be set. -# CBLAS_PROVIDER # one of MKLML, ATLAS, OPENBLAS, REFERENCE +# CBLAS_PROVIDER # one of MKLML, OPENBLAS, REFERENCE # CBLAS_INC_DIR # the include directory for cblas. # CBLAS_LIBS # a list of libraries should be linked by paddle. # # Each library should be full path to object file. @@ -25,42 +25,6 @@ if(WITH_MKLML AND MKLML_INC_DIR AND MKLML_LIB) return() endif() -## Then find atlas. -set(ATLAS_ROOT $ENV{ATLAS_ROOT} CACHE PATH "Folder contains Atlas") -set(ATLAS_INCLUDE_SEARCH_PATHS - ${ATLAS_ROOT}/include - /usr/include - /usr/include/atlas) -set(ATLAS_LIB_SEARCH_PATHS - ${ATLAS_ROOT}/lib - /usr/lib - /usr/lib/blas/atlas - /usr/lib/atlas - /usr/lib/atlas-base # special for ubuntu 14.04. - ) -find_path(ATLAS_INC_DIR NAMES cblas.h - PATHS ${ATLAS_INCLUDE_SEARCH_PATHS}) -find_path(ATLAS_CLAPACK_INC_DIR NAMES clapack.h - PATHS ${ATLAS_INCLUDE_SEARCH_PATHS}) -find_library(ATLAS_CBLAS_LIB NAMES cblas libcblas.so.3 - PATHS ${ATLAS_LIB_SEARCH_PATHS}) -find_library(ATLAS_CLAPACK_LIB NAMES lapack_atlas liblapack_atlas.so.3 - PATHS ${ATLAS_LIB_SEARCH_PATHS}) - -if(ATLAS_CLAPACK_INC_DIR AND ATLAS_INC_DIR AND ATLAS_CBLAS_LIB AND ATLAS_CLAPACK_LIB) - set(CBLAS_FOUND ON) - set(CBLAS_PROVIDER ATLAS) - set(CBLAS_INC_DIR ${ATLAS_INC_DIR} ${ATLAS_CLAPACK_INC_DIR}) - set(CBLAS_LIBRARIES ${ATLAS_CLAPACK_LIB} ${ATLAS_CBLAS_LIB}) - - add_definitions(-DPADDLE_USE_ATLAS) - add_definitions(-DLAPACK_FOUND) - - message(STATUS "Found ATLAS (include: ${ATLAS_INC_DIR}, library: ${CBLAS_LIBRARIES})") - message(STATUS "Found lapack in ATLAS (include: ${ATLAS_CLAPACK_INC_DIR})") - return() -endif() - ## Then find openblas. set(OPENBLAS_ROOT $ENV{OPENBLAS_ROOT} CACHE PATH "Folder contains Openblas") set(OPENBLAS_INCLUDE_SEARCH_PATHS diff --git a/paddle/math/tests/test_matrixCompare.cpp b/paddle/math/tests/test_matrixCompare.cpp index 7e5a1db44a..afb8d9d599 100644 --- a/paddle/math/tests/test_matrixCompare.cpp +++ b/paddle/math/tests/test_matrixCompare.cpp @@ -244,7 +244,7 @@ TEST(Matrix, unary) { LOG(WARNING) << "This version of PaddlePaddle was not built with LAPACK" << "support so we cannot test matrix inverse. To test " << "matrix inverse, please install LAPACKE " - << "and MKL/Openblas/ATLAS, and re-build PaddlePaddle."; + << "and MKL/Openblas, and re-build PaddlePaddle."; #endif } } From 6ecf08b17395944febedd9867c48000a9d7a9f9f Mon Sep 17 00:00:00 2001 From: guosheng Date: Tue, 12 Dec 2017 19:39:07 +0800 Subject: [PATCH 068/193] Enhance init_from_tar to support indicating parameters excluded from the initialized model --- python/paddle/v2/parameters.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/python/paddle/v2/parameters.py b/python/paddle/v2/parameters.py index bd97dc1199..0dd7d38d8e 100644 --- a/python/paddle/v2/parameters.py +++ b/python/paddle/v2/parameters.py @@ -383,19 +383,21 @@ class Parameters(object): params.deserialize(param_name, f) return params - def init_from_tar(self, f): + def init_from_tar(self, f, exclude_params=[]): """ Different from `from_tar`, this interface can be used to init partial network parameters from another saved model. :param f: the initialized model file. :type f: tar file + :param exclude_params: the names of parameters that shouldn't be initialized from the model file. + :type exclude_params: list of strings :return: Nothing. """ tar_param = Parameters.from_tar(f) for pname in tar_param.names(): - if pname in self.names(): + if pname in self.names() and pname not in exclude_params: self.set(pname, tar_param.get(pname)) From 63ce906b088c641c3bf33a2b8aa6324a39310ffe Mon Sep 17 00:00:00 2001 From: guosheng Date: Tue, 12 Dec 2017 20:33:44 +0800 Subject: [PATCH 069/193] Refine ChunkEvalutor by following comments --- paddle/operators/chunk_eval_op.cc | 16 +++++++------ .../tests/book/test_label_semantic_roles.py | 23 +++++++++---------- 2 files changed, 20 insertions(+), 19 deletions(-) diff --git a/paddle/operators/chunk_eval_op.cc b/paddle/operators/chunk_eval_op.cc index ff2a08ccac..894f355deb 100644 --- a/paddle/operators/chunk_eval_op.cc +++ b/paddle/operators/chunk_eval_op.cc @@ -80,14 +80,16 @@ class ChunkEvalOpMaker : public framework::OpProtoAndCheckerMaker { "sensitivity) of chunks on the given mini-batch."); AddOutput("F1-Score", "(float). The evaluated F1-Score on the given mini-batch."); + AddOutput("NumInferChunks", + "(int64_t). The number of chunks in Inference on the given " + "mini-batch."); AddOutput( - "NumInferChunks", - "(int). The number of chunks in Inference on the given mini-batch."); - AddOutput("NumLabelChunks", - "(int). The number of chunks in Label on the given mini-batch."); - AddOutput("NumCorrectChunks", - "(int). The number of chunks both in Inference and Label on the " - "given mini-batch."); + "NumLabelChunks", + "(int64_t). The number of chunks in Label on the given mini-batch."); + AddOutput( + "NumCorrectChunks", + "(int64_t). The number of chunks both in Inference and Label on the " + "given mini-batch."); AddAttr("num_chunk_types", "(int). The number of chunk type. See below for details."); AddAttr( diff --git a/python/paddle/v2/fluid/tests/book/test_label_semantic_roles.py b/python/paddle/v2/fluid/tests/book/test_label_semantic_roles.py index caa51b5df4..c3591a613a 100644 --- a/python/paddle/v2/fluid/tests/book/test_label_semantic_roles.py +++ b/python/paddle/v2/fluid/tests/book/test_label_semantic_roles.py @@ -178,20 +178,19 @@ def main(): for pass_id in xrange(PASS_NUM): chunk_evaluator.reset(exe) for data in train_data(): - outs = exe.run(fluid.default_main_program(), - feed=feeder.feed(data), - fetch_list=[avg_cost] + chunk_evaluator.metrics) - precision, recall, f1_score = chunk_evaluator.eval(exe) - avg_cost_val = np.array(outs[0]) - precision_val = np.array(precision) - recall_val = np.array(recall) - f1_score_val = np.array(f1_score) + cost, precision, recall, f1_score = exe.run( + fluid.default_main_program(), + feed=feeder.feed(data), + fetch_list=[avg_cost] + chunk_evaluator.metrics) + pass_precision, pass_recall, pass_f1_score = chunk_evaluator.eval( + exe) if batch_id % 10 == 0: - print("avg_cost=" + str(avg_cost_val)) - print("precision_val=" + str(precision_val)) - print("recall_val:" + str(recall_val)) - print("f1_score_val:" + str(f1_score_val)) + print("avg_cost:" + str(cost) + " precision:" + str( + precision) + " recall:" + str(recall) + " f1_score:" + str( + f1_score) + " pass_precision:" + str( + pass_precision) + " pass_recall:" + str(pass_recall) + + " pass_f1_score:" + str(pass_f1_score)) # exit early for CI exit(0) From 2cd510641a951fb43e6748f20e76f2c41ab614fb Mon Sep 17 00:00:00 2001 From: wanghaoshuang Date: Tue, 12 Dec 2017 21:02:51 +0800 Subject: [PATCH 070/193] Fix crop op doc --- paddle/operators/crop_op.cc | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/paddle/operators/crop_op.cc b/paddle/operators/crop_op.cc index 7c2a0ac7a7..5c973fbb3c 100644 --- a/paddle/operators/crop_op.cc +++ b/paddle/operators/crop_op.cc @@ -88,7 +88,8 @@ There are two ways to set shape: The input should be a k-D tensor(k > 0 and k < 7). As an example: -Given: +Case 1: +Given X = [[0, 1, 2, 0, 0] [0, 3, 4, 0, 0] @@ -107,6 +108,27 @@ we get: Out = [[1, 2], [3, 4]]. + +Case 2: +Given + + X = [[0, 1, 2, 5, 0] + [0, 3, 4, 6, 0] + [0, 0, 0, 0, 0]], + +and + + offsets = [0, 1], + +and + + Y = [[0, 0, 0] + [0, 0, 0]], + +we get: + + Out = [[1, 2, 5], + [3, 4, 6]]. )DOC"); } }; From 3ef8ec37bb80427ab8abe23384c42a9e9056c87d Mon Sep 17 00:00:00 2001 From: tensor-tang Date: Wed, 13 Dec 2017 10:35:57 +0800 Subject: [PATCH 071/193] fix the new_op doc (#6540) * fix the ending symbol * fix invalid content link --- doc/howto/dev/new_op_cn.md | 36 ++++++++++++++++++++---------------- doc/howto/dev/new_op_en.md | 19 ++++++++++--------- 2 files changed, 30 insertions(+), 25 deletions(-) diff --git a/doc/howto/dev/new_op_cn.md b/doc/howto/dev/new_op_cn.md index 44dbeecbbd..757a5840bc 100644 --- a/doc/howto/dev/new_op_cn.md +++ b/doc/howto/dev/new_op_cn.md @@ -1,17 +1,18 @@ # 如何写新的Operator - [概念简介](#概念简介) - - [实现C++类](#实现C++类) - - [定义ProtoMaker类](#定义ProtoMaker类) - - [定义Operator类](#定义Operator类) - - [定义OpKernel类](#定义OpKernel类) - - [注册Operator](#注册Operator) + - [实现C++类](#实现c类) + - [定义ProtoMaker类](#定义protomaker类) + - [定义Operator类](#定义operator类) + - [定义OpKernel类](#定义opkernel类) + - [注册Operator](#注册operator) - [编译](#编译) - - [绑定Python](#绑定Python) + - [绑定Python](#绑定python) - [实现单元测试](#实现单元测试) - - [前向Operator单测](#前向Operator单测) - - [反向Operator单测](#反向Operator单测) + - [前向Operator单测](#前向operator单测) + - [反向Operator单测](#反向operator单测) - [编译和执行](#编译和执行) + - [注意事项](#注意事项) ## 概念简介 @@ -43,7 +44,7 @@ Kernel实现 | CPU、CUDA共享Kernel实现在`.h`文件中,否则,CPU ## 实现C++类 -### 1. 定义ProtoMaker类 +### 定义ProtoMaker类 矩阵乘法的公式:$Out = X * Y$, 可见该计算由两个输入,一个输出组成。 @@ -100,7 +101,7 @@ The equation is: Out = scale*X - `AddAttr("scale", "...").SetDefault(1.0);` : 增加`scale`系数,作为参数属性,并且设置默认值为1.0。 -### 2. 定义Operator类 +### 定义Operator类 下面的点实现了MulOp的定义: @@ -149,7 +150,7 @@ MulOp(const std::string &type, const framework::VariableNameMap &inputs, 通常`OpProtoMaker`和`Op`类的定义写在`.cc`文件中,和下面将要介绍的注册函数一起放在`.cc`中 -### 3. 定义OpKernel类 +### 定义OpKernel类 `MulKernel`继承自`framework::OpKernel`,带有下面两个模板参数: @@ -177,6 +178,7 @@ MulOp(const std::string &type, const framework::VariableNameMap &inputs, math::matmul(*X, false, *Y, false, 1, Z, 0, device_context); } }; + ``` 需要注意:**不同设备(CPU、CUDA)共享一个Op定义,是否则共享同一个`OpKernel`,取决于`Compute`调用的函数是否支持不同设备。** @@ -188,7 +190,7 @@ MulOp(const std::string &type, const framework::VariableNameMap &inputs, 到此,前向Op实现完成。接下来,需要在`.cc`文件中注册该op和kernel。 反向Op类的定义,反向OpKernel的定义与前向Op类似,这里不再赘述。**但需注意反向Op没有`ProtoMaker`**。 -### 4. 注册Operator +### 注册Operator - 在`.cc`文件中注册前向、反向Op类,注册CPU Kernel。 @@ -220,7 +222,7 @@ MulOp(const std::string &type, const framework::VariableNameMap &inputs, ops::MulGradKernel); ``` -### 5. 编译 +### 编译 运行下面命令可以进行编译: @@ -236,6 +238,7 @@ make mul_op 单测包括对比前向Op不同设备(CPU、CUDA)的实现、对比反向OP不同设备(CPU、CUDA)的实现、反向Op的梯度测试。下面介绍介绍[`MulOp`的单元测试](https://github.com/PaddlePaddle/Paddle/blob/develop/python/paddle/v2/framework/tests/test_mul_op.py)。 +### 前向Operator单测 Op单元测试继承自`OpTest`。各项更加具体的单元测试在`TestMulOp`里完成。测试Operator,需要: @@ -273,8 +276,7 @@ Op单元测试继承自`OpTest`。各项更加具体的单元测试在`TestMulOp def test_check_grad_ingore_y(self): self.check_grad( ['X'], 'Out', max_relative_error=0.5, no_grad_set=set('Y')) - - ``` + ``` 上面的代码首先导入依赖的包,下面是对`setUp`函数中操作的重要变量的详细解释: @@ -282,6 +284,8 @@ Op单元测试继承自`OpTest`。各项更加具体的单元测试在`TestMulOp - `self.inputs` : 定义输入,类型为`numpy.array`,并初始化。 - `self.outputs` : 定义输出,并在Python脚本中完成与operator同样的计算逻辑,返回Python端的计算结果。 +### 反向operator单测 + 而反向测试中: - `test_check_grad_normal`中调用`check_grad`使用数值法检测梯度正确性和稳定性。 - 第一个参数`["X", "Y"]` : 指定对输入变量`X`、`Y`做梯度检测。 @@ -290,7 +294,7 @@ Op单元测试继承自`OpTest`。各项更加具体的单元测试在`TestMulOp - `test_check_grad_ingore_x`和`test_check_grad_ingore_y`分支用来测试只需要计算一个输入梯度的情况。 -### 编译和执行单元测试 +### 编译和执行 `python/paddle/v2/framework/tests` 目录下新增的 `test_*.py` 单元测试会被自动加入工程进行编译。 diff --git a/doc/howto/dev/new_op_en.md b/doc/howto/dev/new_op_en.md index 510233306c..fe86936bc1 100644 --- a/doc/howto/dev/new_op_en.md +++ b/doc/howto/dev/new_op_en.md @@ -1,8 +1,8 @@ # How to write a new operator - [Background](#background) - - [Implementing C++ Types](#implementing-c++-types) - - [Defining ProtoMaker](#defining-protoMaker) + - [Implementing C++ Types](#implementing-c-types) + - [Defining ProtoMaker](#defining-protomaker) - [Defining Operator](#defining-operator) - [Registering Operator](#registering-operator) - [Compilation](#compilation) @@ -41,7 +41,7 @@ Let's take matrix multiplication operator, [MulOp](https://github.com/PaddlePadd ## Implementing C++ Types -### 1. Defining Class ProtoMaker +### Defining ProtoMaker Matrix Multiplication can be written as $Out = X * Y$, meaning that the operation consists of two inputs and pne output. @@ -98,7 +98,7 @@ There are two changes in this example: - `AddAttr("scale", "...").SetDefault(1.0);` adds `scale`constant as an attribute, and sets the default value to 1.0. -### 2. Defining Operator +### Defining Operator The following code defines the interface for MulOp: @@ -147,7 +147,7 @@ MulOp(const std::string &type, const framework::VariableNameMap &inputs, Usually `OpProtoMaker` and `Op`'s type definitions are written in `.cc` files, which also include the registration methods introduced later. -### 3. Defining OpKernel +### Defining OpKernel `MulKernel` inherits `framework::OpKernel`, which includes the following templates: @@ -188,7 +188,7 @@ This concludes the forward implementation of an operator. Next its operation and The definition of its corresponding backward operator, if applicable, is similar to that of an forward operator. **Note that a backward operator does not include a `ProtoMaker`**. -### 4. Registering Operator +### Registering Operator - In `.cc` files, register forward and backward operator classes and the CPU kernel. @@ -220,7 +220,7 @@ The definition of its corresponding backward operator, if applicable, is similar ops::MulGradKernel); ``` -### 5. Compilation +### Compilation Run the following commands to compile. @@ -284,8 +284,7 @@ A forward operator unit test inherits `unittest.TestCase` and defines metaclass def test_check_grad_ingore_y(self): self.check_grad( ['X'], 'Out', max_relative_error=0.5, no_grad_set=set('Y')) - - ``` + ``` Get its output, and compare it with the forward operator's own output. The code above first loads required packages. In addition, we have @@ -294,6 +293,8 @@ The code above first loads required packages. In addition, we have - `self.inputs` defines input, with type `numpy.array` and initializes it. - `self.outputs` defines output and completes the same operator computation in the Python script, and returns its result from the Python script. +### Testing Backward Operators + Some key points in checking gradient above include: - `test_normal` calls `check_grad` to validate scaling tests' correctness and stability through numeric methods. From 8ad36cdb5d2c3a79c82c36cd7c2e79bc2d4cc4bf Mon Sep 17 00:00:00 2001 From: "Yang Yang(Tony)" Date: Wed, 13 Dec 2017 10:41:31 +0800 Subject: [PATCH 072/193] PaddlePaddle Fluid Source Overview (#6485) * first commit * Update read_source.md --- doc/howto/read_source.md | 67 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 doc/howto/read_source.md diff --git a/doc/howto/read_source.md b/doc/howto/read_source.md new file mode 100644 index 0000000000..383acb0c82 --- /dev/null +++ b/doc/howto/read_source.md @@ -0,0 +1,67 @@ +# PaddlePaddle Fluid Source Code Overview + +Examples: https://github.com/PaddlePaddle/Paddle/tree/develop/python/paddle/v2/fluid/tests/book + +Core: https://github.com/PaddlePaddle/Paddle/tree/develop/paddle/framework + +Operator: https://github.com/PaddlePaddle/Paddle/tree/develop/paddle/operators + +Optimizer: https://github.com/PaddlePaddle/Paddle/tree/develop/paddle/optimizer + +Memory: https://github.com/PaddlePaddle/Paddle/tree/develop/paddle/memory + +# Compile Time + +The following **defines** the NN. The definition goes into this [protocol buffer](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/framework/framework.proto). + +```python +x = fluid.layers.data(name='x', shape=[13], dtype='float32') +y = fluid.layers.data(name='y', shape=[1], dtype='float32') + +y_predict = fluid.layers.fc(input=x, size=1, act=None) +cost = fluid.layers.square_error_cost(input=y_predict, label=y) +avg_cost = fluid.layers.mean(x=cost) + +sgd_optimizer = fluid.optimizer.SGD(learning_rate=0.001) +sgd_optimizer.minimize(avg_cost) +``` + +- Variables: `x`, `y`, `y_predict`, `cost` and `avg_cost`. [Python](https://github.com/PaddlePaddle/Paddle/blob/develop/python/paddle/v2/fluid/framework.py#L93) +- Layers: `fluid.layers.data`, `fluid.layers.fc` and `fluid.layers.mean` are layers. [Python](https://github.com/PaddlePaddle/Paddle/blob/develop/python/paddle/v2/fluid/layers.py) + - Every Layer has one or more operators and variables/parameters + - All the operators are defined at [`paddle/operators/`](https://github.com/PaddlePaddle/Paddle/tree/develop/paddle/operators). Other worth-looking files: + - Base class: [`paddle/framework/operator.h`](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/framework/operator.h) + - Operator Registration: [`paddle/framework/op_registry.h`](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/framework/op_registry.h) + - Operator Lookup: [`paddle/framework/op_info.h`](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/framework/op_info.h) +- Optimizer: `fluid.optimizer.SGD`. It does the following + - Add backward operators. [[Python](https://github.com/PaddlePaddle/Paddle/blob/develop/python/paddle/v2/fluid/backward.py), [C++](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/framework/backward.cc)] + - Add optimizer operators. [[Python](https://github.com/PaddlePaddle/Paddle/blob/develop/python/paddle/v2/fluid/optimizer.py), [C++](https://github.com/PaddlePaddle/Paddle/tree/develop/paddle/optimizer)] + +# Run Time + +The following **evaluates** the NN. Instantiates all the variables, operators. + +```python +place = fluid.CPUPlace() +feeder = fluid.DataFeeder(place=place, feed_list=[x, y]) +exe = fluid.Executor(place) + +# Allocate memory. Initialize Parameter. +exe.run(fluid.default_startup_program()) + +# Allocate memory. Do computation. +exe.run(fluid.default_main_program(), + feed=feeder.feed(data), + fetch_list=[avg_cost]) +``` + +- Place: `place`. one of CPU, GPU or FPGA. [C++](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/platform/place.h) + - The device handle are at [paddle/platform/device_context.h](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/platform/device_context.h) +- Executor: `fluid.Executor(place)`. [[Python](https://github.com/PaddlePaddle/Paddle/blob/develop/python/paddle/v2/fluid/executor.py), [C++](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/framework/executor.cc)] + - Feeds the data: `feed=feeder.feed(data)` + - Evaluates all the operators + - Fetches the result: `fetch_list=[avg_cost]` +- Other worth looking files: + - Scope: [paddle/framework/scope.h](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/framework/scope.h). Where all the variables live + - Variable: [paddle/framework/variable.h](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/framework/variable.h). Where all the data (most likely tensors) live + - Tensor: [paddle/framework/tensor.h](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/framework/tensor.h). Where we allocate memory through [`paddle/memory/`](https://github.com/PaddlePaddle/Paddle/tree/develop/paddle/memory) From 697facc92f58e6b65c76db2f1b6efc282b3c57a0 Mon Sep 17 00:00:00 2001 From: dzhwinter Date: Wed, 13 Dec 2017 10:43:20 +0800 Subject: [PATCH 073/193] "add registry interface" (#6449) * "add registry interface" * "move function to registry" * "rename with meaningful name" * "add exposed layers" * "fixed based on comments" * "remove unsed comments" --- python/paddle/v2/fluid/layers.py | 185 ++--------------- python/paddle/v2/fluid/registry.py | 186 ++++++++++++++++++ python/paddle/v2/fluid/tests/test_registry.py | 22 +++ 3 files changed, 221 insertions(+), 172 deletions(-) create mode 100644 python/paddle/v2/fluid/registry.py create mode 100644 python/paddle/v2/fluid/tests/test_registry.py diff --git a/python/paddle/v2/fluid/layers.py b/python/paddle/v2/fluid/layers.py index 1f45487902..9f5a219b20 100644 --- a/python/paddle/v2/fluid/layers.py +++ b/python/paddle/v2/fluid/layers.py @@ -1,12 +1,12 @@ -import core +import contextlib + import proto.framework_pb2 as framework_pb2 +import core from framework import OpProtoHolder, Variable, Program, Operator from initializer import Constant, Normal, Xavier, Initializer from paddle.v2.fluid.layer_helper import LayerHelper, unique_name -import re -import cStringIO +from registry import register_layer from param_attr import ParamAttr -import contextlib __all__ = [ 'fc', 'data', 'cross_entropy', 'conv2d', 'pool2d', 'embedding', 'concat', @@ -14,6 +14,15 @@ __all__ = [ 'batch_norm', 'accuracy', 'split_lod_tensor', 'While' ] +_REGISTER_LAYER_FROM_OPS = [ + 'mean', 'mul', 'elementwise_add', 'elementwise_div', 'dropout', 'reshape', + 'sigmoid', 'scale', 'transpose', 'sigmoid_cross_entropy_with_logits' +] + +for _OP in set(_REGISTER_LAYER_FROM_OPS): + globals()[_OP] = register_layer(_OP) + __all__.append(_OP) + def fc(input, size, @@ -309,174 +318,6 @@ def create_tensor(dtype, name=None, main_program=None, startup_program=None): return helper.create_variable(name=helper.name, dtype=dtype) -def _convert_(name): - """ - Formatting. - - Args: - name: The name/alias - - This function takes in a name and converts it to a standard format of - group1_group2. Where as per the regular expression, group1 can have - alphabets and numbers and group2 has capital alphabets. - - """ - s1 = re.sub('(.)([A-Z][a-z]+)', r'\1_\2', name) - return re.sub('([a-z0-9])([A-Z])', r'\1_\2', s1).lower() - - -def _generate_doc_string_(op_proto): - """ - Generate docstring by OpProto - - Args: - op_proto (framework_pb2.OpProto): a protobuf message typed OpProto - - Returns: - str: the document string - """ - - def _type_to_str_(tp): - return framework_pb2.AttrType.Name(tp) - - if not isinstance(op_proto, framework_pb2.OpProto): - raise TypeError("OpProto should be `framework_pb2.OpProto`") - - buf = cStringIO.StringIO() - buf.write(op_proto.comment) - buf.write('\nArgs:\n') - for each_input in op_proto.inputs: - line_begin = ' {0}: '.format(_convert_(each_input.name)) - buf.write(line_begin) - buf.write(each_input.comment) - buf.write('\n') - buf.write(' ' * len(line_begin)) - buf.write('Duplicable: ') - buf.write(str(each_input.duplicable)) - buf.write(' Optional: ') - buf.write(str(each_input.dispensable)) - buf.write('\n') - - for each_attr in op_proto.attrs: - buf.write(' ') - buf.write(each_attr.name) - buf.write(' (') - buf.write(_type_to_str_(each_attr.type)) - buf.write('): ') - buf.write(each_attr.comment) - buf.write('\n') - - if len(op_proto.outputs) != 0: - buf.write('\nReturns:\n') - buf.write(' ') - for each_opt in op_proto.outputs: - if not each_opt.intermediate: - break - buf.write(each_opt.comment) - - return buf.getvalue() - - -def _create_op_func_(op_type): - """ - Create an Operator for a Function. - - Args: - op_type: The name of the operator to be created - - This function takes in the operator type (sigmoid, mean , average etc) and - creates the operator functionality. - - """ - op_proto = OpProtoHolder.instance().get_op_proto(op_type) - not_intermediate_outputs = \ - filter(lambda output: not output.intermediate, op_proto.outputs) - intermediate_outputs = \ - filter(lambda output: output.intermediate, op_proto.outputs) - - if len(not_intermediate_outputs) != 1: - raise ValueError("Only one non intermediate output operator can be", - "automatically generated") - - if not_intermediate_outputs[0].duplicable: - raise ValueError( - "Only non duplicable op can be automatically generated") - - for output in intermediate_outputs: - if output.duplicable: - raise ValueError("The op can be automatically generated only when ", - "all intermediate ops are not duplicable") - - o_name = not_intermediate_outputs[0].name - intermediate_output_names = [output.name for output in intermediate_outputs] - - def infer_and_check_dtype(op_proto, **kwargs): - """ - This function performs the sanity check for dtype and - instance type. - """ - dtype = None - for ipt in op_proto.inputs: - name = _convert_(ipt.name) - val = kwargs.pop(name, []) - if not isinstance(val, list) and not isinstance(val, tuple): - val = [val] - for each in val: - if not isinstance(each, Variable): - raise ValueError("input of {0} must be variable".format( - op_type)) - - if dtype is None: - dtype = each.dtype - elif dtype != each.dtype: - raise ValueError( - "operator {0} must input same dtype. {1} vs {2}".format( - op_type, dtype, each.dtype)) - - return dtype - - def func(**kwargs): - helper = LayerHelper(op_type, **kwargs) - - dtype = infer_and_check_dtype(op_proto, **kwargs) - - inputs = dict() - for ipt in op_proto.inputs: - name = _convert_(ipt.name) - val = kwargs.pop(name, []) - if not isinstance(val, list) and not isinstance(val, tuple): - val = [val] - inputs[ipt.name] = val - - outputs = dict() - out = helper.create_tmp_variable(dtype=dtype) - outputs[o_name] = [out] - for name in intermediate_output_names: - outputs[name] = [helper.create_tmp_variable(dtype=dtype)] - helper.append_op( - type=op_type, inputs=inputs, outputs=outputs, attrs=kwargs) - return helper.append_activation(out) - - func.__name__ = op_type - globals()[op_type] = func - func.__doc__ = _generate_doc_string_(op_proto) - global __all__ - __all__.append(op_type) - - -_create_op_func_('mean') -_create_op_func_('mul') -_create_op_func_('elementwise_add') -_create_op_func_('elementwise_div') -_create_op_func_('dropout') -_create_op_func_('reshape') -_create_op_func_('sigmoid') -_create_op_func_('scale') -_create_op_func_('reshape') -_create_op_func_('transpose') -_create_op_func_('sigmoid_cross_entropy_with_logits') - - def cast(x, dtype, main_program=None): """ This function takes in the input with input_dtype diff --git a/python/paddle/v2/fluid/registry.py b/python/paddle/v2/fluid/registry.py new file mode 100644 index 0000000000..6f5dd365de --- /dev/null +++ b/python/paddle/v2/fluid/registry.py @@ -0,0 +1,186 @@ +import re +import cStringIO +import warnings +import functools +import inspect + +import proto.framework_pb2 as framework_pb2 +from framework import OpProtoHolder, Variable, Program, Operator +from paddle.v2.fluid.layer_helper import LayerHelper, unique_name + +__all__ = ['deprecated', 'register_layer'] + + +def _convert_(name): + """ + Formatting. + + Args: + name: The name/alias + + This function takes in a name and converts it to a standard format of + group1_group2. Where as per the regular expression, group1 can have + alphabets and numbers and group2 has capital alphabets. + + """ + s1 = re.sub('(.)([A-Z][a-z]+)', r'\1_\2', name) + return re.sub('([a-z0-9])([A-Z])', r'\1_\2', s1).lower() + + +def _generate_doc_string_(op_proto): + """ + Generate docstring by OpProto + + Args: + op_proto (framework_pb2.OpProto): a protobuf message typed OpProto + + Returns: + str: the document string + """ + + def _type_to_str_(tp): + return framework_pb2.AttrType.Name(tp) + + if not isinstance(op_proto, framework_pb2.OpProto): + raise TypeError("OpProto should be `framework_pb2.OpProto`") + + buf = cStringIO.StringIO() + buf.write(op_proto.comment) + buf.write('\nArgs:\n') + for each_input in op_proto.inputs: + line_begin = ' {0}: '.format(_convert_(each_input.name)) + buf.write(line_begin) + buf.write(each_input.comment) + buf.write('\n') + buf.write(' ' * len(line_begin)) + buf.write('Duplicable: ') + buf.write(str(each_input.duplicable)) + buf.write(' Optional: ') + buf.write(str(each_input.dispensable)) + buf.write('\n') + + for each_attr in op_proto.attrs: + buf.write(' ') + buf.write(each_attr.name) + buf.write(' (') + buf.write(_type_to_str_(each_attr.type)) + buf.write('): ') + buf.write(each_attr.comment) + buf.write('\n') + + if len(op_proto.outputs) != 0: + buf.write('\nReturns:\n') + buf.write(' ') + for each_opt in op_proto.outputs: + if not each_opt.intermediate: + break + buf.write(each_opt.comment) + + return buf.getvalue() + + +def register_layer(op_type): + """ + Register an Python layer for an Operator + + Args: + op_type: The name of the operator to be created + + This function takes in the operator type (sigmoid, mean , average etc) and + creates the operator functionality. + + """ + op_proto = OpProtoHolder.instance().get_op_proto(op_type) + not_intermediate_outputs = \ + filter(lambda output: not output.intermediate, op_proto.outputs) + intermediate_outputs = \ + filter(lambda output: output.intermediate, op_proto.outputs) + + if len(not_intermediate_outputs) != 1: + raise ValueError("Only one non intermediate output operator can be", + "automatically generated") + + if not_intermediate_outputs[0].duplicable: + raise ValueError( + "Only non duplicable op can be automatically generated") + + for output in intermediate_outputs: + if output.duplicable: + raise ValueError("The op can be automatically generated only when ", + "all intermediate ops are not duplicable") + + o_name = not_intermediate_outputs[0].name + intermediate_output_names = [output.name for output in intermediate_outputs] + + def infer_and_check_dtype(op_proto, **kwargs): + """ + This function performs the sanity check for dtype and + instance type. + """ + dtype = None + for ipt in op_proto.inputs: + name = _convert_(ipt.name) + val = kwargs.pop(name, []) + if not isinstance(val, list) and not isinstance(val, tuple): + val = [val] + for each in val: + if not isinstance(each, Variable): + raise ValueError("input of {0} must be variable".format( + op_type)) + + if dtype is None: + dtype = each.dtype + elif dtype != each.dtype: + raise ValueError( + "operator {0} must input same dtype. {1} vs {2}".format( + op_type, dtype, each.dtype)) + + return dtype + + def func(**kwargs): + helper = LayerHelper(op_type, **kwargs) + + dtype = infer_and_check_dtype(op_proto, **kwargs) + + inputs = dict() + for ipt in op_proto.inputs: + name = _convert_(ipt.name) + val = kwargs.pop(name, []) + if not isinstance(val, list) and not isinstance(val, tuple): + val = [val] + inputs[ipt.name] = val + + outputs = dict() + out = helper.create_tmp_variable(dtype=dtype) + outputs[o_name] = [out] + for name in intermediate_output_names: + outputs[name] = [helper.create_tmp_variable(dtype=dtype)] + helper.append_op( + type=op_type, inputs=inputs, outputs=outputs, attrs=kwargs) + return helper.append_activation(out) + + func.__name__ = op_type + func.__doc__ = _generate_doc_string_(op_proto) + return func + + +def deprecated(func_or_class): + """ + Deprecated warning decorator. It will result a warning message. + Should be used before class or function, member function + """ + + @functools.wraps(func) + def func_wrapper(*args, **kwargs): + """ + Wrap func with deprecated warning + """ + warnings.simplefilter('always', DeprecationWarning) #turn off filter + warnings.warn( + "Call to deprecated function {}.".format(func.__name__), + category=DeprecationWarning, + stacklevel=2) + warnings.simplefilter('default', DeprecationWarning) #reset filter + return func(*args, **kwargs) + + return func_wrapper diff --git a/python/paddle/v2/fluid/tests/test_registry.py b/python/paddle/v2/fluid/tests/test_registry.py new file mode 100644 index 0000000000..f8328f31cf --- /dev/null +++ b/python/paddle/v2/fluid/tests/test_registry.py @@ -0,0 +1,22 @@ +import unittest +import warnings + +import paddle.v2.fluid as fluid +import paddle.v2.fluid.framework as framework +import paddle.v2.fluid.layers as layers +import paddle.v2.fluid.registry as registry + + +class TestRegistry(unittest.TestCase): + def test_registry_layer(self): + self.layer_type = "mean" + program = framework.Program() + + x = fluid.layers.data(name='X', shape=[10, 10], dtype='float32') + output = layers.mean(x) + place = fluid.CPUPlace() + exe = fluid.Executor(place) + + X = np.random.random((10, 10)).astype("float32") + mean_out = exe.run(program, feed={"X": X}, fetch_list=[output]) + self.assertAlmostEqual(np.mean(X), mean_out) From 2cc34532437cb73c00cfe77facb63cb3578ae651 Mon Sep 17 00:00:00 2001 From: guosheng Date: Wed, 13 Dec 2017 10:58:50 +0800 Subject: [PATCH 074/193] Refine the doc of parameters.init_from_tar --- python/paddle/v2/parameters.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/python/paddle/v2/parameters.py b/python/paddle/v2/parameters.py index 0dd7d38d8e..7b7d1a1d16 100644 --- a/python/paddle/v2/parameters.py +++ b/python/paddle/v2/parameters.py @@ -390,7 +390,8 @@ class Parameters(object): :param f: the initialized model file. :type f: tar file - :param exclude_params: the names of parameters that shouldn't be initialized from the model file. + :param exclude_params: the names of parameters that should + not be initialized from the model file. :type exclude_params: list of strings :return: Nothing. """ From ea093283e6cdc89bed0ffa0f2e534f9583765465 Mon Sep 17 00:00:00 2001 From: sweetsky0901 Date: Wed, 13 Dec 2017 12:39:29 +0800 Subject: [PATCH 075/193] for code review by zhaolong --- paddle/operators/spp_op.cc | 24 +++++++---- paddle/operators/spp_op.cu.cc | 11 ++--- paddle/operators/spp_op.h | 75 +++++++++++++++-------------------- 3 files changed, 55 insertions(+), 55 deletions(-) diff --git a/paddle/operators/spp_op.cc b/paddle/operators/spp_op.cc index 5e51e73ecc..c4bd4f5ab3 100644 --- a/paddle/operators/spp_op.cc +++ b/paddle/operators/spp_op.cc @@ -31,9 +31,15 @@ class SppOpMaker : public framework::OpProtoAndCheckerMaker { "M = C * H * W"); AddAttr("pyramid_height", "(int), multi level pooling"); AddComment(R"DOC( - "Does spatial pyramid pooling on the input image by taking the max, - etc. within regions so that the result vector of different sized - images are of the same size + "With spatial pyramid pooling, the input image can + be of any sizes. This not only allows arbitrary aspect + ratios, but also allows arbitrary scales. We can resize + the input image to any scale (e.g., min(w, h)=180, 224, + ...) and apply the same deep network. When the + input image is at different scales, the network (with + the same filter sizes) will extract features at different + scales. The scales play important roles in traditional + methods. Input shape: $(N, C_{in}, H_{in}, W_{in})$ Output shape: $(H_{out}, W_{out})$ Where @@ -41,6 +47,7 @@ class SppOpMaker : public framework::OpProtoAndCheckerMaker { H_{out} = N \\ W_{out} = (((4^pyramid_height) - 1) / (4 - 1))$ * C_{in} $$ + paper https://arxiv.org/pdf/1406.4729v4.pdf )DOC"); } }; @@ -79,8 +86,9 @@ class SppOpGrad : public framework::OperatorWithKernel { namespace ops = paddle::operators; REGISTER_OP(spp, ops::SppOp, ops::SppOpMaker, spp_grad, ops::SppOpGrad); -REGISTER_OP_CPU_KERNEL(spp, ops::SppKernel, - ops::SppKernel); -REGISTER_OP_CPU_KERNEL(spp_grad, - ops::SppGradKernel, - ops::SppGradKernel); +REGISTER_OP_CPU_KERNEL( + spp, ops::SppKernel, + ops::SppKernel); +REGISTER_OP_CPU_KERNEL( + spp_grad, ops::SppGradKernel, + ops::SppGradKernel); diff --git a/paddle/operators/spp_op.cu.cc b/paddle/operators/spp_op.cu.cc index a7057907ce..761e4d6c4a 100644 --- a/paddle/operators/spp_op.cu.cc +++ b/paddle/operators/spp_op.cu.cc @@ -15,8 +15,9 @@ limitations under the License. */ #include "paddle/operators/spp_op.h" namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL(spp, ops::SppKernel, - ops::SppKernel); -REGISTER_OP_GPU_KERNEL(spp_grad, - ops::SppGradKernel, - ops::SppGradKernel); +REGISTER_OP_CUDA_KERNEL( + spp, ops::SppKernel, + ops::SppKernel); +REGISTER_OP_CUDA_KERNEL( + spp_grad, ops::SppGradKernel, + ops::SppGradKernel); diff --git a/paddle/operators/spp_op.h b/paddle/operators/spp_op.h index 0f2c43ee65..16510cb826 100644 --- a/paddle/operators/spp_op.h +++ b/paddle/operators/spp_op.h @@ -20,7 +20,7 @@ limitations under the License. */ namespace paddle { namespace operators { -template +template class SppKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { @@ -43,39 +43,32 @@ class SppKernel : public framework::OpKernel { std::vector paddings({padding_h, padding_w}); // pooling output shape framework::Tensor out_level; - std::vector output_shape_vec({in_x->dims()[0], in_x->dims()[1]}); - output_shape_vec.push_back( - (input_h - kernel_size_h + 2 * padding_h) / kernel_size_h + 1); - output_shape_vec.push_back( - (input_w - kernel_size_w + 2 * padding_w) / kernel_size_w + 1); + std::vector output_shape_vec( + {in_x->dims()[0], in_x->dims()[1], bins, bins}); framework::DDim output_shape(framework::make_ddim(output_shape_vec)); out_level.mutable_data(output_shape, context.GetPlace()); // pooling - math::Pool2dFunctor, T> pool_forward; + math::Pool2dFunctor, T> pool_forward; math::MaxPool max_process; - pool_forward(context.device_context(), *in_x, kernel_size, strides, - paddings, max_process, &out_level); + pool_forward(context.template device_context(), *in_x, + kernel_size, strides, paddings, max_process, &out_level); // flatten pooling output shape - framework::Tensor out_flatten_level; int output_flatten_w = in_x->dims()[1] * bins * bins; std::vector output_flatten_shape_vec( {in_x->dims()[0], output_flatten_w}); framework::DDim output_flatten_shape( framework::make_ddim(output_flatten_shape_vec)); - out_flatten_level.ShareDataWith(out_level); - out_flatten_level.Resize(output_flatten_shape); + out_level.Resize(output_flatten_shape); // concat - auto out_flatten_level_stride = - framework::stride(out_flatten_level.dims()); - StridedMemcpy(context.device_context(), out_flatten_level.data(), - out_flatten_level_stride, out_flatten_level.dims(), + auto out_level_stride = framework::stride(out_level.dims()); + StridedMemcpy(context.template device_context(), + out_level.data(), out_level_stride, out_level.dims(), out_stride, out->data() + output_offset); - output_offset += - out_flatten_level.dims()[1] * out_flatten_level_stride[1]; + output_offset += out_level.dims()[1] * out_level_stride[1]; } } }; -template +template class SppGradKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { @@ -86,8 +79,8 @@ class SppGradKernel : public framework::OpKernel { framework::Tensor* in_x_grad = context.Output(framework::GradVarName("X")); int pyramid_height = context.template Attr("pyramid_height"); - auto& device_ctx = context.device_context(); - math::SetConstant zero; + auto& device_ctx = context.template device_context(); + math::SetConstant zero; in_x_grad->mutable_data(context.GetPlace()); zero(device_ctx, in_x_grad, static_cast(0)); auto out_stride = framework::stride(out->dims()); @@ -104,45 +97,43 @@ class SppGradKernel : public framework::OpKernel { std::vector strides({kernel_size_h, kernel_size_w}); std::vector paddings({padding_h, padding_w}); // split out and outgrad ... to flatten - framework::Tensor out_flatten_level; - framework::Tensor outgrad_flatten_level; + framework::Tensor out_level; + framework::Tensor outgrad_level; int out_flatten_w = in_x->dims()[1] * bins * bins; std::vector out_flatten_shape_vec( {in_x->dims()[0], out_flatten_w}); framework::DDim out_flatten_shape( framework::make_ddim(out_flatten_shape_vec)); - out_flatten_level.mutable_data(out_flatten_shape, context.GetPlace()); - outgrad_flatten_level.mutable_data(out_flatten_shape, - context.GetPlace()); - auto flatten_stride = framework::stride(out_flatten_level.dims()); + out_level.mutable_data(out_flatten_shape, context.GetPlace()); + outgrad_level.mutable_data(out_flatten_shape, context.GetPlace()); + auto flatten_stride = framework::stride(out_level.dims()); // memcpy - StridedMemcpy(context.device_context(), out->data() + out_offset, - out_stride, out_flatten_level.dims(), flatten_stride, - out_flatten_level.data()); + StridedMemcpy(context.template device_context(), + out->data() + out_offset, out_stride, + out_level.dims(), flatten_stride, out_level.data()); - StridedMemcpy(context.device_context(), + StridedMemcpy(context.template device_context(), out_grad->data() + out_offset, out_stride, - outgrad_flatten_level.dims(), flatten_stride, - outgrad_flatten_level.data()); - out_offset += out_flatten_level.dims()[1] * out_stride[1]; + outgrad_level.dims(), flatten_stride, + outgrad_level.data()); + out_offset += out_level.dims()[1] * out_stride[1]; // flatten backward to nchw - framework::Tensor out_level; - framework::Tensor outgrad_level; + std::vector out_shape_vec({in_x->dims()[0], in_x->dims()[1]}); out_shape_vec.push_back( (input_h - kernel_size_h + 2 * padding_h) / kernel_size_h + 1); out_shape_vec.push_back( (input_w - kernel_size_w + 2 * padding_w) / kernel_size_w + 1); framework::DDim out_shape(framework::make_ddim(out_shape_vec)); - out_level.ShareDataWith(out_flatten_level); + out_level.ShareDataWith(out_level); out_level.Resize(out_shape); - outgrad_level.ShareDataWith(outgrad_flatten_level); + outgrad_level.ShareDataWith(outgrad_level); outgrad_level.Resize(out_shape); // pooling backward - math::MaxPool2dGradFunctor pool2d_backward; - pool2d_backward(context.device_context(), *in_x, *&out_level, - *&outgrad_level, kernel_size, strides, paddings, - in_x_grad); + math::MaxPool2dGradFunctor pool2d_backward; + pool2d_backward(context.template device_context(), *in_x, + *&out_level, *&outgrad_level, kernel_size, strides, + paddings, in_x_grad); } } }; From 316ab4e07d0dd4fce3efa8f3b32380a829ffbd48 Mon Sep 17 00:00:00 2001 From: liaogang Date: Wed, 13 Dec 2017 12:40:11 +0800 Subject: [PATCH 076/193] christmas gift: fix a typo --- paddle/scripts/docker/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/paddle/scripts/docker/README.md b/paddle/scripts/docker/README.md index 1e1fcc50dc..f0620498cf 100644 --- a/paddle/scripts/docker/README.md +++ b/paddle/scripts/docker/README.md @@ -20,7 +20,7 @@ binaries. ## Run The Build -### Build Evironments +### Build Environments The pre-built build environment images are: From 1ba8f7fe71fc8df40669a24fc5af88d0904240f1 Mon Sep 17 00:00:00 2001 From: Yu Yang Date: Wed, 13 Dec 2017 14:18:19 +0800 Subject: [PATCH 077/193] The comments in reshape_op is wrong (#6565) --- paddle/operators/reshape_op.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/paddle/operators/reshape_op.cc b/paddle/operators/reshape_op.cc index 39bf2118d6..7fd33bf662 100644 --- a/paddle/operators/reshape_op.cc +++ b/paddle/operators/reshape_op.cc @@ -84,9 +84,9 @@ Given a 2-D tensor X with 2 rows and 2 columns [[1, 2], [3, 4]] and target shape = [1, 4], the reshape operator will transform -the tensor X into a 1-D tensor: +the tensor X into a 2-D tensor: - [1, 2, 3, 4] + [[1, 2, 3, 4]] )DOC"); } From d069f2ca0a92dd07eb06c9a02528c41b0702f131 Mon Sep 17 00:00:00 2001 From: Yu Yang Date: Wed, 13 Dec 2017 14:37:05 +0800 Subject: [PATCH 078/193] Make fluid.layers.fc support multiple param_attr (#6532) Fix #6531 --- python/paddle/v2/fluid/param_attr.py | 2 ++ python/paddle/v2/fluid/tests/test_layers.py | 5 ++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/python/paddle/v2/fluid/param_attr.py b/python/paddle/v2/fluid/param_attr.py index 86088fdd7c..7952a5ea51 100644 --- a/python/paddle/v2/fluid/param_attr.py +++ b/python/paddle/v2/fluid/param_attr.py @@ -36,6 +36,8 @@ class ParamAttr(object): def to_attr(arg): if arg is None: return ParamAttr() + elif isinstance(arg, list) or isinstance(arg, tuple): + return [ParamAttr.to_attr(a) for a in arg] elif isinstance(arg, ParamAttr): return arg elif isinstance(arg, str) or isinstance(arg, unicode): diff --git a/python/paddle/v2/fluid/tests/test_layers.py b/python/paddle/v2/fluid/tests/test_layers.py index 57f6a362de..9b88080158 100644 --- a/python/paddle/v2/fluid/tests/test_layers.py +++ b/python/paddle/v2/fluid/tests/test_layers.py @@ -29,7 +29,10 @@ class TestBook(unittest.TestCase): label = layers.data(name='label', shape=[1], dtype='int32') hidden1 = layers.fc(input=images, size=128, act='relu') hidden2 = layers.fc(input=hidden1, size=64, act='relu') - predict = layers.fc(input=hidden2, size=10, act='softmax') + predict = layers.fc(input=[hidden2, hidden1], + size=10, + act='softmax', + param_attr=["sftmax.w1", "sftmax.w2"]) cost = layers.cross_entropy(input=predict, label=label) avg_cost = layers.mean(x=cost) self.assertIsNotNone(avg_cost) From 0e18bc88366e3987e1cf0dfef382725bf7391bf3 Mon Sep 17 00:00:00 2001 From: Luo Tao Date: Wed, 13 Dec 2017 14:45:15 +0800 Subject: [PATCH 079/193] update paddledev to paddlepaddle --- doc/faq/build_and_install/index_cn.rst | 2 +- doc/getstarted/build_and_install/docker_install_cn.rst | 4 ++-- doc/getstarted/build_and_install/docker_install_en.rst | 4 ++-- .../cluster_train_v2/openmpi/docker_cluster/Dockerfile | 2 +- paddle/scripts/tools/build_docs/build_docs.sh | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/doc/faq/build_and_install/index_cn.rst b/doc/faq/build_and_install/index_cn.rst index f1677e216f..a2bdeead78 100644 --- a/doc/faq/build_and_install/index_cn.rst +++ b/doc/faq/build_and_install/index_cn.rst @@ -14,7 +14,7 @@ $ export CUDA_SO="$(\ls usr/lib64/libcuda* | xargs -I{} echo '-v {}:{}') $(\ls /usr/lib64/libnvidia* | xargs -I{} echo '-v {}:{}')" $ export DEVICES=$(\ls /dev/nvidia* | xargs -I{} echo '--device {}:{}') - $ docker run ${CUDA_SO} ${DEVICES} -it paddledev/paddlepaddle:latest-gpu + $ docker run ${CUDA_SO} ${DEVICES} -it paddlepaddle/paddle:latest-gpu 更多关于Docker的安装与使用, 请参考 `PaddlePaddle Docker 文档 `_ 。 diff --git a/doc/getstarted/build_and_install/docker_install_cn.rst b/doc/getstarted/build_and_install/docker_install_cn.rst index f78b1fb0e1..1eb06e4182 100644 --- a/doc/getstarted/build_and_install/docker_install_cn.rst +++ b/doc/getstarted/build_and_install/docker_install_cn.rst @@ -114,7 +114,7 @@ PaddlePaddle Book是为用户和开发者制作的一个交互式的Jupyter Note .. code-block:: bash - nvidia-docker run -it -v $PWD:/work paddledev/paddle:latest-gpu /bin/bash + nvidia-docker run -it -v $PWD:/work paddlepaddle/paddle:latest-gpu /bin/bash **注: 如果没有安装nvidia-docker,可以尝试以下的方法,将CUDA库和Linux设备挂载到Docker容器内:** @@ -122,7 +122,7 @@ PaddlePaddle Book是为用户和开发者制作的一个交互式的Jupyter Note export CUDA_SO="$(\ls /usr/lib64/libcuda* | xargs -I{} echo '-v {}:{}') $(\ls /usr/lib64/libnvidia* | xargs -I{} echo '-v {}:{}')" export DEVICES=$(\ls /dev/nvidia* | xargs -I{} echo '--device {}:{}') - docker run ${CUDA_SO} ${DEVICES} -it paddledev/paddle:latest-gpu + docker run ${CUDA_SO} ${DEVICES} -it paddlepaddle/paddle:latest-gpu **关于AVX:** diff --git a/doc/getstarted/build_and_install/docker_install_en.rst b/doc/getstarted/build_and_install/docker_install_en.rst index d7acc7aeb7..5a46c598f2 100644 --- a/doc/getstarted/build_and_install/docker_install_en.rst +++ b/doc/getstarted/build_and_install/docker_install_en.rst @@ -122,7 +122,7 @@ GPU driver installed before move on. .. code-block:: bash - nvidia-docker run -it -v $PWD:/work paddledev/paddle:latest-gpu /bin/bash + nvidia-docker run -it -v $PWD:/work paddlepaddle/paddle:latest-gpu /bin/bash **NOTE: If you don't have nvidia-docker installed, try the following method to mount CUDA libs and devices into the container.** @@ -130,7 +130,7 @@ GPU driver installed before move on. export CUDA_SO="$(\ls /usr/lib64/libcuda* | xargs -I{} echo '-v {}:{}') $(\ls /usr/lib64/libnvidia* | xargs -I{} echo '-v {}:{}')" export DEVICES=$(\ls /dev/nvidia* | xargs -I{} echo '--device {}:{}') - docker run ${CUDA_SO} ${DEVICES} -it paddledev/paddle:latest-gpu + docker run ${CUDA_SO} ${DEVICES} -it paddlepaddle/paddle:latest-gpu **About AVX:** diff --git a/paddle/scripts/cluster_train_v2/openmpi/docker_cluster/Dockerfile b/paddle/scripts/cluster_train_v2/openmpi/docker_cluster/Dockerfile index 1a2d19e823..c2f631bdf4 100644 --- a/paddle/scripts/cluster_train_v2/openmpi/docker_cluster/Dockerfile +++ b/paddle/scripts/cluster_train_v2/openmpi/docker_cluster/Dockerfile @@ -1,7 +1,7 @@ # Build this image: docker build -t mpi . # -FROM paddledev/paddle:0.10.0rc3 +FROM paddlepaddle/paddle:0.10.0rc3 ENV DEBIAN_FRONTEND noninteractive diff --git a/paddle/scripts/tools/build_docs/build_docs.sh b/paddle/scripts/tools/build_docs/build_docs.sh index c6cbbc4eef..f9bc8bf63a 100755 --- a/paddle/scripts/tools/build_docs/build_docs.sh +++ b/paddle/scripts/tools/build_docs/build_docs.sh @@ -5,4 +5,4 @@ docker run --rm \ -e "WITH_AVX=ON" \ -e "WITH_DOC=ON" \ -e "WOBOQ=ON" \ - ${1:-"paddledev/paddle:dev"} + ${1:-"paddlepaddle/paddle:latest-dev"} From 0a8addf802e2198084b9cc66e49ca4ae2fdd8125 Mon Sep 17 00:00:00 2001 From: Yu Yang Date: Wed, 13 Dec 2017 15:24:53 +0800 Subject: [PATCH 080/193] Make cast op support bool (#6562) Also add `elemwise_sub/mul/abs/clip` layers --- paddle/operators/cast_op.cc | 3 ++- paddle/operators/cast_op.cu | 3 ++- python/paddle/v2/fluid/layers.py | 5 +++-- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/paddle/operators/cast_op.cc b/paddle/operators/cast_op.cc index 42bff69a1e..d641b8fc9f 100644 --- a/paddle/operators/cast_op.cc +++ b/paddle/operators/cast_op.cc @@ -74,4 +74,5 @@ REGISTER_OP_WITH_KERNEL(cast, ops::CastOpGradMaker, ops::CastOpInferShape, REGISTER_OP_CPU_KERNEL(cast, ops::CastOpKernel, ops::CastOpKernel, ops::CastOpKernel, - ops::CastOpKernel); + ops::CastOpKernel, + ops::CastOpKernel); diff --git a/paddle/operators/cast_op.cu b/paddle/operators/cast_op.cu index 4681deaa62..91e6fb391c 100644 --- a/paddle/operators/cast_op.cu +++ b/paddle/operators/cast_op.cu @@ -19,4 +19,5 @@ using CastOpKernel = paddle::operators::CastOpKernel; REGISTER_OP_CUDA_KERNEL(cast, CastOpKernel, CastOpKernel, - CastOpKernel, CastOpKernel); + CastOpKernel, CastOpKernel, + CastOpKernel); diff --git a/python/paddle/v2/fluid/layers.py b/python/paddle/v2/fluid/layers.py index 9f5a219b20..f67d6d08c7 100644 --- a/python/paddle/v2/fluid/layers.py +++ b/python/paddle/v2/fluid/layers.py @@ -15,8 +15,9 @@ __all__ = [ ] _REGISTER_LAYER_FROM_OPS = [ - 'mean', 'mul', 'elementwise_add', 'elementwise_div', 'dropout', 'reshape', - 'sigmoid', 'scale', 'transpose', 'sigmoid_cross_entropy_with_logits' + 'mean', 'mul', 'dropout', 'reshape', 'sigmoid', 'scale', 'transpose', + 'sigmoid_cross_entropy_with_logits', 'elementwise_add', 'elementwise_div', + 'elementwise_sub', 'elementwise_mul', 'clip', 'abs' ] for _OP in set(_REGISTER_LAYER_FROM_OPS): From 842b485f6a15e0ddba7ff345cb17d440cc950374 Mon Sep 17 00:00:00 2001 From: guosheng Date: Wed, 13 Dec 2017 17:09:15 +0800 Subject: [PATCH 081/193] Enhance ReduceOp to support reducing over all elements --- paddle/operators/reduce_op.cc | 32 +++-- paddle/operators/reduce_op.h | 119 ++++++++++++------ .../paddle/v2/fluid/tests/test_reduce_op.py | 14 +++ 3 files changed, 113 insertions(+), 52 deletions(-) diff --git a/paddle/operators/reduce_op.cc b/paddle/operators/reduce_op.cc index b754637bf2..fedc2a5c37 100644 --- a/paddle/operators/reduce_op.cc +++ b/paddle/operators/reduce_op.cc @@ -37,18 +37,23 @@ class ReduceOp : public framework::OperatorWithKernel { PADDLE_ENFORCE_LT( dim, x_rank, "The dim should be in the range [-rank(input), rank(input))."); - bool keep_dim = ctx->Attrs().Get("keep_dim"); - auto dims_vector = vectorize(x_dims); - if (keep_dim || x_rank == 1) { - dims_vector[dim] = 1; + bool reduce_all = ctx->Attrs().Get("reduce_all"); + if (reduce_all) { + ctx->SetOutputDim("Out", {1}); } else { - dims_vector.erase(dims_vector.begin() + dim); - } - auto out_dims = framework::make_ddim(dims_vector); - ctx->SetOutputDim("Out", out_dims); - if (dim != 0) { - // Only pass LoD when not reducing on the first dim. - ctx->ShareLoD("X", /*->*/ "Out"); + bool keep_dim = ctx->Attrs().Get("keep_dim"); + auto dims_vector = vectorize(x_dims); + if (keep_dim || x_rank == 1) { + dims_vector[dim] = 1; + } else { + dims_vector.erase(dims_vector.begin() + dim); + } + auto out_dims = framework::make_ddim(dims_vector); + ctx->SetOutputDim("Out", out_dims); + if (dim != 0) { + // Only pass LoD when not reducing on the first dim. + ctx->ShareLoD("X", /*->*/ "Out"); + } } } }; @@ -95,11 +100,16 @@ class ReduceOpMaker : public framework::OpProtoAndCheckerMaker { "(bool, default false) " "If true, retain the reduced dimension with length 1.") .SetDefault(false); + AddAttr("reduce_all", + "(bool, default false) " + "If true, output a scalar reduced along all dimensions.") + .SetDefault(false); comment_ = R"DOC( {ReduceOp} Operator. This operator computes the {reduce} of input tensor along the given dimension. The result tensor has 1 fewer dimension than the input unless keep_dim is true. +If reduce_all is true, just reduce along all dimensions and output a scalar. )DOC"; AddComment(comment_); diff --git a/paddle/operators/reduce_op.h b/paddle/operators/reduce_op.h index 47ce910f28..7bd99cb1e6 100644 --- a/paddle/operators/reduce_op.h +++ b/paddle/operators/reduce_op.h @@ -26,10 +26,12 @@ using DDim = framework::DDim; template using EigenTensor = framework::EigenTensor; - template using EigenScalar = framework::EigenScalar; +template +using EigenVector = framework::EigenVector; struct SumFunctor { template @@ -95,26 +97,41 @@ template class ReduceKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { - int rank = context.Input("X")->dims().size(); - switch (rank) { - case 1: - ReduceCompute<1>(context); - break; - case 2: - ReduceCompute<2>(context); - break; - case 3: - ReduceCompute<3>(context); - break; - case 4: - ReduceCompute<4>(context); - break; - case 5: - ReduceCompute<5>(context); - break; - case 6: - ReduceCompute<6>(context); - break; + bool reduce_all = context.Attr("reduce_all"); + if (reduce_all) { + // Flatten and reduce 1-D tensor + auto* input = context.Input("X"); + auto* output = context.Output("Out"); + output->mutable_data(context.GetPlace()); + auto x = EigenVector::Flatten(*input); + auto out = EigenScalar::From(*output); + auto& place = + *context.template device_context().eigen_device(); + auto reduce_dim = Eigen::array({{0}}); + Functor functor; + functor(place, x, out, reduce_dim); + } else { + int rank = context.Input("X")->dims().size(); + switch (rank) { + case 1: + ReduceCompute<1>(context); + break; + case 2: + ReduceCompute<2>(context); + break; + case 3: + ReduceCompute<3>(context); + break; + case 4: + ReduceCompute<4>(context); + break; + case 5: + ReduceCompute<5>(context); + break; + case 6: + ReduceCompute<6>(context); + break; + } } } @@ -157,26 +174,46 @@ template class ReduceGradKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { - int rank = context.Input("X")->dims().size(); - switch (rank) { - case 1: - ReduceGradCompute<1>(context); - break; - case 2: - ReduceGradCompute<2>(context); - break; - case 3: - ReduceGradCompute<3>(context); - break; - case 4: - ReduceGradCompute<4>(context); - break; - case 5: - ReduceGradCompute<5>(context); - break; - case 6: - ReduceGradCompute<6>(context); - break; + bool reduce_all = context.Attr("reduce_all"); + if (reduce_all) { + auto* input0 = context.Input("X"); + auto* input1 = context.Input("Out"); + auto* input2 = context.Input(framework::GradVarName("Out")); + auto* output = context.Output(framework::GradVarName("X")); + output->mutable_data(context.GetPlace()); + auto x = EigenVector::Flatten(*input0); + auto x_reduce = EigenVector::From(*input1); + auto x_reduce_grad = EigenVector::From(*input2); + auto x_grad = EigenVector::Flatten(*output); + auto& place = + *context.template device_context().eigen_device(); + auto broadcast_dim = + Eigen::array({{static_cast(input0->numel())}}); + Functor functor; + functor(place, x, x_reduce, x_grad, x_reduce_grad, broadcast_dim, + broadcast_dim[0]); + } else { + int rank = context.Input("X")->dims().size(); + switch (rank) { + case 1: + ReduceGradCompute<1>(context); + break; + case 2: + ReduceGradCompute<2>(context); + break; + case 3: + ReduceGradCompute<3>(context); + break; + case 4: + ReduceGradCompute<4>(context); + break; + case 5: + ReduceGradCompute<5>(context); + break; + case 6: + ReduceGradCompute<6>(context); + break; + } } } diff --git a/python/paddle/v2/fluid/tests/test_reduce_op.py b/python/paddle/v2/fluid/tests/test_reduce_op.py index 70359d60cb..a021d4dd91 100644 --- a/python/paddle/v2/fluid/tests/test_reduce_op.py +++ b/python/paddle/v2/fluid/tests/test_reduce_op.py @@ -85,5 +85,19 @@ class Test1DReduce(OpTest): self.check_grad(['X'], 'Out') +class TestReduceAll(OpTest): + def setUp(self): + self.op_type = "reduce_sum" + self.inputs = {'X': np.random.random((5, 6, 2, 10)).astype("float32")} + self.attrs = {'reduce_all': True} + self.outputs = {'Out': self.inputs['X'].sum()} + + def test_check_output(self): + self.check_output() + + def test_check_grad(self): + self.check_grad(['X'], 'Out') + + if __name__ == '__main__': unittest.main() From fd12776c570207697b790bdbd44cf466fb1141d7 Mon Sep 17 00:00:00 2001 From: QI JUN Date: Wed, 13 Dec 2017 21:16:50 +0800 Subject: [PATCH 082/193] Design doc: how to support a new device/library doc (#6577) * add support new device doc * add more info --- doc/design/support_new_device.md | 248 +++++++++++++++++++++++++++++++ 1 file changed, 248 insertions(+) create mode 100644 doc/design/support_new_device.md diff --git a/doc/design/support_new_device.md b/doc/design/support_new_device.md new file mode 100644 index 0000000000..92443e4392 --- /dev/null +++ b/doc/design/support_new_device.md @@ -0,0 +1,248 @@ +# Design Doc: Support new Device/Library + +## Background + +Deep learning has a high demand for computing resources. New high-performance device and computing library are coming constantly. The deep learning framework has to integrate these high-performance device and computing library flexibly. + +On the one hand, hardware and computing library are not usually one-to-one coresponding relations. For example, in Intel CPU, there are Eigen and MKL computing library. And in Nvidia GPU, there are Eigen and cuDNN computing library. We have to implement specific kernels for an operator for each computing library. + +On the other hand, users usually do not want to care about the low-level hardware and computing library when writing a neural network configuration. In Fluid, `Layer` is exposed in `Python`, and `Operator` is exposed in `C++`. Both `Layer` and `Operator` are independent on hardwares. + +So, how to support a new Device/Library in Fluid becomes a challenge. + + +## Basic: Integrate A New Device/Library + +For a general overview of fluid, please refer to [overview doc](https://github.com/PaddlePaddle/Paddle/blob/develop/doc/howto/read_source.md). + +There are mainly there parts we have to consider in integrating a new device/library: + +- Place and DeviceContext: indicates the device id and manages hardware resources + +- Memory and Tensor: malloc/free data on certain device + +- Math Functor and OpKernel: implement computing unit on certain device/library + +### Place and DeviceContext + + +#### Place +Fluid use class [Place](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/platform/place.h#L55) to represent specific device and computing library. There are inheritance relationships between different kinds of `Place`. + +``` + | CPUPlace --> MKLDNNPlace +Place --| CUDAPlace --> CUDNNPlace + | FPGAPlace +``` + +And `Place` is defined as follows: + +``` +typedef boost::variant Place; +``` + +#### DeviceContext + +Fluid use class [DeviceContext](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/platform/device_context.h#L30) to manage the resources in certain hardware, such as CUDA stream in `CDUADeviceContext`. There are also inheritance relationships between different kinds of `DeviceContext`. + + +``` + /-> CPUDeviceContext --> MKLDeviceContext +DeviceContext ----> CUDADeviceContext --> CUDNNDeviceContext + \-> FPGADeviceContext +``` + +A example of Nvidia GPU is as follows: + +- DeviceContext + + +``` +class DeviceContext { + virtual Place GetPlace() const = 0; +}; +``` + + +- CUDADeviceContext + + +``` +class CUDADeviceContext : public DeviceContext { + Place GetPlace() const override { return place_; } +private: + CUDAPlace place_; + cudaStream_t stream_; + cublasHandle_t cublas_handle_; + std::unique_ptr eigen_device_; // binds with stream_ +}; +``` + +- CUDNNDeviceContext + +``` +class CUDNNDeviceContext : public CUDADeviceContext { + private: + cudnnHandle_t cudnn_handle_; +}; +``` + + +### Memory and Tensor + + +#### memory module + +Fluid provide following [memory interfaces](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/memory/memory.h#L36): + +``` +template +void* Alloc(Place place, size_t size); + +template +void Free(Place place, void* ptr); + +template +size_t Used(Place place); +``` + +To implementing these interfaces, we have to implement MemoryAllocator for specific Device + + +#### Tensor + +[Tensor](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/framework/tensor.h#L36) holds data with some shape in certain Place. + +```cpp +class Tensor { + public: + /*! Return a pointer to mutable memory block. */ + template + inline T* data(); + + /** + * @brief Return a pointer to mutable memory block. + * @note If not exist, then allocation. + */ + template + inline T* mutable_data(platform::Place place); + + /** + * @brief Return a pointer to mutable memory block. + * + * @param[in] dims The dimensions of the memory block. + * @param[in] place The place of the memory block. + * + * @note If not exist, then allocation. + */ + template + inline T* mutable_data(DDim dims, platform::Place place); + + /*! Resize the dimensions of the memory block. */ + inline Tensor& Resize(const DDim& dims); + + /*! Return the dimensions of the memory block. */ + inline const DDim& dims() const; + + private: + /*! holds the memory block if allocated. */ + std::shared_ptr holder_; + + /*! points to dimensions of memory block. */ + DDim dim_; +}; +``` + +`Placeholder` is used to delay memory allocation; that is, we can first define a tensor, using `Resize` to configure its shape, and then call `mutuable_data` to allocate the actual memory. + +```cpp +paddle::framework::Tensor t; +paddle::platform::CPUPlace place; +// set size first +t.Resize({2, 3}); +// allocate memory on CPU later +t.mutable_data(place); +``` + + + +### Math Functor and OpKernel + +Fluid implements computing unit based on different DeviceContext. Some computing unit is shared between operators. These common part will be put in operators/math directory as basic Functors. + +Let's take [MaxOutFunctor](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/operators/math/maxouting.h#L27) as an example: + +The interface is defined in header file. + +``` +template +class MaxOutFunctor { + public: + void operator()(const DeviceContext& context, const framework::Tensor& input, + framework::Tensor* output, int groups); +}; +``` + +CPU implement in .cc file + +``` +template +class MaxOutFunctor { + public: + void operator()(const platform::CPUDeviceContext& context, + const framework::Tensor& input, framework::Tensor* output, + int groups) { + ... + } +}; +``` + +CUDA implement in .cu file + +``` +template +class MaxOutFunctor { + public: + void operator()(const platform::CUDADeviceContext& context, + const framework::Tensor& input, framework::Tensor* output, + int groups) { + ... + } +}; +``` + + +We get computing handle from concrete DeviceContext, and make compution on tensors. + +The implement of `OpKernel` is similar to math functors, the extra thing we need to do is registering the OpKernel to global map. + +Fluid provides different register interface in op_registry.h + + +Let's take [Crop](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/operators/crop_op.cc#L134) operator as an example: + +In .cc file: + +``` +REGISTER_OP_CPU_KERNEL(crop, ops::CropKernel); +REGISTER_OP_CPU_KERNEL( + crop_grad, ops::CropGradKernel); +``` + +In .cu file: + +``` +REGISTER_OP_CUDA_KERNEL(crop, ops::CropKernel); +REGISTER_OP_CUDA_KERNEL( + crop_grad, ops::CropGradKernel); +``` + + +## Advanced topics: How to switch between different Device/Library + +Generally, we will impelement OpKernel for all Device/Library of an Operator. We can easily train a Convolutional Neural Network in GPU. However, some OpKernel is not sutibale in a specific Device. For example, crf operator can be only run at CPU, whereas most other operators can be run at GPU. To achieve high performance in such circumstance, we have to switch between different Device/Library. + + +We will discuss how to implement an efficient OpKernel switch policy. + +- TBD From 16a61004da780fb1025ea7d537e425403d6ce465 Mon Sep 17 00:00:00 2001 From: Yi Wang Date: Wed, 13 Dec 2017 16:47:24 -0800 Subject: [PATCH 083/193] Add fluid.md (#6547) * Add fluid.md * in response to comments from Tony and Abhinav --- doc/design/fluid-compiler.graffle | Bin 0 -> 3405 bytes doc/design/fluid-compiler.png | Bin 0 -> 124118 bytes doc/design/fluid.md | 122 ++++++++++++++++++++++++++++++ 3 files changed, 122 insertions(+) create mode 100644 doc/design/fluid-compiler.graffle create mode 100644 doc/design/fluid-compiler.png create mode 100644 doc/design/fluid.md diff --git a/doc/design/fluid-compiler.graffle b/doc/design/fluid-compiler.graffle new file mode 100644 index 0000000000000000000000000000000000000000..c933df2cb855462c52b2d25f7f9a99b95652961d GIT binary patch literal 3405 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 literal 0 HcmV?d00001 diff --git a/doc/design/fluid-compiler.png b/doc/design/fluid-compiler.png new file mode 100644 index 0000000000000000000000000000000000000000..1b0ffed2039c91a3a00bbb719da08c91c3acf7bb GIT binary patch literal 124118 zcmeFZcU)6h8#RiI3>rijC8Bh@fPw-M=}iR-f{;Tfp^1nD2qkm~2ntvMbr7W^(h?wa z2vuMdq$7kN9hKf|Xo0)qJ38vjd*}XfzrVhBevZP)$tnBn{XFYgYdzZ(i`jeMivm+cN31~?|BUCxaExAfi+ zbZ25>X0t}>JL_v+mbI|A6EnYVf6Y?N-Od5*&BP?{E(?CNvvf8Wa<{X^;$+um0R0*gENpM!io&RI*Gg_E^| zv$Z`|h;dx=YxXYA3I`4_PW0`+|6HfD^^L#IgvI@NTi^!88J~!s5<4mW?bzU}@{Fyr zI+i$lTNlRRA*{8tqJ;dHoqyi^*V+E_Ej4>P2PaD$4tz}!@#j~*-}dwVT29uM;Qkn= zQ9SkM{@-u=d4KJj_RjWTtevbaE?}K4oxsWd{Px!i{O^1Gc`SKx#&CT%eE)eiU$%mW zqX?51|Ms92VS(>64lyw)GhH~Vf^^?9(X+jz9ulmcjg7wf7?J(^U2VhPpCCj;j3V{I zmKvU&hQqBBOOc(w2|pRRr}{G2Nax8#Vax6N(eLLsV`Oo|CX%$q`qFN)o8s_dgq-B& z;(A}sf_&M$T=m01CgyEIxBmCn|Hj~d^WgusWe`eW4$xVwBxAR7Y6$xo-6l>(=%DJ~ z9QZm8?@r8IY%Z01TKr&P=a#LU%1nR#<=3%w8`=VQO>`?~O&_xnQHi^w4()N{{;yZ{=ixa+ln2~T-!S^|x_&-B<5NH9EzDGBHi4gy@Y4aoua4U} z3*WwZ^Y-f<{MWFkT*TyOQ^XST!e;yfwqo zG3(U7F4#~p<^Bk4#le3+w-^|q!orTd|8xsKY}4Qta?mX3|LtGT%^40x2#vOV_+Q8H z>j$scI17`EX14usp6}<{*AMPq0wW|QcKZBx^YH6uKkomYWgEKng!`SZr}(eI{g1=S z{XE>$yMf5^{L-;K8Hce!Qf=&y@d7%fFAwkB?L6f79~c zX7K-sY3cWJl*8l8+6nF3`u_d(73CGjBx8nV24Gh@6b|-FW8|Suc9& z_haS(Z1YAh>&4{Nnfz*)SA$#J9vQxSayVT(UiGo`b>V-E6$aZl3vc*UiGbK7^nt~5 zam;e}(JQ$b#>JfqwC<-9J&%aKnh{c22%Gjl@|tW&r8m_19M7WHGC|aPmGSz?;Y$;R zpMr5rxS{&2+Az^%v0qWa|1egenM{_-+gq~^{^uGz#G8v;Y;4+69)n{GPs^!sz;caY?UHi3xL6O`Y)2t{iS3tA>7j^T6m44`Lz;*O-;lC|ie|+-IX(GxwI)zT=X3>GcPDPQX~iWQVe< z1#EhX-P~v|LZrQxY<=kjUGb+Hk)}N}r-us4YXUR+@+iBMc z{k75LSoCvLp@TV$s%BxNUaTP4!wwFKPzw?v+@2+Xr? zeVb9bWau_wgeAX8Z$C-GbPj#6iggJAE5@VCYr3?@VskjXpf}s`)7uXyQ@myQ#wu~L zY;8)f+y_r3iDndD3!=3bPnX$nC@h3_-I(dGm~sgl?6NPnD-tMG(usdFoeb5o=!|NESavjBu4&YVMFkYLma>NOvP!Z z&l+x1U_tjz6;CV5eR?R_J-XoIHANooc546&NzFLLq_il{zOUDFX~H`3Vwh9i;zpC! zbe_ACZ~TLh8KIWx=CkD-yH}>5f<^w5*K0V}K0np!cEjJ>b$H_L!Qjk<5XH_$xoLTt zL6f(~y`@w0j_&`oFlR_iexlP`8EawtR<3p7S65$ujAZ73!bSM@oiw`z=1r}M*JR$^ zP4_9sskwryF<-O z<(u@TfO`WfEfENtG#hHhQiF6~A)RaFnXv9#h`cdV#UVC>RBH1T{CMX|=57Hb0r~EV z{OsA{`9?Xrscy1shk4Kk@XVqIF2nS#8X_z$>z?H$$9RfV$wGH~eAXt#(&j|37hHe0 z%gt*r423RiA>*vdWt~am6BJ@NTU?%Yd`=|?#3@qPI@#+rohR8OFPR%s>A*4pt9_Z5 zcqzQd=IX7qB!Y^uk-Kj5tH=lw$-a%%adBzZDI%$CjQd4~diC;1LP)nJDP8sBFFVf& z34!scfujD}2%@K(o=4c$ZaFD!;*ys#-RA^Q97YS`q$hR58yqsAI()6Aty zE2E{)YKFygLVROJ+-|{ zSxAa^+n58|cOSXzFfQOdqe4WJv%MxZk8wiF@wZf=1j6OEy!t4aR%AM{*^qRbIcFxR zA2|#SKKH*0iQ1S3*uz{x;=n=~pqRt-uTUo2hz_@HOFz`8YQ>Ei?O zA|L$9VE7c>;e%y3SuI89eYyI4o!5y1CEt7AK``;h(^Y57z2Mm<4izk7wiH^li5q@% z44>qa5@AS6V0LAxDLedLy#K(!8!^@4t-A3O`xvvS;te!kSPH)a8h)_ZcU_lhuE<0&AEZw3!BCziAE0C(+ z8Rp)6JlVjJOvH^CBG%J0RNz6dGA=$5cPKO|$=ul}-*!}BO^IixUezqdm;G_tejm7D zs&yg6-j!;mgB!;b_RJ(X=+!MoSl_f{?@GIUIGm`qx;jgxy%!28=@MB=i@VAflNxn5ERYulR$~v!1|Hdv#>^H0)>nb4S z*-)<#VYYSb(gP{}h9nn|GmUSN1O-QOUSX~U&@eD#`1`eIPib*Vfr@NFd`@?X*fyJt z>05YO4;9M5oUwy4M7FjM*P;|f3d>i9BGqEO=o+dg%1fwDYxChXZYd?ZRunHU6uULY zsZ6bcgIC)8k+!q2ia zSbUr$PWM<+zhOmT-~==>Y4mbhrM$cx#q?sO8@9f&{;#O)pfPw<4xu`lNl!+*e0vg91Mm zEMJO4q3qY?mKu+#S&T)aY{tDU<)x-36iN_!)P@w6b{=WgARZ8F%_O~u99mol*rX@Q z_i^AU$OSpsnb+eT?be4cASO|olX>nV)jkvK7sshh-ugCuWuS54JZ5GxgmOQq~`tkFfK5H!08xDTIl(#kJbz8T`6@ zF3%19s~S-^8h>(#iR(>#YP>cb`vqM5U%`lHlEWAXoRGv zkgrz}BlAK6<24hX8DU|B1VlhT;WSmgXhTl9>&U9W4y6zid;Bv=>1eHjdd;eH<0TQX zXS|mu>$@x$tCoJWJ9VNM`On8yTq8u3b;ifOOxaS7vB5uu4a4N_hKpX>?&ej8TX^A|D80 z!n#MK&JvA6t9^Zz2Uw}MXYPO2Fov0uv=wpv1m$C4hFG#?#>ocT6v6Gs92SRLSI_p{ z9;j}dT6}M%QuW*ypf)UaWM<3(FTEW9rYht`kA*M$z;vR<+8t6;I<2#D^(zuD=_^%y zMJ*}eSrIDEx9d7hyA7jnJJOIkIvutL4Y|td5HD zEq0BVRJ|a;^flES34}AnL&I*1IESGjo98{`93v7<&(JWUtDa*wuU+iS7>ec0fF{lx zBi4zuCJ!DV-BhxjdA1S623u-#niE*4Zo`L(K$Wq90;0~X9GvS>EuQ5BRii#On04f7 zyRo4&?NKkm@|F0ye0_pyPk@Z)UhYMA3kytaFL|An3+kc3Ksl{fAz4wk?fyu|Hw2#PZ%G__LDAHtE{qXL5h4Zc zX$BS%R@zlBFzz3XDO_hn%sR6zAMkrkWQob^l}iO#4(*R{>B+-TvIE$-i##|G+%{`g7{vevGB?prue;+dtr%qHj;8%w)^U6 z$m7^)T%G2xjN*b#GQs1fz!k*i#=Cc3C)fE}OeFE#0E995R`a_RHW6Z*WV|=s1&5y* z8h&Uv8Lzs))Q6GSYr2(IpU=WLE)%+n^*SD%ioeyyN4@Gqy0 z8@PGXtuw6gC~Fggyt8Y2Czp?_{{x4(jJowY%#9fYz0hiAm?TAtI<~$te{g9C)VZ!z zJ(#=iZ!|=l>wYV~KzYbBSD+dI^KlGZJ7w|qPK@XwWTd23uraOy;abHmeW%^hrT6c*t5c;E@E96Q4n^Ac z?oXMakR#UGo6^Tm?_5iWe?}^qyU2aSOOAbXbU1+jw5@(e`zQyZZ+xUBp~t^H-6%-! zX0TyiL7$IY?(ucMN@M8a4XU?kWx;(ARnpm@UMSM?XMvn|JVJ3Y0@ z6*8V?QHpY3=8L*l#+u`GVPQjiIVtJll!j(Ste}tF`?Yt|yRD6}FII4W;9?mAJAdfg zz`_bSWIl6J@$}3iI<4AGgc&M_={oJwOZ-D;?`QwS@_$D$*X;JoX;PF!?*EW(B)taE zv&4d0)n+iC%=;6%LP;Jwb1-Fd7v^~gPb5o(7sf#~rx~lLklPWY$m63w32N{>Q2tMH za?#i4n}%+89?^^_v_m*&kUUH2OI>c;9>VL7-9kcP5q(Vx_hv&x3b}mVI?dzEF;ktr zrC!C7x%PdEYUf7#D{dRVA!Zb-hX`PwoA$w3YR3|W)R8Q4VDWkyKVWt=J?! zD=1;*N^ZdBLu7{b7A!7OO$9ya>rk!9}*;@TyRv;hiBtEP%)^AWlB>SA!H3mO3o3idWN7XHxM~MdM=Jp<`z( zYk$uIgd_Qu8>lvu9IlvO1^?Os{2w2$1s8Fd>i(dYZkX89?ZkeGNWKgLD4?x~?WJCB z#gqA6-JkR~ZVDJQ(0R0U&k;rR#mknj>FOI~pvlenWyjC%ixgDxIR&pJ=l!{+q?OAE zU!ve!6jgNX+=D#<8Rx*G8zUO#k>^&Bf#pYGN()8zV2C`-t_U2l* zHlJ)FT+T2pFOw_pM$pnkmSa4}gr&JA0OXzy{Vb#&EcYO7+f3MrB;$9`660gmC+Yb^*dfM$n^Ij)fnqo8P42JeRK?-`~aivUc zH(l}a=VDZJyY^_&=;~tCj)uqSUUVk4y0(R?U7NpfDQM+}bcP2iW4Dj6s;Hc!SN6Lv z;>MrzvHk?H{YtowJqbTL+zk@VYq4F0BHMaJq5v&gJmNeXn*@dfdj`dlMhMhhj`!t4 z^{0%b1Gcd(a3?6^E>w2Cy6_Zj`D(~*QEiamuT!;CH1{e*2u_SY3(dZ|SadYj`#pO) z@&3i0Tobq+PmIoh$;#ZIF=w)e1%*2x7q;Qty^~+I(5$hEno@R5s7)z~aNx>7fIli) zi;jAeI&>U@(gXQ}lT%|`0xcf7@-0pSIt&(YRzf!=jQmc8nlYdYKQdOd$de)*iiBRO zavPVcI>?L}O1;Xd)ZwSvPlu$#DtBKwQxT8@ix?!(!^KUf{OwB5hbXS5biJKU@M6gU zDexs=cAM;oFmTr4_p`Ynfu4{O{4T%m`s_e)@wid;^?P1;yh|Fh1S+)6$FTv8d9fg_ve9?Xab>kRdgwBg1D* z?qJCn6q|S*PddE1(mK5GhTGKn@&@kd({IdSGW3{q^;fCs+%m7l(sWuxL|HOq;5!h& zT{OI*^%B3Zh6_=~ZX3aIdv7d==2YW8x%2(JjxCzOuEkuqPPbK92lg2-s%sYnIYnxxopX z$l)i^BJA)3gRZ)FNpS{Y-kzFnZ)Kc{o8CE;==W5LqT#k0rNw-QShIJ{O`ZkY=VMp zWfSok_IFVI--rznKu_^8+`b|B3qSk-wmz|l6wBnM4 zOx1bUBJAn+Jw^4`k>sFTuU(SooE-if4voWp5|*_cE$V{N7sKoG{_)(QbId!0qvq_l zF#YR2Tm=fw*})EuA8+mN2~EcY=+uLK%uN4PcK-7N<(FXm?$u@q{=L@yQICFA0>t#% zau(nR`+q;V-&w%d?GCe0`f)=1{Yx4i;AVdJWn=pBME`Kb_h6ibM?|W9{u<_g{s{~u zsLnU{F#XFVZrQqvQEnlF>Hj+5gWzU#H%>79^V9zBG7gD=syBsi?VqsU_qU{6%kUbk z8!<8c>-ZqSGrTIZr1md&#t{i-Vi_ z|9L{j-K_oYQNOzNI!QA!&3*Qx-YbpAXmaOdS3wu8&(|K%NI5`p)d%uR_atN0fjZ-y zLeOfwUhd7SqIzliZIkP;XsfzsC#I}{;FIPsu+Ybb?aFV+$M%d#H#o$4bnOte@P0Wz zwvGYX(S1i!O(Y$F$9#|Z8wJ_d-#szlIj5*vVG!}`*$sxK<0U?(aN!?@c&-?Xm5(pW zsM6P!5&GygpsUh+=&PrlN3_R*Gv| zm1^V+#;CE_xs12FtSyYRRC&^-N~<~3S-!P>B#&JtzPm%1V9OiO77tsAH1SEeWSvwv#KRvk5=(z8N{jBw)FuX9Z2yfSpB z#ZYhj<)kFG`;6S+@46GWITRhtiG^uACLN7YJoel7!co%B+_1S zo3(3y5Z}i@;U(6UfgnMK?CM5&(3-4OP=;SCA{dtYSoIRGNt9raRWwY^C;M`GdmDGa zAE3m%uNfo%p@#r?W=ps8Ap(=_#M;HDT8dc=Etx$U4RGagn#JL-Q{lU1qdc}&%PKh2jE@~6-nmAQZ8c4y@ z7pXlC#V>~Y+L}ulC~IZjx)=b3H{LN(w)z=p86xm7jDWF3NUzTv4o6?}88K&Q1SLd|LrswY5A(LqXl2|f)>!JtikZ)AzZR6<7Igj{HY5|Q zxPoicdiUGUVXq?r$E}ncm}_Dbyoy$kK#o3SROk>7KVjH*`$8+9ed1fF(Rj>Npc+z;YO{&oWJKz+^Uz;knA`=_0zS8(j zSA$=x)h33rb}+_5m=Bd=3bZ(PSBoxhAqSwyryQW)GRycJOEHG}`n=~GitKj!Q#C7I zYF4=2E2iQ$_3LgA^WGkgKzkU^xTjCuW^zjxuvq~GZ4Vy6YU;1^XUF%lWV0yUSxHtl z*~>k+71Ned!NKV+{#^hKZQ8nP4He<-`q-KKYZ}vl{LHHY$(hjn^PN0WHSF_5<*Vj~ z$0tEu=op_0gfiRX=AGE$$)O=fI?%>XJSJbW7)2fEiUJdA>5tu7&zaSs((^Dh#Z<7+ z6^I|vNx0!gF$c=b9}F^zAE>|gq7>`!dL$D&{OUrM(#CQX*RwvbzV>WAACGU(Ft*`o zH>lzjH_WZM`1`Q|!tY?_+-!BR+^LOlOAoxoDBO5A44`73DFa;V*s`F{a=cuAW2%Q6 zP%J&&M8&%r3u%#UTuvs8@1P88ZPAXVg)PV31A9)FMC5|5Wbhs(Q3GacZe*cOE+B96+r+ehG^Xt) zWuH~lZ}_?KnWu9Fkvt8m>2BG8Az%7pI8fZ&GDP&@?|t;G%X3y8K+)4x z^Y|eB0C(`1Y)P2vHJ0`)DgL9|YE&Z$FFk?VM$Dap*qHX+#NqF9{T}4{QKgKt+3VCc z3hGzfL0WJ@l?n@fHcrB|sbBq|7fbwTjLO}ysoTxYBq8}8N&S43!{wg!PYR3j9T`pz zeJ2aU7Pi>UoT&;?Ww7m&Dq)j?6{mbqXL!@}POjNFbjRMt`@jgbzB?P&aGM+SJVlE! z;%xxhzb1z-Kk4WJSYm1FDaQBbT7VTPf5^79>n?QMvqN)4462Ba8CPr{x_yCPRDSD2 zm(A;4S8&CI6Cj=kJUe{pS$*?42t&xj_H?qxPoP9neER)ZCxAC1SIG8W>U-*RB!!-B zS%>Z*z}f%})5Y-VtWD%--Q*5P<3>C9u_-ZBbm<9#hz8tMgs%+nA?Qp`U>+%=p5As_ zb#2Vg|1gv#(vRsb%p%I$0mU-VZs9X*Fsd zLFA1Bd^U-LL(&&0MMM)GXR>*&nz~YB->0vEs#?Ndhozd@=C?u<`c(HF0K-O*u97ppVH{!ER?sD_wTYqlu z*jI+%f`p~Y(R%IyIE@u`KkZktA z|KSoJ8<-6R*tqN7bq7|lVv$Si7ou8ULw$_C7d zrld87FwI_(wqk~`b#!;JU3T^46Bx0n8LwB?!b(lq+rnSw$DkgEyIoT z5odbeZ(@Jr;IA)0%Rcua8*-);Y3tD{0@qk#OFJtp=pP65@jG2~Tjd*6_7=;#kN9_( zk=ZP758UTwfsZ}#S3dKJ`)St$M(O^2t?-WF=AIyN(!T-bIc?>zK#+JJt*ofcXNr=Y zFb&~jUBF2;E?C6S1`5{zijw&lnn!S=Wad}Mha{1;IOJzu?^vr|Jv;Epg=%a?@YgK{ zs>uml2Vqb)C_>~MG)R~~k5Swa3#@ExF8-lMt8Q?cdOHRVKaM%ebECr^1wawa;nUlN zm-3}Y+eAkc?KoEnTEPni9A0n1YFIW%69*na)@fuz1_@2nO%7&JD=)&B z@IMVyme{_IN+)pqQ7(A@ax@!rTdBX`(YE#z`iWgzHUqNQ{p0UPt~D(F5^5HiEA)`! zxMwR63z_xZ1d&Ce3yD9~c!#n;sj#d3jPtj(S!1(>U6?4;gerR584JLFfT|&X!r6Pf zvZji33tFR6F@PLB-JmZssGhH;I3-y z>3({ABh92#_Cele#{2a=*h@&0xMJa=+Xb?a@eJW&4}d|%GmCu+%MX<2*tYiVUbTF4 zbhAgo`HX%+0f)tH!HaEds_lVAEWFnBb2+zNuxoLZ#`6_o+wxzK*7{ku6(#>X5RaAL z`cf{u3~qscTU>r6+}iqtd>^_ecM$-w6osa#5dXq>wIIW+Yj3(8vO7&ep!8Ixs}*L) z?Ld(e-@sKen9IP#Q=BhIYE@g;@^3Wow4NZI2Gxjkz5M}|?8O za4EItST*fP?k<87UTlmfd0e)zCaAJ=pb>YnD+ebGhX@^M`5esqrE^L7Eun7*DqM2u z*E}Yr%BSkY%O{3zGP1JqNIJ%>l(s=D-y}zhI3k>#mJ#RWj@JFA;R=E|{ou%_s7-AA z)US1QTVpqWt+3LRX31ptZ%V1`NXUE4aZOEb=7%f^n64&39n7yEj{D{7B2u1%-QoCU z4ahb|~Ki*!(Yx3VVB7*;&&#wW09Ye1>=J9Jldj*YS?5 zgwol!yh}9)Lki~uS&3y5d7$8qC!;?pgcpRkm8a!X$5W`Pdm@yUo?H@phnX*IAMF5z zx07_hd)P2gk(o?s5gdBcDlBbMTVVuc&cdQ8iI6o553rm8Bb6gv*V6oWSSkachmu052W3E01JLi=fYtf5^Vs&?M+(if%=_Rdv^lWG+O~BCaGUHUjO-xY zXXig2$jY;aS^)I19w~J~;4gZwM}W-H%bGzjTvXe?Mz5TP9}3}@Yd>-&YHyi)vf>hc z9!EYe_rl+Hv4MliXIBjJQg=XY5r;kDE*4a|kM^Fb43-@`R&cRGl-&=>wT+ny2evb6 zaYcxtz~wjN!x29y(0*ynj}KulJE@Vb} zaRdPG>z;@awy!mC=pAMrA1bRY;SA+uA;Sq9&_p6&o1*2YR}@#S&qJxOT>wBo8Mx2& znt;)pd|?&iXx>eLh!VC5M@eO?1Zy8%M8jt4YboLqScQfCS_83IrS+NH`1RT9rR7f{ zMu6h!>5l8%1Vn!hu%ya59}9>ge-e%C@!#g_eRu)L$>V{xJIk-wZGgg}>-i~*?ij_~5Qn{czCGQqs~VVG4!q{e z@ThFO@O47?tsiFCk{KC?_ZiA>$YVI#ipReI&=^SrJ`6Dr*vX@dQ$RmMVeMPM?o2v7 z23CvH{Ntcf1ZQ4rV3%H79VZz9Gj%$kO|UiB*pM{`TmkPVzEiuw8sz>;@Tsl)N{pDz64NO#Im`-cZ?SfR6oo&)vJSF0q8HNQ5zm_ zU$&Bz`b2l&8bG%b6|91}!?$Ie5xE&Atm(S1Cq>o07DfgFRT{_m$fa0d{l;#zPnWGV zUQt*?67{oQ^8V`4^7351=OV^U_5>TL^HDqN3lrB5mZxnyPI`@{CSR^XQHiJ~$`w{^1_6D)&DETIFx!Twhy@_QB@g=7MajJ_fcIC&jmAr zQd8pXNX1h{DJY#%PZx&8J=GIODqWIbu_lfxkS!pcupV{V&hX~8z7*DnnW`$$ z1cN5|`OD)}QY?eqX=vgRcu2VKw7xuxwTFhDi9jNij}M5Cbpt=pEZ{VX70>sIEG5Er zK^26g8Cmab1AzYMOu3qn2ITfeG&~cSjT61n%!2?tX?8N-dn z`Q9r|(mQ5A)s%Mmg+zvDE~wBQ1&RH_)9&XYLiFH?!0aoJg_s7jDw@tNd*Q#-sA19qXf(F02u+Z9J0hbqFf@{N$3vokp^w zckqv5j|T9`&=@_VKWDuQ%JI2@r|kjsx9;!;EZlcHaB708IbuiM*AVgbqL1BT2DBX; z`=Eegy~CE0Ha_F`pc6z>TIrBu@Xoi5-ycFd4gdTp-K-TwkmP)FfG6%tj}~C~8O=5NfJOLJbfY0a7I25sXGx7zFr%A2=ze9J8(wR` z8)OT(ZR`{>+9DRe~{>5pZ~Gfn`7d4Ng~vrS!`u4KX7*+K=(s8L&*rr*U?WMB#1#BvcM(LnjbNo z=P*zyb{xu-0gXfBfS_VCRg<%t?FVdJwsfC&E5nn=(^v>fg?*KJ4Uc7Q+K+QjtyUeA zqAV3Lz%Vuza3O1yDUSqcO)%C}{-IEhJO|BJra@%~rpTlvlx1S8M@$Z78|2vR)H< zh2gnEZE}q8;8j3{5;7r55@F|LbNp?#1CsVc@>N9IED&UdMKF>i>O8|cHlsUF97{?H z)zdT|@naPj5wO}wkU=t*fQMs-JhdbX<_Dj`0HeMpC7YpR5kY+7w%+}N$xV67Z=l15 zc}~@7-`DW+HKl)krVNPog90Mn8pc4jz%V5Y0(N0W>2;8?c zUwcC_CI(E6sigY`4f}~gx_%jk4Q6)-G%7NU_N}J^Mw-{8L#Zj<%Xb3^Wa_1-qc720 z`Es+H(fPm_WrTI{`}AGRy`{Ws``Ha&`3r3-Mc*LCx6g~OD65S=1Nm=YcNqZBOMne7 z7SajJ1Zt7n{L59)Qou2B`w~<%_RP2|*ZOJK+4*9E@ZAPNDzmGVR6scfG^|-Y3+e-v ziRw6jm6!T?-uHjMs8~R&c%E5l44VDBL{N;51BN@Xg~EmRmozCRQeR$OU;sUQ>tqQt zLLAB>TtBK6V@q&nc>8+L$uDTsd<^Wo#dZ%wH6d`0qRD8fno{hHooH9@5+@GI7EHUj zR&$UhpykWoC>aK{@)rhV)=5)T2JCC10UM2v#9btT9tsBI+#~;p!7TtO&ni4RcK7~U z%1+y*z+&Y&Z95_h0R@xMSjdJ(XxV^;A>j=4uWYeUz^3{!I{5arTP~grO9XD8AV7pF z5*xCOV+R|r>WPFd4b#FhuAW9fd8>O&Cda}Zfi>o@8Ns3!=TK3&BZK*`i`uev?qWaa z%P9cvB&@mTapI`N9qJ273?IGLx3SjUHj??tZyvatS ziyaezN{w^MY2Tzz#<;y=6metWLEpdXAyjE=FyN1PPhGpC`TS%>u+oNmD_<}}m&7&7 zRNrWdiB=NxH#u-iIfL!@V^=FdyWddoc+j4mO7}>Cn;=QmH`Vc!nS_Aq3!|HKISYh9 zajD-OK>glxLll*f8|$+wJTEr20(4zFfUAF_4mz7JuTW?jlOQ?3=rd=jFIwXx4o2U$ z{A(Zqn&AUhhj+8G&1~OA0@$6`K>oZ2np|?()Ilw9jUoF)yR;j$XIZEh)HfCD3yD2@ z0B-a7R^;p$(F74r^hfncP2)gK(H)h-C<`nz_EPde$E#E1G^kJG?{|PVYUl$Uz1xZY z`V&COv><014_03-dX20nnf7q@-p~WcDC=5)WsEO0Oft+P7%2h0ir?RO(TJMkGOh;{ z`{$9Z?RND)(5=Tpnd=7(g-rFtzMr2ZaBT#&IbJQ@ZMt^}#Ntj+^vt2wG{g zb+5?0k^18Zh=@9B%4%$zb9LhRmUVlib7vTGZ~)up8t)7Uw;hZ&Rh#xS$Nkp8CTN^V zXm$pL^Uj-~YdVJkabIJ=*xytN$RH#EQKE#`)gACoQ_B&&t`+_)`<5Oo-W!Uf@TJcW zH@Qhq0=aJZ#cFbr4{=Tp%I6U?P&(PN0;P@g@)qqSdn!j152NkU* zt!TqvgC^lVmZv;0{eiSfy?|_x93-LowKz#{r4vdsuYc*0&w}CdVgY6d_xyP8sA0Nc z-ujSZpN$CyA0#aGs0~<8IT&z*ktX$$F7N9q@yM}m)CaXvFa)0f#_p-9gOg1X-_0RL zgJb}#G11{Lm~P5QKN5zTfo}$&BLVvw_UC>b2xh{bFAckPpkav7?^_Jw*9>+kTV#0#@2-`164uAuq>qW03d6GjFl;w5mczcI?bH8q*r4ABAfhnBNrd25)<Q1`s&L5KPTr5bo8(s|~-@oN##YEZf{*W_8yNbuD@MgdWHL`2PiHDymVj96QSS z-7Na^n4Exs=gFw}_9_>lShizPoh2SPRa873OzzKEYinyq{!f69**QtHSfAH=JIYdE z*R{tm*2DPKZa@erb5DG2M#T-1)=fPNk$$#z&b0R8PCmfu-w z_hBH1g2rgMYL|zgPvXuJ*`V|`bZQYs;i_10)r=;#Vu5SjE3{AbrJMDHKvflvI_o#V3 zO1`7eF#%kD1BmpKI}_q9N#vo3D8487`P5rO?xi2^i`oM8&S<;=QrDx!sh%!+oLS|a z?MWgxe=Gt2Q>yJ?#O)c8X4bE3PKcGcpxfy|v}>m|wgX~$#sgadhMP=4J{W?qwOioY zG6iM&C>5ofd?gQD#+zI_J>JwOvj89z$l!+b<5dG}0Y?M8;j}bYb7R;xplW_;{^u@P z0)```2a$8*&h9IjKw_9Y>Fojwb-4GpaS6Q+F6zRPe>4BLi!$*8#(2+N@B+;{s_GN(6CY>-gOeEf^Da?PCEWBl&H;LK&EcYY&hwd9K+8m( zG1Bgg#oHYP4It3P4Cc4!5oGmn`Jhf5W|+wUWUszVZz5?zZ|~*j=H@;Zc>>q2?gI5Y zpYAPzI>!QFC<|O}cwmmFb=rs*4+Qd};RQpUbVk1<2ODxQoyPeO7v4buV_9q%HUDiP z$f=ltD4Dc!B~r@z8l!Q!6sTQbt>)foL;`<{9Pl*tl$CiRI{g3y7#@0W3zTb0nt^2J zjjQ2nnV=VdtoQQlb}uldn(znj+Rq2`Su^?wr4<^xj{va95XBjO5!YrFRs-M|m`sYq zI>nm}*)5_~3WKHXd*urZtC0>S0MoUuzrw_N&)w@fPl>`rQ1wDAdqAPXfciuj2-aCf zf}RaA&;Hq~|n4&1A#EN4^xDi`s`X*L!_8@p7ZDo<^B3mwBd<9S}{U zY~m$mvZkOKHeO6yA_KXtd+qG--NaF}Rg`0(0?5qy&Z9aE@G}Xz^spOk0EtyBl!3<+ z2_C%gv#P5*ZDxaY-C7H^Ro`pIu&-Fou5cXAIxJkT1aWxf`n^4!fhRSvySUB zAfhQ{t7D=C_X5vi!Fh8V=51HhI25k`!n)IW7=;)F{MYk%ae!1wY9RWgcMMDgSODI~8kFNz~FnyQ$vNVqy$*IGtI)!Nm(? z$mfm40I2cGI^SFtTLSQmeBY=?5EvGd=Dh*Akzt>$r;*BJ5Eh?RKTE_r_k!2&v<7kr zP6aOl<9^|%)F#6Hc3gTLF@JMoEz-w5?v_#5TZZ=r_(bbJe7^pCxTHv+@xk|%#+RtE zq7FuEvqW#09X>;_-qsJi+Go3u zyjK;>7kNED2|AMIIi3z}fE&!;uNGK%@~Syuh>hJIQ1s~vfOcX44b(Y;%vpF80V0|7 zOcKe~n=8YDx(>Xl46lT1&HkW5LOsKl2n4z7K+Uob)ReaE=m+Z5o3udDb{pe-TLaWp z!hUB8;B3RpfxBn}v`S&0UyJ?(ysr*)y{@$`}9$S7EW&HSeDR|Ek_u#NGC z0;&~D0fuMk3@Nfwuha^p&3#rYpy9ZvA5v0o=Gb=gYw-MQXq2&R>uchN$#`V&UoK!k zjb4!%OHam3C|#SHjF3T za#lWBPpU*Vh!R(>z$I>AVG8qss9SplXRE8P(Jfq!hPdX`$s~MxNctP*> zh?RV@KaAi=3*6B@9=~D;&m|HlO}`N1?;k|4R1U}bmJzo>p}eE3l{DSK+)4wMVxA;M zx8VRW9q{ac0q2%(a|nccEWZMj8}=@Sep0z&1-#5=OvC|HOsj>W+4D0JXAsQ4vG@zN zaosQU54a%8x$c&D(a^9np~BZ<;nE94MY{dT;nkdq5Z8?homW~cuOVidPKF!U ziT~1o2Vj_b=C7|L#0Mj^GKbOu5lI3CL2U-;pk!#lk)KW*tX@#!RF3Os+v+z?QhD8Z zxbS_WO3fc7c@3-~&nlq;Ee^xPS~69E)- zX*K>j-Jvof8L2k*wv|gcc<-qLT)BYst;&$qfg%_Ua>PcY{&Q~4dCISFjf`vvmw=gS z1$cyP{#24y9aI%@8!DKH2-IopmTI$i)f`gfYrq<%Q?;uxa}%I;@rt6vf+tO$L2vQO zb$x%~=!+qiGSKSCAk?rvX6!A*q*^PMYQl4fDfXde)luLHpkQOrrF~N67@0hw+Qjb3Lbz|srWyWivuD!XRA<>MwiK*#)A!$|g%UijqOjjO7Z}(%i6dZJZ zX{yJFLzD6XM7kiaC~jY_e9V*)G=srHd2y>X8$jgT(R1}&N-PJmY97-yf%WmB&in!a zTiLqxAJwzJc9xj}ZJ;h+tE{O^_VhK@4WpES7=-#bD3LYQ_KoA?lP>l#+QlNI?Xd~x zAFbMte=gB=;NQx#1cVNJD~1$6IUl8!xsN7> z+k)gTRwxgq*weCW$o(q^L*%c8n|P+O^POpy3P~S2#CWBMF?iR^1q8Ppw$%0iVe7l& zsc!%OOAnPD8L^?JZrGbnxvx#G`?93z@2${zSrDGp^@04-uWUo-fF|!H3*Sq_^ zOW)t;kNffH;V$oUuJ?7l#`E=jJ}*ST_ex$DxPXj+^iO5N5KWtLaVG2wA9s=iLq1Rm zNI$OdZwVW^{IHKY^}BF`?JiCVOK>(W^N%wmlUAi_Rto){(AVyws#N^Z8tH)SFGJ8( zp9^T535>j@yx=`E=>XE%!c67y4z8RoO{MhID&+uY8bGVQXDgg)PYgKl)t*v$D`h`lMJ{wXy)g9F z+D1y!W92C$%11H*L=@LmCD#OKK?C0G)hdsD)Cb)gxkXk_m0gKobkVyry*_(M!{G*t zz`pk=KUJ@x#^4>ufFjgHF}T&Nn9$ubDDP#3#J3(`s8D^4M;*u1gv5 z`^*ZN~_A2I@fCt6wt<+oVLc6@eDUtgX! zqepLmxWF#70jd1lOAfC?hF?=+O3K$cNt%)F6?C3+|6^5IgDv$t(?Xo&+U#H3Z@=mL zFGL}2cL=oI(q;Xc7ytX#ff0`~3_CJYO`#sofmDCaA@kz0!ZTva5+INzdTwVe@Y1)b zjG_iCVA2%i5bzK?cC`%PXc-Ci)Z!JO-B3;U0Y$>>Q^NBDZ+I)9t8k}RPqelNqOWE7 z9S)^$X+BJY${ee=oE_Py0{SaFJOFR8{r>qs0>W5x3^6QuRxJ+%AH8>PF?{1If;cu{ z?`@S~M&pkUqe9n^;m#0826J_5pAoe zRTpo^-mO|OOZ?)lJr^^`$EdwuYlkl>(>v0LYTkF+mYhfbd%==2UqTe+vV>;}s{zm* zIrv4Q?ZeBkCGGu%qFbx_2gY)3CCZ>N`3w+dm|mi!#81QSFBL42whqA24^sJ9DpTD| zCLvlZsA;cFRpkQXw35wz)ThiNE0jY6BZ)x!e1UuM1yLEN=;ciTnCrjhT9g%ktwp=c zxkxV(@t)(qg!hqDd6X8{q1tEKtk4u5rPXdW1kPouo5^NfyvRroxBn}I6(PHHa0cO5 z?j9RQc(zbFCLule-mwHsecXgoKG{Ihw1lV>1HE&prYQ8|85>-5ae9IbL!0 z*XGo%zGaaxGmb7j0zbAapG<3nP#;(J?Hw#AK z4q&lS>*jaQ@q$)yt_Z}Mc->T}Kf>CjJMOhGSO_mwwfLvRd#k3af8$dwOxm?vy3m~S z<6A=?G6Xz{qj$cioRxBl0c6S3fTXq^ENc%-ZGkYIO-4mu_-F~R&1|GJ7g4ED{?-dz zwut78BK2B7)F_+SkzO`kmGj>bD(L%8$nG$X^6C$4zs$hJXr7>#dnA|5wS%i3(jPaK zNObI2Qq#UhJKEi(*)-%n$KB5-m0KM)|8bY5c$v!m8ILfzK6TywV>?Im2)p1g;q8Kr z`me~b-xcuwX)l~yOfh>)ebKL2pm0arlL!u%Y2Z4D3(Pi0wag>QRsON_ua~`FCl1P zrqSl=iXk z6(0%;{BxF*PtQTGra@!Vji{+Rh|niYjkzf+^Km!;ZqS|HeaO?=Q}>B?SYLsahhUOJ zI{igPTBQnY)RQa^AFJx$_!$!W>Q3zTIoy20vH6$9=0D9TL>iemAm3SP54XL&RdO1~ z=<)M`8Bm~2EOii6Co^X+&^rV~j*tBO0;Q=xb+f%3SH}9WD(mrEGgAvTt~(3LI&CPR zru@5M?D3-l(90ciRY^9_I6`AnkPB?QZg|saApAM{|D{k{!t?AnU-dz<+%UefF(7JD#@x1w3Kzx6rRb|22xpp4SbhILxWp z-7GkMGD_5~I0kYlpY528SzmrS6@$=cgtO4FUiBPUi@bZus89X8ZvD;QtB=3R!Wx3> zd2-Fv1RR;F|Bg0d5LAp~n`YwFJDl|Jx2`6XV1P29RSWB+{wjjL=v zOgzmESm6LzzbkD$&-E`2~2?E2v4-|)7GyR<9 zbtX(Y+Srtmbg$CfNAi=r=-RpX(JVT62#v4!oYq1^{L@pt%*XGq#_Mi`o!~QH{R*52 zOPYpqbFV)yW*3Pd9g}qvmeJ*JXC~Uc2sVbypAca2j)h@jj6>woM0+hLj2Irc97PsR z@Q47Iac&)C({LfHEfN6hI!i_}i5SPmi3dG@v23zoO4ii-H1F?s^Pc3qbVw!=>%ZhZ zTo^+vQjrtm556Xk*N)POa{l6=s8LX!y5i(C$IvcRxOt?JD8w1jwKSHNZ^ZD=$^Pee zewBfjV&p!xW6QyJG+@62Y62Ii0H>f@DuDQ;PUC(Lj7H62aMm-^KnDL95ea-3Vqa~$ zH41~{qN**g$HU&Ys8Hwxr8Bkn|C&P8sl!9e7(4%_#uPDILyrNbw(V0O=>*y6m>Qsz z(=Zy(gw3icyl)>uY$~mMw0n;`Gz?DdOm++>lu8`5V4TpX+f(i?@|TNYpfKQpMWc0h zcODdE0w*2LX;CofoQlj8L5ZP{z-xIMVlGA`Rvn+W=9Ssl^l4w5%kZN(f|WXR=o0H` zT8!T(rZbCHuKqy=lJ7o=W7*~nag_1bFG!saAv@Q!=_b^4et`$=kh|@P5=JIiS|*U*qbzuc99-BtxHA}10OC^LmaWpVK58!_eNu< zeR{YgW3KluQl?$I$;Ee(Ab<5fU8S{u)6=)epa1)@I66v5TbVb|qS?wr7?h^!QejOjmq9p13D$cY~uu&qk2$ z*p8=4ov9Q{2_}7I`QH~szB8Ob;4PG4!5@m*su-N&&Z^kH#GpKZhftEGUn|rgZVOBz z8^lwyO8jn{t;liIEfQ@nsIVya_Ce(|wKw@5?zsO7Uxf ze?5ySm_oPE@W%kga>vJEz3~NcF_CzB&>k2tc8F9DCNqZ8{sC2oFYV?QbM2Xcebj)= zd1pdZwI9I9#u3ct6y^{5rNS>q-HMZs6|D$oRUDJqC|mHu;{5@C&IsUW&oix&4WYQY zk(i(H_`TgSIbI~TLX1qqQe8jn!UkiA1dykWwOXwmrEMQprA+xqVy{8PC za89&f5&8lCC@`r#f$W{V$QE;MNU_q#nYj=XYaqvof^TriL3YX5=mR^R;%R>V(QstC z=7D~8L$$z`@4&MSw$?# z_U$H5IJTQxYa?pH8SC$CwXylb9Rczax+srx{MkdhNMFS6@-dqq+5;8ye|wxM(3=#o z;N^Fk(*?4wx>d0|pp$Bno~+|HbU`BE2$HHeWMqr5U~~L<9AVR!zzpWAJzMQ*_%$D7 z<3L)afAMYk^O!r$GF=6*#P0np?KFR0Fs!xpal9+}&Yg8fh7@5;uK;byxqT_SfzuY5 zLS6QM(ts1%?WVG|F|=K5hA*mV0(Zg~n7WpKor9dD;P%~*nuJD@jsymu(dJmZ5q3(o z0VfqUu|CU#5~_ak=bSzg&w|s-v8++KYsYi5v5)+6ncBh2b*d*P2er>O;A$MOJn$|n zGc$0o91x}zl$f^1wCsYS_^q`4as)_WshHeJ!X|_|)ME|RO|bY&_i)6H`B>T8zt<4f z!Qj$v$}T7b8c+WD;!HQlqro6^2JsR@X7gw*P`39SMxm-DZ;${8U<20cb|93Ffvt^0 zCKCM91?D}kUQ}abAYeq&X7XxPWdC^2qJbk`Yp`Q*g)x(ZOb#oT=FSHn7K8_%xz)TE zc^m%*E~ZQo&vrTCCPX@J3FC7-oU*slsoEkV|GP|mIy{tGDy?(FyFe&h% zzX17vD0XN?#j@21!^W-XHhu(-aHB#Yn3Ew`)CUX zHCDC?8gI=%sYxV$<1GM^zuSrSB^Y}KByNP5&^2r}?|=_|b4f7Y6z8(~y-r9@ zT77CGbLHfpt%JQ0XEjtlla|vg-J1{+^zeK9Q)eybiFXf|g>Amp^)FXF9M0f1{cH`o z*JU%sgN&m6^KPv-IOW3sJ`Nhsv(+&;U zG;nN1!_H;ke-5u)auuzd){UkSp@zJMd}!WX7wwuU#FmOI2wW&Xmdw_2*Jr~2Gmm>Sl9LS4b& z$o}k$U7oJAmDWwi_~ek+{LhA&kPz>QZadSNWjy|5hLPJ)W~OhVJ+TCaH>X$JuJRc? zLS~0E(0ba8N87$c#zp!LD*)KnYCTp}!y!&}jawrkt1z1_0kOu%zAG~hMz0^@__emd zSsSuOj4=OR;QE}mSraK>0kg&b!}dkGP-R&d55 zCVI_*nv&7ub^F_^Pl7T3?QG;TGf6MRdnSgUE zGQawvb$=ClQCm=xzXj@1G{TYn`3-hFgT?W_=~ynk$H7u3@Bk^V%ZQ-T_hbFT^l}E) zhJ{CX!*DX#SBah{1|8E7(yU84s%EkPc=0n(xLPATF#gt87{l6P=GsrOmEgTTwZ23| z%w5Mk_=N2zzp58lPKR-7MgE)rvuL@z?A@?v3@2~<66=QJho0rRPa&Y{n!0PgXXO3w zZvtmb@-h?vtPT>#5B~R#Xe9Y|V~VC><|eA4bpF;cC@~uR36+Y^`+gc0rCjp%Ym1AX zD||3IqTZl9t_++_WQ^0740L2Utg}jXD>7&|odgxo_mF86>p^hwtJr{e_fp+mV6n6^ zf~xs|NLZZ%jLTx&)}}7D*NT7?_<1zFqeiIgL0+wKAV01Y@ibbJs8g@PCeKhTnntp3 zeWeH3uH~HApYs$l{`E?kt|q82?3Y(`bco+cH(b^#@|CJA_fCcc?~F}>r%Aaqxxd~- zQ~f@MH2&h5%-@0L7S{LmjW4GSfy)9&`0P66t}|Os{JG^xGIzY!5pgp+lspLY>XHe) zmDs~P2&!t9!N7jwa}>6dz?lPQ>!(l}%(=h258`vx5PnnZroos~1=AdV}>b|Dhh z?dX~T3M%CLKcW2&oDPCqzkZ5EMfG52+Pc>J$ho6`(#0+kwObHUK`B7z^Y7_oIzf?i z(E{uw;J%2ZXiQ=uFd0jr5?~p+5W>nLA#*d4a7Yyfa{MQFgR?VVj@HrmKE$3EVMC>A6yPCvs(+7nwHUIlrka7jxZu`H@3Pxjvcq`2k4AwSt*tT}?~|ZiU8`eR+Jq6>Pw_OsUkcrT0S{TO$jK@d?v&V$VJMiY3RA(EJ^$cWj&?A-;ugfkRCuvfVsjakw&S(o;;IjLk;!C?v`H+K5?fa( zFmgyDeh_o}EV2cI$nOabpHk5-3}+A?lGXnghX^n{z4^sMSyL}6rF*4K1E%1@d3D)I+wHuKCiRV^D|w<4 z(Aiu6>LOrV{5JB(^F>(=2=l@e-Fq}0u@lY}$|?dqY??Aokc$b1EEI-RJ5t*2aW2iZ z!@u)`=S8MCzZ&RHieVXtT2xT}05fUg)gsABuzH@C-`TvsdcjQYX1sLor21Ze*zFzA zCx37}>(yNT*}wN2D8r_>k6_N3aCAwYmbiO!L{516Yg3-2#g80$wFrWY(uD)|!1SlE zKdZ0E9F2C$J30j~XqxI4stf%p6w@0ou}>#O4X3MHOwgpHG{A9n#mJ2a#tF%S{%A&cZKdbW<&x3OWd6t^7F?n_Zh44*OnDtI$2MP z90>Aa(K}lxPdgT9Ze|<<=YKaho&w|-g5_&;Y1lekDtGTAwW4!o04j%720Do?@x&89 z8B8;qLE)J4OOR!q|6EKDuZ-`|x%K@leG?=?kF1L%xOxZ^-fm}v6RCxe& zhG%)}SIQAx_a5pitwsmITIPI9(Y|A^1cmLs-?3t5&&h$p#1i&6r?+aJsj^YeHPN$b z%=t36y=9Q$j7ZmYpy!A3-|NthcVXY7vJfi8L8oZubn^wANFfZwJrz`-X@)`x+FUtB zZ5}ZG8$!G@ZfJX6>LnJ5BEZG^V$6uUi(yn$Yf?50F8Q6CM4jy)`avdXje{^Je7Hvq zXO^JQt>ZfH&Cj_#yS>#iv6Why(|mvm8^botZmW^8j=eLMySlfhXV|u>Ws{=Ja5Z0a zfxx74A@v~`F*IAexjZ4ts;_BQY>M|j0*53+F|63nDl{={E!FDshGWqp#$7$zZ*l{rTNn{hSY z)_M3X)V+YReXcdnZrh7*xYlchaQL9K?!Jx1lr(v7Q5N-Ee9wLk#(w!Z*Tqz=xp5YA ze-^2pQtx4cM%NmjuEf^4JZPo=KwpapLkv{dz3yQvNg=R%UZ?2x;^yy}4Xs+gf*phrmF@^l}YRyNZkduQ#XP;ylx{Xt6J6~ud|i<)YgWnl@x zj|SeKxp*S5wHBsCx#U)Qj2J6?QV6G>{<`9UV{ba8u6HN9a)7gFEq_=KIbFD%%uFxyN0b`Lvbjoc2S_;2MCOi>zop{ zlWAMOUE_`^mxp^o#QNjR7ohZAe^p)oJxUaoaq6@#3a??VwUEEO9^F)25BklUa0-&A zPFKqOUb9`K*)hAeSDTjQcP;!`UJ4p=8KuzI{vqi}c!N4N0~@e}?++(k7Jk2V2YU~T z54xrnz;+<@qFQK_^4bX8LdC1lZn2!4mf6Xm-1$2DyfU8(Z3tah)w`@?Di==J6GB+! zQ02WZL;O+B)0F}p>UmYpdGWQ?1s@gT(V6=(i7Bp`+1{Z|DGw22QpR@1c(qq(ONrav zlTNEH)3Hcaij*%6tBUQ%inyz-dWDpZTU{sXmD#e>nCR!j}L)Kpk(*0osg z%3S{r&c%D~v+~A_!+q6HsaMWtV=STKk&0LNQ%*G29`KGJK&z7kkHBA~uz%ik$fFsYFc`H^}I*;4Q5EFq? z^PW41HoXNWeFHQW1fwuEUrlTwnkX?Ip;}QdfcJxYdPIAn=C;^c2hy-@05r#ZL@}08 zp~c;R$8dU{Y+sVzaEbHVJXQ8N<#1X-SL&4GTv%faFZZ9gNAu{BEnrjof1m7Kq$6jz zz^iRY4mU(6e}$G?QHgjpMJA=WK43WIK)ty_y(Wgx{8~g9f7vu$5tC)=%Eo@N+8zYf z<)jt>ZZa8eG-(azJh0tE1<#J-11p;My-=djaP0N?|z zvRJHrf3hOWwykD}T0#BmW19el-na#=n}5EK*#UO@?KjwT)!x~hq3Ow(7nY=&6g&Hq z8}e}mZ91>mul)gn5>9wR+x>8l;;1N)17pxqd7MT($))M{!B1@l`tF6kwY5>Cy+{N% zmy0v)UKdp`)cAW@XB_+4_%)T{71E$2PrT&D9(-Ay)KEWD#W>diV6nxX_nw~g5sC5U zm|{`zI+5!s8?hpe7a@g;WAaoRl<$|+SEPn?K#FLUpE3&b?$wK`7G|duj7cd&^40;R zfWeWWhS_H}ef9Hiec2voop<(l<39^@(K%eUwuA(>&RIbBYhBO`Fp^fD8k8PYt)uCT zEJSP(g@MZI*69E@<+&zLjnLC|0igZK_mPNsUR4SgPr(oiW8_5dJks$8YIE!6{?#P- z0m6E})c8+XKr0Hwab>|ev z;-otWt07X!ly#uayOgUIZ;1#4<pX_Rpa0i7+ zS4=f;g>w9ssltVgA1)qmsKy{m%#SUAQu$Q6l;zD_nI9uBp_}VJ(GQ$D8<+=Y2?Gd} z&)w+j;-|?7NQD*vqs5&m_j$5t-Ss^@M2vA}U+FiJh4)Pv{Z~GFW=Ch<2R0N?1GxYSYKfH3Ej_lK*3jS+J}jgh~#)hd(t*&e|(F4z$p>e zqEUr+(hnE5UkcB3kDYq=UI4X+lqoQhbZX_Jw9BsB9w<&es+^~mlZj)Js3U)>3II`V z?yAny{V8zb_o*|uvO6?MIqcn;*HfLlBm)^PC`zHC*C;SA$S%VjoVwgCs@Rt*1g-)t z-O90<3vZ}U%Idy+DlqS=Wo35+s`l%Q&Pe68PEb+{hf=7FnE^zSuhF7NG&==lf*dY| zQU$Yw7+DN{@62Kf8A#>($bc}6wOUk}U5!n2vA#gNpCgh`!@#`dw$IYuW13&am%v+R zb$AF=N9BI@cbm^c%>H!TKHxF0e=PXrdjy0&N96S$8B2kW(b@JDyj@B!02(Vn_)-f{ zB#&>F-L1F&)kkQPnu{#lSgx!Q?3`gty*Kwt#4aZkuie==qbnb${{g}bg znt`jY=m`RfYNPk!UlpSnk^9TK+(N5F>?f6U98@unLfh6rU{?}XYSXF;vw#7Zg@46^ zd8CIqNtq4Je_jAEyq&bS$H(}(>Si~4aKVB6goD#PIf*SW{FtrS zq_1_3yV}#}EGbUSW}M!uyV)J6=AR_mcw&LCcn@221%0g~UYW8`c$y@2*RormSX*v~y zo8W7T%o$#L*1Tp58rq-}b;lBrj&%cYVmGqvMwtPA%(+AfSI~3J00O*hCTu3Fhq0{{ zb_o5D-!f?)HBLLhrCI|`%DDh>NL-xxLmv9+wM8nE+vnI>E3P~&Yp2_JPF@5cgRHD^ z0`#J7fM|0Fb^e>F6apVf3$c6g#K?3V{!kbAp4?bO8^cfm;k5abr7gns2P}!)EN@eT zvTGWfxsRj=aLdl9MmvT(Z>~QNNPqDW8#cWz&({=Nv?I$IFz=S$Z#3qHQTZLgAO+T) zhZ`sJ4o<>MK02E=kMrVg&&P+7?!-Sv=7z-Hyi^?*6*HCq6gMtzz(y1zz%VIzA#XYX z&gv31p>74`f_}|Qh7t)MdF;fFk)*+H80lOrte2tv9R{E%jKI5+?e}_wNh(6<)reD} z9GN*1-uUteSLu+?^#(y0RrxnIFMoc?pTAVR?}i!32!A6ZFeN+yzu2xw(T{HDFW!5O zseK6mdFJ-KM<)f{Tu1=)bO>gVcVIjA6Kr;hK%r9t7^}mE&y*+hK!FmK1d4*o?MwCz zc4eIeN=Guvov-E-7G90ekVwtJ-{mN5H&O~sr(y31JO%pgLswFS#*YjfyWnz<0w8>| zczHl3o{y1XhmA}m@9s@MF}-rrmRqYLzka0*ibHxM22y6qKff^WGJ+wGsi0|he!UO3 z#BpYsI3mcXM?ly{GxR+7vG_?~B8-6zSHFNNaO#ZI%w`a+5TKtgMr9&lZF+8g0dTtf%I0zwOLuYRac zLR!~&e8eyQ8t?)9X@hu+A=h4lUIrfpevoO30+1UGSUrK1(p+${%hzIE7>q>cJK&}o z)kcNGGJk@wUN~f z0;5Cg`Lg%*9ylY*hhS%PZ5S308k42~Q)y`Q*L0}owios{I0M_`EV4aH&HPY1zoXO{ zYlzt;$hEvs!ZjKdH^+*JNr|*mk>(#V2HfNXu>CGwHvc9u0O!Cij?@*YrJo$iZ0t0e z+B^#(Rmk4e12C4>IdhleRxdO104I{#leRJ}4R&tTGF|y_l1lbo+_^@Q#{jLJut_}5vU79p z4|*h{iYZ1KN~2>BqQ=;0fDyL1zi%;Lz;WP;?CrJ!@r& zBd)+i*!??l$?gI4Uys^{Jjy!!_}QJ0dhw_dps8@PV#o^pdc{X~FJ3IUjtG)~-p)(B zA*dK@oUsyd;d1nzC&$PQggxO3?k$rF_GbQr(oY!?_sz~a2j)hovHsg_5aD4jY>C`| z^7}{d0WY9Q&|3Q_kALCT!W1`0@n_WGo4m7MR1Wd=_2N)C7g@CS3KuQ%FA%hGTs@3< z-sk=}&`QgI{xYMB9B5>uh7|PTYzV0Ft)#m9_m7a{ew_rFUH_{8+*kD)wGlXV1(vP^ zM2Ce4SqzE(m-}pKNY>8H1;;qPnov_b8!S!9sDB3eJ%zBXD=^15ZaAz^zDk5Y)rMGKe1bjUvUyAPabRwuJYH?u`Df`eqkrU3wM@Mxhcl>HrhGVFVfeGUOnZ^<`9)Swa>s|ExgbNr zp`L3E0zG@63EDu#XQUZ!+MTIqxq)mKz2X{g|C?)PGkfHSmO?`b+c|RR0li=A%G?S* zy(>-T)8_BIsq-pId<-w|$L+`?fsY~VD}wLmxt(GEFtaCozmk^>!p=F$*wpzNHKUks zvRxpH@|Edwif_X+kuvwz+sow0l*#JLe3Jo~FYp~{qn+CaoG3x2%Qr38I{f0t%G@2L zl0qOvr~QM6eGv8sayF1-;`yE#NPf$5|`ag5`AU6EzprEOUJ`c?YL2>u=C&J-#b+4PMnQ-#S3xy*Z{ShCiLe0Fn5WuW{gIPi&Des0RBw_dSmBLO1;3ykEn)17kW7$ym-IkAI$P%ST)OO6f%X%)d|ZKS=&$9# zkOKT@8zsBO4WA*`ss0p`^T)y2qmSe7*6~ICb!d1XiFo^jz1;bF0#A|VhNX7eZMJx9 z1!wGr7mz#yR?GIVF!nGvD%yZ+A%1jFvs`7`P2zE{Z$XASGNhhwK&kK75?rs8Cd&Zn zuK~-3uz4^RubyM?%esm;%dyZeG;AC9O#c1SJx9*b{5+d0P+OU|^YObp@1L`Vky|kc ze_Mg$>@ou}qq$2GVQ%q**Q1fy#KU%ba2i{id>YIYxXV+vGe0=_oyn#4eYl2SU;jMm z#ndG<`{^rfjh(twU58F9UNYIB?ux{p-st|rxPf>aPXjA|IL+>_eX)4Py3eAZ2zu!v zxXNP8;6PB7u%X}_MOC^GY&-%qbG2z$08GuL0UPBH8_kE zBexzvA}VIb7ru9cV(8xoL$t=5MVe0DkJRlQK$aYJv$C;s|FUjCr-elfciz1r3$+}M zaf9O|xE+Hr2x9j)-}3Bz+7S4A=lv62&a~pSgjGTNRS}jNYTUSj0iGpPjWdFYq9B%> zz{!UnyD1*mO7YWBRiK)uJHansUgl{ek|eyyBZiCLcUqKn;BuLa)YS`k)kCdiFSUk`k z)jZcn4ah%8>6Yb{bbfAD8d%Iqjz`i2`k6SC7Kz~HJxm_;=`9eVyYIhP3TbVILn_4T zg=^|G1a1->9|Bi0$_&V>*Il zs}U_dVAuUwj|sY&8o&pr5 z`qPuxu_&_0Qg_g-loUlxir7Wye=%x?@bb z+F}?V|4#p}4ac$@^A>?hXFx?_3ki^O?%Yd}<$L@#UnNz+g65k>*)iLbO*0~+|GCNO)-KaGLyMM>~ ze}SZ%tP}68|N3nGq`(nk>4N!n0a%!>d{&e{j}d?tBbQ&RA%t~QwhOr0T&$a)C`d<` zGT-+`W9aV-wIopMDAOTm`*BYw^I9@1j9wO)4CwXh5}F+H&}$(_nlm?=?0!E-oDF&O zyOOGVzkdWTBJd0;;%A`>28Jsz1uTK9&RH-@2tN{W%@2<612Aa?u!?irHt=If6H{+(-Y zK)QS5O)qlwWccBkp$d;rV@eRsHQSdW&F~Lq%MztCNJ(G#iHnseD7NEqjQUvr0EhUP(>>=0MGy=VHYvmCffRWwvi zTt5G289fg(!32tg-}Cf;p8!dyOv)6W(>1zy&AVF>?~fS(-X$lwsD-Dv_>rq{ps7cu zKFx?%x72iOGgII`&yNm254We{!f*vLF2BN>1jRk6VGK%$7q|D{6b;+uP9xMTzH4OG z5C41w2-`wP2PKp~VT!sY#W;!Fh$P#E&?N`J(Z=#qf|OJR8N)Ruvfb&#RjYO{T(E3x z#6jL)jnU4%xXbhZgQ}qzsFNc>rZ;9lWI>cfQCA+?d^&v+OyLIY(xGE4SsRNQctSz< z%AHE+i8v)m)bu?TMUD0?oC%JM`7gZS*BhZZ20O8ktBw3mAq_BuY#fl?;W|?rxW>la zUAD`hJuq1q~{VH+VJ%L?MX-jSNOi1~pyI?Q45p#OIO%ZWuY z^B)=40%)E|eQ^}uarhr;^M3sL{@1)RBA?K@vn;-25&QZl${TNlesbpF?8_t}LB z%CD;Wr8s~iIz|_`wt}E|JZ$SX3-~q6n9N5;&Kb8eC^5l^Ute@(>lx>Z6Q)d zAgukof8%P|2ZV7!21O%2AA!by}fEUlcE@0?OY8@k#g9v&6xr}JV4KZ1V-s~8`{yUF7`FC!_ zIjj)es!9-RawzCCTFDZ#->bJH+9^C3gv(LOe_x^9?Rn;0T%sqQpMz%!?PhLj5NYv0 zHsR}CD7-7p@69QGi2MROGVDj7c>=G7BV@D0r3(nB0>&F==cO^lh{7C(l^nyV?tp<= zes7I0A~Sl=U`;~$>iQSt+A@H!7f?xrubhqDz~cF7e^BT<6M|8KOhH{P_>p)J-FFLB za}xz0;;nzWt^ac}D(RT2L#avr$+ghAYr4*Ve1J(N2wY4{0{H~ufZhkR%2&?M0V)&n zcLAw^)HJ_>5&bqOV<)@vKF=e77Yy87O9Yb}=MZjt162#S3kAqyi{j%c+n6?#u}|Vp zD>}lM-4fQ4a-fNi^o92$v>a?Z*DkQefx0~K8bdYkUZ-=2h~+a(wnTL}OA+;+v#iil zaZ-{Lv&~c~lTEA05X-W>DK86}op}PuRe@!sb=FPbTHE+ zD^mZi!P-rFBRy??l_3IYXX(O;to4^2i8G1#7}+-1+!dA?l&z0{p8VKg4%pZtG+GNq zpdhdWvh4h8X<_nn!H?W0y13o+i-#5?o^NZMApJi%K|KFZT!MA};KQ+h$HtOpc83y_ zeWDsa9N;Wuy5Hh~+}XGwtE_7`6K&f(ua?)V5|-G>n+`YkDdw9wU9eU9<_MF3Nn~K@ zagQuTdRe+{1O(+aAV~0tkv_nFmXjQ7f|krXH3_{f+_bEey%~{>2|W!GXco(GH;urJL^E%nnQy@C{8r1(t=`j4KzF+4kr|!I z(yby{0sjGEtU26JpJMd3r2#yxHeKO5?HBzsN}X#6V;>nHjiD&TEc6LP~!hEnu z^@m(i3>4_vS;a71b3;p^z5F8T9$W_5ViVR@0+&gyU1o&QraNVyra<-JRK@ld9+0RR zV0_PG^4@O#WU=jCUsJ^qf%7^BiVb%wn*z8T9vdEaiTs1a7bCL-8P!d6d5_XZyCM_f zCDT5p-w_5*#;;A~f~XH#06+cb+<0C)%S5N>W4s#qHvSmUI)km=y2bZAMT{ecGV(O5 z^?@!r1Ko2&lPT4D_+8|V#$pJs7VWCv*U(=KTw@;8po+*$SJhJ|u?yA8 zwudtiO^+6gS_WOIn%V0%53IMQ`n7&>uYYt@0*mjxWO5MBlkI$1Qs?G=QPul%2x)KY zT1K)3ss?nj^&Bl}#1}zh>=V6gZ6{5O*){}q*=&WxM#G9Ow)0&$kpA#_!70i>Fhd?k zx-+VIr}2}b1$ItD(6_Dt=h4jt6oMSl)s zEA*+FW$n`G;P1x9e`rn$kHlSv&fzM>QU8WqD5GwOGe>s%D3M~Z&Y=(9p{o$C{lkFMzq{%_!IF zf^j4;g*-@Fx}Vo<1~zSO+n5HjAv24z=$dn*h47b(deT6&(qAOHM~Qh1hVE|5=AXzS z+Jk1o(dx=*HDU({Kzfa$*!C!mz4g<@K7h%Z-1kptKa4q{RJlSym#1MWn#bhTxGk_@ zog^HA!Zf#{WLW6;5S5CIjJDxsp0klGbt9<=?{@8sjq1 z;Vp2bq1AOZeKlNa&6~>~PoS%gBu3l3xI}%@`L&-ciU5IOpyqm~NQYb4yeM=fR>g!z zRAsYQ#nww04GBbLRjqIEmtp}5 zT8w0P1kdk(TP}Q&WJh`G`4wrDPu+I@7tl{&*p2eZI>SY$pU3K_PoSZcsRHWE4W1MO zp;N&5r$FJ+B%#wujn%qtZLRZNa93@{N=jOn)0vRiY`L@EWAO@wS=Y>TeT-6SOk=w) zhh|YVcDClL-%|ETMLUO1L_V89^~&d3q-8!w}s)fvq#*Z{ZD zgZfK2{hg3*R zW*BegKI>3cdJZKARct-sR9O6L<2onmfVf!QrcPbi&N+uFkq&2k(3!ReW+FXI_uWJ> zq-+uz*!uW!(s9Gy)K0RnVL{-Y>x`+2Y1}xn?h1?|TRaTiw$|5OS0+2yN4)mk;AO@K z=aFjXW7$iVlmRrpEt`R$3x9WQb-E-U7dTAG_Fzo^%{F#t?iATzDoz=v_^Z8hJA&qs zkZqD2mHA+;{9G;l65v)!u_npp@>0NUWxJhfUTfTwGTar8J$jvM?2Fr6F<8kIhH>PT z4&}$Ai`WFCrtUac>T)rc%$BbEh7Hh1C;rGlYrf6e-+RNkLnwZjHX?#xd{WHab#-`p z5bjjMbo+SV4ly`#xu-X!@S5p+*KkzxE}njTZ@PUgBHKB%r}xc`1HbA}>o1jOVqTuQ za2&>}$j#83z4&!a5P)}Ov}-2p8NN@`9Xa3}=^0_JFwxG3JB<``7t~4KP1~?t{ZYa4 zZlt9Ab$MUJ+tuc070Q9}C7fG|uD6?RY#;w5_9{=s;!Kt=Z>Q^z4LjYdEdhKg15p)k z84SdJgItpQB=a2&w+qxRYyY>RpCZNY5CmRR_Bl0dlZhV$9K!MA5mf=q3R}))uEwxS zIx}!T=uItmfU~f$0O#3@ zK{Q6#s9{=g=See3wYOM!McFk+UUQ^e%!%k)o1 za=pUA;%>_=>J#7!(T${k_vt~HUajXj_&T4|q$atk>oak#{Tj5!oXE0B`iV1`ZAra+ zoY?RDWJ>Y*u;hcF>1b1RGX*vOAz9~LBV3BPceVqtvN&Pof zf@L~y$y^=s=vhw0ZQ)+vjN|7;_0~Jic{!Lg6R)^T8@*WitjZxQ+P@eh#XK#B%aGxZ z8j&i$@O{kz`z+ptyDj&_x#sm-D@^U!9p!ccucy;iP-rKe!Q6knLjsv6qLmW~WQw{= zOd}}yV$3%;9Y?5Z8Y)x4buygn-JxorRm327nnc&E!MtqaM?pL)t&J?h=7V~a(kG#J zXqD0D#$*;(#*f~La+-;q@y@>Y_J(yvNNBVqDGswLhzO^K&bM#A@m<{1+JdvUFIN8Y z^N`CYgkCV^@CvXj-osh4H!MMS@j%3R(Hc>v28Azmw5$L{{F`OrFj?%{#heYm+Mchu zoKu|LyTIl^g1%u;EXP-WGTC6#y!So=D3?-vXQZt4<`u3Ry!~Q2w#EkkcG{zoaUhaH z{e3>B@wLTzzg_mk0Y&3zQ>&Yi%MCq6z1j_tb}tvL6eWWF8k|OH%#yN*!v|1)p7BZL zO93B?1x@c~OzKQulh9XS4Pmf#u*~oJhTD&u#Bt*2WT<3@<%5%R3Bk-wS7}dXnDhl; zdBX1v?K`^YN^~!2y=Nd)&?NX~$P2AW-PD%1+)GH<5dR$`Jaf;9`} z-)4CHIKDXcK0QZn%`A+POIc4P%f1;sxao@6Ed&)WZWz?C*{ahzzZ?px@-WuwgAS_* zaScSA>+Tt*WVay`VnkQ$0_r0zuw>HAH$WXbV9iPI`^a4?+Hk${+*#vitYK|>PoYR; zdRl4cA|iT=-FDfYy62d-_H{CIt9D`BTUj*U3NLFa7?;XaxX8xe{Ww@h6WX&LIl$cwejSf8cNTp2eR#Jp4%K4BAFqtvt*#=7{N*MH$iaH9%CdvPmT z-Cp}f`zG^8R%TQ|eEicZuep<{Q4Q;xZ_9aO>11akoB1dDCGWN_oLx$GE0eL1jf8ts z24v}j8%On+vpNbd{X@9;r(57ah7R8>^jrUp-=ELW7}yh%G&6Op9K71M;8r-(lFc>; zV-e_jKRHS-%eEcUaoWS9(1+qS{Gi3Dg!>Ng+&J(J5MzUU|L|gP;` zLJtHoLD$mkT87*=EciXPeoD%gUXG|Mln{$WJfA+dB-SJd5_1y#Ce2@fiC@Qr(OUo| zMa@bD#_+M<5QAi1%l__g0hJoF)#{@kFLUCtp`->}(H5_;?S#cwQikM^y+1I|g)^v3 zXqiaJwLhd?{&v!aV7S@;xssJ+~}7psB0k56MmjBK!stPERK$;ZV2lTxXg zucpB=UAD5%eQFZS`i<9X63Q`$#jIWxB_HBKD+)(EzB86WS#Qsb3bcyY;$dCfNbohu z8oc+pZ~fKA`1Ut*H;W9Th(Z1d`bo1$sS4lEu{B3n_dB~Mhz4ZFOv?~HSs2h8ekxP` z&S<2HCBrTc?}mBnCaCQW0UDx=kH z-fydLbg?XqV=mX=xeH*cwoO9Q!Gg=+_E4Nr(dj5P?@g(SN_hd7l-D8rfWDXuIXqkj zaCK|xz`U_ATrn`M-HDb<24v-@WBRj>ZZvkMG@B z5e&m6t>VwIxFwgfH{5H|^Q4au`a7N9rK%E3y3^xjte|cYXMcI+ha^i)&tY^m$mPD| zM24EEYsTArhL4?80wlu$xL0rj)c-=;!pVg-)%H1&mGn`YH*oQ|8fHvG{hiYgGrt}x z>?#hN^p;XPXy`zX&~H-IZzh@%9wZ)JA{VXU2aC>zay2_sa7c(QqMyn0AKA@r+j zc)(^0Hsue>#ZY?aI;C~{CVIDuZ~X`ec8B7g{{$km_89^QxUA|z@ZF8j$UtZPV!2e0Va2auj38*rwSP?TBKW*XTcVEAdTizrNmIK772--phnPm_UCCE!z-OW=XiuV7wOz)o+d7*DfSMjW3?uPNx zKZP;S=z#;YP|n5nPh}_GODixIq3=4Ogjueqq>{OV)gfF&7$N*#dnE3~)U{p#Z-{7_#_JNemwxhCXY`gq zalNq;pBattY-!FV4t5nbM>a(@BBAC4dePt>TaGF&OMr#_)q`z0p^0-Xcd+jX^r45@ z)R3##wgsORDA}G__%wdKh6tq6(g&Q&SCi7x(SiD*mz!q`mjXTUCk$lv5%a>}{+tub z=$WO5gwEC$6JY!FgAwNR?E_*k3IFJGjqE4LTEBSAEQ;6hc4>}+Q{5DomhW_!!GbsD zvmGA??`G{{P;xx$Rt06+W!UxC&t+CEZ_P69rj0Vs;aReC?tP?Aftm? zv;I&fcB6lzA_gt$71(p3n)jK$`RJiwf@$5!!S$~(|Btcnj%xzh+Fl~K2#SR!Dn*eR z0R;hRf~X+969hsOjM97WQ32^9AkskyJs`aoQA9(pp-7kBdxvl0y}KKB@9Td5w_5=eOOi%jyvA@g0XoqJ7dF`MWU;|syIH&-mwm7 zB`iTGnFZ@Rb#90H)?=6ZdHE)PREXE;(MG9% zDGHXEY`R`Ysen;QO3Q>=4IB6jKVl%a?nkFK8^zc4yaxB zv`&XkO1*sQJ9XzRhEPe|G;*h@z>fY@|EqJ9W{0IIt;^JFuE?*(u73OSQ4t3pv-7?p z6*yZi1z*n28eSlD$*ECGsUz*iODF$8lt6VdGcl`6MT9jfKm7sn0kH+#;cjdO@|*!@ zd}`;auYbw99cp#>yp*>4yuo^Ai;S|fkY@RVdNN+~Sg1{8Pn-mRofyCqyE_AB)CNO~ zq4!f8Q@7XWdOMzdYcMtI%|l-lFny=CAw-1IXS&{*U0Qqd%UbsI^B9;5-X>gOI`i(u z?3{KzZTtF@g)e@s>lDvTaf9~H8@u^a>{CWk)>A4Zy|W|_AHDsUzM6DDxt)(hOuW4? ztn09H+OT6R#Rs3;|L>ds>jMZ2pS7ku*`F~dybt`~1Voz|W>S*z-SG-b4Y|z{9=sn9 z?}%X5PBBqFD7&5`Gj!&aEV%Q5uQsz$6Pe^) z9}`2rEhb)3J?vIf`t$=cHZ#wsu2d>)Z0-;I4p7FX0Ez(67N=hj_8dy=P)-4C@{S8w zP`9!?9;fzLN*l59<)X!!i7<$JjW2*~j=b078{TtQmrx43CquF3Ri7(>!MEx;r<}i5s`T}@Puwf51~)O>yRnO_PaMc(ypzM0|VbG z)T=|_8T}4CqqP#HfOCY0U?eAjjKh~o65kc9&5)L5+9AeTN2B(rU}m$%ypQf2ZQq8Y+9O$SMw}xxFS3wf zj=?#UQUoAHcQkzrBFzCZB^j|`*T0>e9xzSc;hVyAGq{g67v}mz^@Kjb;^^^iUpexp z_WEz2KOup*V9*%Y?uvpq9+fR(JfKg8CT8Y1sI~_20=+HTfK@U)D+!*i5pc2FH$@9N zR3CCz`vdT?Gs?Y9YV!W_cjX1~*7Fe*m18aO-8jcYo|kpAsTcM-Vsq|?i#)Gbf8>)n z_s2Uu$<=2T_&J>4rEFn7AH43}iZFUD<2LJ@uTUNJMAZEHx8J&2JkFqUU9#p|7mvYV zlU)3jPj;GawkN+1$#lCTUv#QT+Vw)@+sMy~QYqOUsnf^QUY{_D?!R}ZWhf>8wcv%+ z2}e&EgYCMtw=yd@!<@Prqb4Kux#HRt3&p_~yBp~0i!Kotojr!hWN_MrB zfO1gqjOVoe4pggFPlR0BA)fdblyAY!L8jv;juhs=xIuprChuM+-cq3&@VW(NX_iaS<6a5LcC%iMyv<-MnR9VZhL=A@f zjkaaeC)5l@^(~$R%uFZ4P^Ot0&ebc`($`ab=hWpX~_4yyXt`P)n zQA;CgDL*DrKZtYg0c@)O#N_nPl>l~Jyq`D#kbOpsJJZhQo2f8f0$Okukbks%rWbQA z$OP4jDyJ_)vvGiBM$lnF7wJeJLQUB`bQLLCVU&TKF)I66o#~|{fwVxrS}<)tcBVRN zg)($5Sqi8;dK=+1!yKRJCt;kkwv`;3U*-2BWU5b3MAbGuh|HCadK!5kaNjSlNUd5L z#A7REj+5^jU%#q5{jgB*jl$T=qFP{#A(H5qL;TYt z7aKJ}#oT`*oUadnBiC`rzvD6AQ3Dri3;%P$Q zpcZc+Se)~t@6Ss%-FY08Wfe!o2`qa!{x$Z0&BgRPZ0wu0t<(q#WsKdClF9Wu%v=_gTW@C$|wOaWS{VaLQQd)44@@S zRc@w?J^p8c^Z^&7yw7rjk4unC29s#U7qzls?$JThAsNa`;rsmTd9&0*#K*F)*!*>m zEuxf*3XGA>eEWF!iXidvzdq)@_H1O1l)5ON9yjk86=af=EXd8P~Uv`6Lm&;S1C_%)5S9JFhluY>0IOwXlX<>Two!FJ97iajQ}fSZzm@J={SZN`emW9|cBdR2Y ztlaRT)eYWs1^4$^vFf~EeD$@tzgSTabc6nVApmHmHKK@I0V+@Jztu-l`8}@tV+1SR zmrbeyzGfc@q7%BtlNQ&x1iIKCAz~;{wpW%uoZ6u5z_3Q5g5Rx`J5?IRPOGVTs1;Nj z=;av*R|m=bTO9d>bSY^bZVE7F$sU-*4#s2L$j$49Z(eho!DMUi`T~CqV*E}9^B7eD-cPA=LaJY!i zAyp@NCKAV;w&9pM_0TFuclMUfA#saOiv8<3_Ls)_h2p7K?V-3_B{m1IOeOZ!`~1mAJ>LYu*wK>)LrEWA-)@@~J~$AeVJM zf*bfht#fUL-X;aP9IF~`&`*V~$<1c*^7@6-=j}zmT51g0)do$^52QSrJ1qrZVjecZ z%*=x=W8iMaJhNzKlIiX}#4tICW|I zOY5=6{ay2w4A#o!I(LIkHS`KHKS6Az@ahTvDDX#?cn2%&$2=-)p)xTQ@39J$o0nw1 zu8X9R_G2yLd*@PcZk%zVU|T7fqKB|q_U|U{zLEr*ESxLXdYN54A(y#GUQ0 zBSn}up}^DdmtZdcAdh27dGJ)hD$svck|~lH@@d^mR9LJj==bBJ2bawzC+BdB3rnpp z$Uh3*;TT>L__$kBuW3Ke%Fg-705IlXAwq=SzY)9YMd6oqf;_`@dxg@7k< zS8J0&Up#>wN>C;>&C|2EF>mOcrkt&OGnVt>6mN%R2QXX}8Q-tt_wM>2cVBx!j!eqz z0kDaYQp292tm-U391V+1KDgL@IJxxcBI3^wQ-#dyDqQW& zuiZkvqGFGp2k^N?i0q?NaGQ^6--|p#{sIQ93d1!ql z-EXrP->=`ite|)TM2Ek3*V zz0`UkZQzr`muc@z&^YBPZ=?({q;&E4+>H=IvcZ&SbL*5lry!Ld4 zo3}4&MMf`1t~tEoJY^W4r(|*6tKPLgajZ>Vp>Xj@`?hg$+s#kO2e8NjrFQLsa1qFgjo3z^yS6)Tr;{t;kdMszT3(1)uuY$AHGnp9eSAsUr)C{u2(%FgM8v=`Uw5= zQV|Hs&yT2+Y?j_lN(idzs5`3_BF_{N{j;~}Zt|qOaVHMzO^MG@QqX?!##2K09O+4z z#@SonZ}w6>iJ4igY))?3@=bYgW5_-Oe(e(=KI3+*Ga!qygokpOp4Xek#%mjNJ-oW7QI3_qh`>4S9bUQlmxC} z(UIAsvGphEkZGMalbI-}mO{xT_*0IJHKC{k=O z3L8mEnoNm$0AL;h5D#-5qOyZ;BzW}ZGBLwg@p%eDjdt`G*r^~Nh3&-1(3_*PYqI49 zvU1!4^xCeUhOuWXPhUJ1nSIEQY=3d;dtW2lYb>Z>GhMeq`Ur9oAM;$v4Y6? zlef%Blk-NjYuT%wwYPL#2zCDw71hkov1<30hVtB`5gjDS7Zu51Bx znU?DbmoWI`?RTo5#FXg)^*ui)+=b>ZpKkGOHpkvx9cama$CtXW8mZ&GJ>W+12Puv6 zIaIVQm4}vC!BuJK{2kFUqoC2aKX^DKm3Y~ckg11|K1Z1s6>gh6jU}#2@;1hpWl~0=OO~+XEGF|^ zn7CD|kafkn`!HHWX-@K)|H10|*QgR0(mh?aQOVZrLTgEm$q_lS-S*n5&mVaB|1;B= z4?NJh#ll%?Kr(xTY>RL*KWC|Y48mZx>9-P?r+6wxsZ6a$nU4*+8ou9-sSzcXW%`g6 zbVJ^%Z9U`MrQo|v|L3~!e+YXp{JU^-F_w}=SWk#zOn)U6D>*)FZR-h8F^Gl`D>v%y zu36BXL3%m7xvxm_BBhbK$n!bzLmTS z{z$l<-%z}y%9dQmgnbBkrcm$6bWLn(Jtkzp%Cm7%ub-#WdJ~0= zD!O1oAULfhzmed+1Zo{4{DBO)n$53!rK5+7x+-vZOKGuMVcnx~k~(IW!<5#a^Jpi} zO6aXtc4eF!Z_laKC77HwZNhL=Ih_vSAxeysS7dPS9HdmuEqn|g8mMr-bysIGIY3oW zJzHg~I_{?sN?iR=$zY-3iu7y^?FVa93Cl?vJ-^i+fD8nO%E}} z%nELr0_pjJVwZ4uSbx~3u=`|~=fte??}pFz+$6@bwgO5#=k05T$jgiwmoQmpkHu$A zS7E>Rh_e1cMhe#dRnD{8x!FHBkl;Isgy$rpE2~eCEaSCg3(peEHVW+viml^U)W#Lj zg+C8w=6+4Q&33Tjg34{pz5JoNF2~)_IAzm7|LcG8O}#FbsNB;q7*w7+a*`RE!&d9A z(sdEE?kUDC@2BYzQkjGAFQuJ?ZKzFf6p)>H^wNZ+g4Ax%>jM2qpB&HZS!{@`QXTU* zHSyIQ&DGl~-RcuiLQyAU9j@L>A~;_l=7rZRV-y!IjvJ#Hq+Gc>ot$6Jp299*ucIq} zPTyFjM!aQHgF*8`*bp?6(>%RSvt{+!qe)IG9n77-1dlxp2+DKoJU)W6K9eSaI^D^J zkhF%6GCvS_|ki=sxFr>AJ<2Jn7ry<5!R-<1%Rfp9{!< zKMGMCK7-5{jkgQr_c&PBsq1ee92qa-&qMR>9-TQ6LUKh59cZmVvXS!+E({kDm!?Y# zP}Nk$Yeb1ca>vgz=6;JR^JlXnqarF3zlR%`@_{UQ>UO8GE4l0;~)T9m^L$+6#hFkp>n!U znJ}z)As?hA!t< zypnX;TfCo+>@W8R`L^I1A_D0KQiY`|Q63Oh-o}icRaw8)IHwZ3nT>tnm%6DErwoMo z%n946*2@3_!DU#*oyf!6&dWN0S995)S4GBbm48gyk0)C3uX`?$a1|0@$#sJ7cfxy! zBBNUJS*hnV3(w^I;DMfLR}*eMQ^)X$D%cs_g{lD<)KPYCS0`JPZlR5v=2MHI^;0U0 zs{jI?i%f}Qz~36uG&H@^*U792H(h7+F-=N_78%>;HMLhS-tQ14Fcr$SL{cR*vG0x% zeCH`aLN1D_8c4g8=vXjY9p-GxGn4!~M=-}GyANkEwBQ^$sG;}q1)w!zPU^uKc;@1W znU9T;e3VMJr=b#T=Rh~SxjvrI%(ygO6m)3&f+7IXHh>558305@XfNz~fu5>zUk z!^h*k3}VjLdTl{2>YE*C4Grl5@amKe*Fq1Hd~yxySqDKS+&$1ieGYKtj=h-|Ym0Gr zE(dh2ywjV2YV<1T{vCPf%MCBPika(*5pda<`wUtnn$?^eCnH z*2mN5K;x11DBxz3!J|IR=DM0jV9ScCe*>nSJS62Yn0!yme;qnc5&8dDTC!5`AGkBQmOnU0u0OM1eI_o#$ z03g#7@o2u4&Plq)v3{3o?u6z@J~pG9R->at5gW@>+T}qEV!{vE2aHl4k+qj>1b_z4O%lE7p0@3$%7Kn605T!V7|H_PZYAOw5~LhKDm}QwJ?73@-)2 zUP&+ZPXJ*vThSGh?8*t8{}Rj?e{+c)w%I@@Y-_mk0idiZnHTpyjb_o*F)RF0aoxFF zX|zr=xET*8L3yyVlq)*ZMPeH~MK55gHJb2(Lbht+TWn{ucvb3}csLE#9b0+CHT0v} zTJS(p_lgO75o&(YuzSNa^mScP24NUk>(5xRuf%pu_i=*Z)tuEZLl&x~akqin+do1V z>ASq{(~7$ZJq&)oM%v(L6Vlxjv2`kf+1_fkNpMJBue&=U%MQhNO$SsDg)-}aV%ane z1dZTeZJGk@NuYD~e~deQvZmD#9I);9p+*ZEGXu0einr}T_y)wZ;MZ+e#{=N^Y#UPJ zxi6HLo}X(t?^0dWnT`400w8(ZWK{S{^@$FbNnycD^w%HNylEhE30njx3=yPtmcjD& z`Q_3#L>@;XUUWKfCp&-6j^-hscOzk=ZQ9*jjPC)rI5a0ccyZJ`un;lrx}fqD`hv<2 zBbo4*|EHb}qzvn3Hbr+t$~1>>(VJI|x)2v}&nH3`3`0AU=BZ)1%__Q%=$vp4jMMM!xvu4e(Wy-(6b#usiC4p-Jk!8K4}v z=utZUR*vS2SWAu$chlyw9Z>~<>-e@?kka3sg#0AtI^_5XMx5i@E&I$0JsPsU$nM_e z8f-*p`l-2q*YO^~AnZdZ0pN@+^TeUE9M9e^m4rL9BNpvGtQ1)1SqIi0UiMO+>jvmX zFL@efX~@#zC?Y5~rZm}Zw{%n$r!JnJX_(sZh12vTu?+MTTg2-w*s1aXa(NbJ_Obf! zPeK*mkia%MZqi!7f4I(Kir+-coLU_VX7Hlh8Ezn}k0!5Q2$fFw!Xx!?i6D(X_C(Odi8z?2bY&o`e1v!1F$ZI` zh;CPtI_3pD)A1k6Qm>GhaG0kavJ-yw$5%i9NTpk|X}O=fa&dgfPg<+XW_4WDLB&<5 zB`KT&dl@U~rFoAi*c$M`$mb204LToO^t@LaL218A3Zvb2b<%EGWmgRzw!PC`r%Y>b zH?d{bXEav&wQyh|=yP{Y*P!9nedh>J9YS|Er(nSq>sH@ukya6XOwOYXWaT|GkZkFi zBJ)beVaM|WGcHx$au;1fCpP#3ARASqyK*=-THS#|NrB)eT(;zsRAh^h8`ZUB&}$EW z)Y{zG$@}qJUF;NQKs>=TK{vHz3fn?=`9JT=pAJsOUC-wxb`^?i=Z;#M4-!5?s!n># zJ_l71)1%lotTP3rJ4MASJmV7R%F*|0f@GKnki_8&erepM&V5PrZYOkt_3cKwB4*e3 z)!HZqpVIVJ%SRp&XBaiykC*jiDJB92|R=0`C zY1{J)w}i^C>!AU=`>r`U+S=PXk?M<${j;hVr$J@b z>ll37=?X(G11j2ir~`k9E4GgX12zh#sW*yCjtp(Qih=N?E;REi=tsCf?%h7mac#M6b22y zj5WZHUJNvTuIY%nuG+;6`!xO%zIBr8dwth^C0bs$^zX`Pr)IZqP>t4#sg5;_c2w;x z0`*s%{B=^&qGWRl;Hhm@>Sq?OSKiI%M`-rU1Gs&e1!#ad9H^zYR6(CMn&zMF<(1!7 zOqtL(sgQ^?s+4`l*!&I9=Fn7ei=HbokRAfK!cjRq^YJW)%B-9^>{L2l5`VeHX^KQ- z*y~^}l!b#o=wH5Yqd7KSHPCEvNN@d7EqxRS{8JfQniv09fd=+-(>A zLT^i@xV*r7r*ah3MLN89DM3Y~jO}bUm(U78%A_E{DZdKL>HqHD_tEQVG4SW?WDdu6 zH`V~*Owo_Q{PYIS`EB9ZtkAhPi;=T9F8Jyzy_8RWmKMXYb7h05kS~LYT<5a6I+NZM>)RNjR z4vLM)EtX9QSdD)Ev9EgfahtRys)#{x*ey!8F63E+iC*RQ@*f#O1 z?@IubBHDFgx7Ir(rRsA|v~;fX50i@RxNPp`GDISm*02tfN43}J3}Ar|-HbkUzo(Nw zx?gGW8L-ew3(cGP>te`HUv*p7oT|ar`r-*4N)^$2lnddr&z)xWVSs}+*41nP&-2Lw zAh(Ovi}$0p3k#e8KQ(2v*+djlqu^9mLj=`O@w$bdN0lP%h@V#Y+omOECITcD|J1`E zJ`h5p*mmHcrhDE|J@S1k4f)=~)A?a?;fI_eoc=x!ji0}*_9V~XP5>YX{U>N|!CwOi z-RbJ+jaRVX3+sl`v=8ov++3fkI-Fq+7Jc&$uq=#%LzXK5co`41*4-p4Ed+!0>3KiH z{Pn);Hm)O$-AeUoVf6uYp{@+oHy6RPC3F?ux#qqv8qj!ZcX|9pyvM=zlaZcPR|HNT zBecI(zmratdGm}yXug^n*7YM&;2kY*qrO&_Lf z9By0U+0y?qN)ner)NF=U7FOqVzpotK{EVH=Ss`8FTSCm^@e^x&bG5)&=a@lM$_s z8v_GL`QgDX8)JtV;?Ame8jpwig6dPw7h%yqqc4A~o1b}Du##|h@FAZ$$fnWqAeI5U zG?&>ut{SYno638)_aR+UYdh(bUizUNU-^%G(JS4Xh5$&&toDAhCPsAXx{VF0n;Bji zC*8)K-`GyuXl>Q8s(ba?lZL|hksgM&nTCb3>(g>q%cr#GnAD z@x4ul`fzUz{c=-pu4i98x^}i27B7SAy4-x9!Dtq~>XT0pbnbn^`nH0Bx!``x4F ztW(Llwr*-xi94J49W$1$@pv#2f}syT7RDEDaU_yx#{y0yThCnaNZx|%>QdCkDlIZ$ zB@;5Auj#-i!&X$el4l(>S_=gOX6V$AbbCM#+$lCqD)Y;fd^y z*N3b!htd@#q&M$_(j(I2=?T2Q733ef<3HN-2gsKT96k_2Oh*r8&*;x?3pX%Ai`iW` zK80=IkA_q25x?E6(YPb>WuEU!452sq8|s1Qb0~uBs2X;M*c5DsV6CyI$RcQHB$>@Z z-ZG}>rk_+{P}9W629+N|MAAiaIIEO057U15U}*`j3=y$DkZ^h<`vWeFH)7_gyJtCd$s4G<&R>&#nL$!u3gpPXB-CxCkWlbBlE*=rZN=~ zf(92sb09md6UN-Rpa}nJMPwf{+7JPgmDar<6uSr1 zCwmi0dYoUhYZBh?Ba8m|11!`fy3#heqqHny#%7o1m}0*`ka>A3W-;fUsh}X@s`0wt zJ>b*IsC_6bBB&cR$-zM6s$MGm(TY$EkA%(e%95KaW(Zdk*Y}+yo(|i+J@1D(`<30& z`|Z|g<^`DcQ{BwlGzA?-gK0fu%t*@rB=Y__wf}5Dn8u^mK?`SXnW?$CuD!g}&x8?| zi%go!Y6Ux4)6|#lA3#fOFsYH(axgP_(U0DnBlgJc{^u^9h3IPEs*ZTfXLeg-TdJ3* z8lKA!F(TtHPxU-4~ID-)Z&S(G@(;|3roQ+@Q>xeo2M z>SCmcn_%SRrihIh%I>*%FgvN=vgh6Ygkv&8nMPFU0AGvffdjrVBka1WB+E3)<$dQ+J@Gi{y2ya}i zo3t%#SNye9Yj9Y4InTfUJ%Xlraoi-SX%V2-Pfdd1SX#A3E~Ia{6h`rs&#smzFEcvJ zgTy4EclOnbEb3^xX59iJc#|OJc-_1Wf86s_njH7k(K@y zqcWuv!A*&TF2moi2S{q;2VCA^$gYY2$#EWb?l)~|$kKHuy zB&0*CTm26DE@T&&&PcK7SsbHZq_5j|eeh7_*9XJT^#R>%p1AU+mPMR=Rh2P)V2d{+ zo^zJwX~Y}}Dp}&Zkh439^QD~I+rfep(1TCM5XRBJS~_W`S53U#TZRyOMR<&vk)pK+ z{lrCN2JeTPK0ny)m|CSKw<<;#ag4C9+x9SV(V1?ym9OSigM`muLbvhfeMIe?GsJYz zCv7o=M0erRY1d61+6E`t^TY0tokB^HZXMLba~$;beK;f1Xu!B@q;sf(^2Z2r(Ep3x ziGa*bXH9Zc9qN~tQL#76SYQU4m0i=j#QbbXH?(~qI#V(G`+W(v&`;Yr2?m21C9OMN zdBML{7c+Xp>L*G(t&IlcsAwKB&zt9sp8fngwLNYQ6GRf!TDrSy_fi$R%d?m^rVtS1 zR?PtWnF=N}_H4VKewdBgJLySYLbw}(Q;%0P*d1F1&4<6Jq5AD~V zKiD2_c*2-Y5Zd}*60b_EiL;?q)4enomKTt^ePXSBVvLIRYjdLo%rsC!wT4+on)4t^ zSe`@kVjBIf_1NuZHCe`A+XJT8cWRh%x>}_ypRAt>B5EQK^hrINwG)fpTxYee47-#B z!CaMaP2rLPw6-2OTh={;heon;|1xIltC|l^(Vgy*FUk;qhvLZ#M)8`q2HD-c=F1%*h4Q}K`Ylw#H zrS@!b;Hw-YY)JOjZ%QuXIz9?5`~Wsrtgkzw%shTu`ft)h%Jf>QX7gffTBGU? zdqFMv*12pC4c)6Q_wjn6RhP(Pf6JvCu=7^JFPgv$YvF#?2e)DNzgEA%y{GC?+1=4x zCT)C6@|~w#TYK14%&yHOrrl)vzUW;hHdIr=hUhpmTJ9~^W_w->mB+yLN;fx9(f_#G zgqz{VwB#_~aX(Vc?}LT?c5IDRly0(X*4m-DfEwwKYnEX}OPh1dvNMdbj#P8i@5ejV zw$%Pbij?o6?E5y${iK^tv5#8y*j=&mJTn1RqYhS228&0T6eRj*d-%=QY#PU&YpR9? zXMTQr!}k|=5jc|fh-eRK*mF1-v&)t`Gs$kHuwYIG?cm>HZ0-;{8}sCY2i$(8i~pPX zs%&lfze0uoYa`j;NS%-(4_lLyfLu+|dxYv4er9wHlHw|M2@* z(eZ0YI&|)a8fG{rzCQeIAg0lp@QwP9V@8dV?WvSIEKfWiW$>=7C)PIHv94R-;e=Cb zyPcRz>)2Ob#?|Cwg=M+tWifMR`}=bLA~Q*z(w&tFj$s2#UYf!v@hN5Qs7lP*wSmV% zs&pi}y48Bivj^cTa%iC>bvL1zh%k%rfnU3~_?_ID?#T}i4sS-zNsBS;5XXYHlQHTA zH1y>KGlnkLFkTI-+;tUn@EfIBOkj1u=#fO*Klc<2NYRlCCoRhia7)A8-HnSO590|_ zn4wPeZgIIA+i&AnU42{QK#4=WUqi(D<6sh8Y$p7dJ_?hv6cMcsoJu(B=ZK4ml<}F3 z>P0!Qmls49gM{Pd!n{;O=bgOFN7_4K)Xw#DrwR4cKeQN=AQ3{bCxUuo+{-QUv9=LO zQP;>*b_CQVe53UerUt@LH`A7NaO`-n`8qpJpMU7shE-ktis8R6`}lN^e;92Tk_wC| z&_2Qnt@^xl87+2G8tUn}`01iwd=(;dv43W_n5G<)cFgs?D>_SU?nSQ0uSIAMLTi{S z-LQXS*Z3OOo0_OTix;CVHgW371|Rxs$qG6a_V!l-M{)DQ=uA~?Q6R;HIj<$Wpgjow9 zs=k$ILzMT>dtI7G8Lp{X9U%{RE zwpdP%zA`$_Ez43Iht_g@{wtdhCOvFU-+dpQ)L`Qn#EC+Nms3?!1hY4A6s(Y%=6tF` zZxx#)v{~9dJxY@J|d4Dhm0$r;qVx%@wgw`Gg1DA z;6=h&9L?XsN2{Tv_LS3}F(oTo{jUE|%lfeK)O9z)n%{p2zwtw+fVbr-ZijsU6rFjbAMUP2BvD9ctf(1M(=*} zUln+Ne>Fk7-0hr^vDW+hDhZ`Xf}iwSlH%=D$K+Y=uGSIZsj(>G`r~yu-#F|ntG44tS^GY! z`H^F)?iDp@hR4bQY11OTKv(w2!uwM$mITG&-HSX_QaS>e5+!uB| zsm;QZ�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 aV$2ip-0sZfdzJxzh{N88D!&Z*{{I2&Ho|WJ literal 0 HcmV?d00001 diff --git a/doc/design/fluid.md b/doc/design/fluid.md new file mode 100644 index 0000000000..b3d039d6db --- /dev/null +++ b/doc/design/fluid.md @@ -0,0 +1,122 @@ +# Design Doc: PaddlePaddle Fluid + +## Why Fluid + +When Baidu developed PaddlePaddle in 2013, the only well-known open source deep learning system was Caffe. However, when it open-sourced PaddlePaddle in 2016, there had been many other choices over there. We were facing a challenge -- why would we open source yet another one? + +Fluid is the answer. Fluid is similar to PyTorch and TensorFlow Eager Execution, which describes the "process" of training or inference a model, but not the model itself. Indeed, in PyTorch, Eager Execution, and Fluid, there is no such a concept of the model at all. I will explain in this article, Fluid is currently more extreme in this idea than PyTorch and Eager Execution, and we are pushing Fluid towards a compiler and even a new programming language for deep learning + +## The Evolution of Deep Learning Systems + +Deep learning infrastructure is one of the fastest involving technology. Within only four years, there have been three generations of technologies invented. + +| Since around | model = sequence of layers | model = graph of operators | No model | +|--|--|--|--| +| 2013 | Caffe, Theano, Torch, PaddlePaddle | | | +| 2015 | | TensorFlow, MxNet, Caffe2, ONNX, n-graph | | +| 2016 | | | PyTorch, TensorFlow Eager Execution, PaddlePaddle Fluid | + +From the above table, we see that the technology is evolving towards the removal of the concept of the model. To better understand the reason, let us compare the *programming paradigms*, or, the ways we program deep learning applications using these systems. + +## Deep Learning Programming Paradigms + +With any system listed as the first or second generation, e.g., Caffe or TensorFlow, an AI application training program looks like the following: + +```python +x = layer.data("image") +l = layer.data("label") +f = layer.fc(x, W) +s = layer.softmax(f) +c = layer.mse(l, s) + +for i in xrange(1000): # train for 1000 iterations + m = read_minibatch() + forward({input=x, data=m}, minimize=c) + backward(...) + +print W # print the trained model parameters. +``` + +The above program includes two parts: + +1. the first part describes the model, and +2. the second part describes the training process (or inference process). + +This paradigm has a well-known problem that limits programmers' productivity. Suppose that we made some mistakes at configuring the model in the first part of the program, when we run the program, it wouldn't prompt error messages until the execution enters the second part, when the invocation to `forward` or `backward` raise errors. It is difficult for the programmer to realize and locate that there is a mistake many lines away from where the error appears. + +This problem of hard to debug a program is the primary reason that programmers prefer PyTorch than elder systems. Using PyTorch, we would write the above program like the following + +```python +W = tensor(...) + +for i in xrange(1000): # train for 1000 iterations + m = read_minibatch() + x = m["image"] + l = m["label"] + f = layer.fc(x, W) + s = layer.softmax(f) + c = layer.mse(l, s) + backward() + +print W # print the trained model parameters. +``` + +We can see that the main difference is the moving of the model configuration, the first part, into the train loop. This change would allow that mistakes in model configuration reported where they appear. This change also represents the model, or its forward pass, by the process in the training loop. + +## Describe Arbitrary Models for the Future + +Describing the process instead of the model also brings Fluid the flexibility to define models not yet invented. + +As we can program the process, we can write an RNN as a loop, instead of an RNN layer or operator. A PyTorch example could look like + +```python +for i in xrange(1000): + m = read_minibatch() + x = m["sentence"] + for t in xrange x.len(): + h[t] = the_step(x[t]) +``` + +With Fluid, the training loop and the RNN in the above program are not Python loop, but a "loop structure" provided by Fluid and implemented in C++: + +```python +train_loop = layers.While(cond) +with train_loop.block(): + m = read_minibatch() + x = m["sentence"] + rnn = layers.While(...) + with rnn.block(): + h[t] = the_step(input[t]) +``` + +A real Fluid example is [here](https://github.com/PaddlePaddle/Paddle/blob/a91efdde6910ce92a78e3aa7157412c4c88d9ee8/python/paddle/v2/fluid/tests/test_while_op.py#L36-L44). + +From these examples, you can see that Fluid programs look similar to their PyTorch equivalent, except that Fluid's loop structure, wrapped with Python's `with` statement, could run much faster than Python's loop. + +We have more examples of the [`if-then-else`](https://github.com/PaddlePaddle/Paddle/blob/develop/doc/design/if_else_op.md) structure of Fluid. + +## Turing Completeness + +In computability theory, a system of data-manipulation rules, such as a programming language, is said to be Turing complete if it can be used to simulate any Turing machine. For a programming language, if it provides if-then-else and loop, it is Turing complete. From above examples, Fluid seems Turing complete; however, I would like to point out is a slight difference between the if-then-else of Fluid and that in a programming language is that the former runs both of its branches. It splits the input minibatch into two -- one for the true condition and one for the false. I am not sure if this is equivalent to the if-then-else that makes programming languages Turing-complete. I talked with [Yuang Yu](https://research.google.com/pubs/104812.html), but I need to figure out more. + +## The Execution of a Fluid Program + +There are two ways to run a Fluid program. When we run an example program, it creates a protobuf message [`ProgramDesc`](https://github.com/PaddlePaddle/Paddle/blob/a91efdde6910ce92a78e3aa7157412c4c88d9ee8/paddle/framework/framework.proto#L145) that describes the process and conceptually likes an [abstract syntax tree](https://en.wikipedia.org/wiki/Abstract_syntax_tree). + +We have a C++ class [`Executor`](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/framework/executor.h), which runs a `ProgramDesc` like that an interpreter runs a Python program. + +We are moving towards a compiler, which we will explain in more details later in this article. + +## Backward Compatibility + +Given all advantages from the removal of the concept *model*, hardware manufacturers might still prefer the existence of the concept model, so they could build their hardware reads and runs a trained model for inference. For example, Nervana, a startup company acquired by Intel, has been working on an XPU that reads models in the format known as [n-graph](https://github.com/NervanaSystems/ngraph). Similarly, [Movidius](https://www.movidius.com/) is producing a mobile deep learning chip that reads and runs graphs of operators too. The well-known [ONNX](https://github.com/onnx/onnx) is also a file format of graphs of operators. + +For Fluid, we can write a converter that extracts parts in the `ProgramDesc` protobuf message, converts them into a graph of operators, and exports into the ONNX or n-graph format. + +## Towards a Deep Learning Language and the Compiler + +We can change the if-then-else and loop structure a little bit in the above Fluid example programs so to make it a new programming language, different from Python. + +Even if we don't invent a new language, as long as we get the `ProgramDesc` message filled in, we can write a transpiler, which translates each invocation to an operator into a C++ call to a kernel function of that operator. For example, a transpiler that weaves the CUDA kernels outputs an NVIDIA-friendly C++ program, which can be built using `nvcc`. Another transpiler could generate MKL-friendly code that should be built using `icc` from Intel. More interestingly, we can translate a Fluid program into its distributed version of two `ProgramDesc` messages, one for running on the trainer process, and the other one for the parameter server. For more details of the last example, let us check the [concurrent programming design](concurrent_programming.md). The following figure explains this two-stage process: + +![](fluid-compiler.png) From 4d93f0fc1a5708c9d10cb17d161a7cc7f0391297 Mon Sep 17 00:00:00 2001 From: Abhinav Arora Date: Thu, 14 Dec 2017 07:01:05 +0530 Subject: [PATCH 084/193] Polish the support new device doc (#6594) --- doc/design/support_new_device.md | 40 ++++++++++++++++---------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/doc/design/support_new_device.md b/doc/design/support_new_device.md index 92443e4392..fd23dc211a 100644 --- a/doc/design/support_new_device.md +++ b/doc/design/support_new_device.md @@ -1,33 +1,33 @@ -# Design Doc: Support new Device/Library +# Design Doc: Supporting new Device/Library ## Background -Deep learning has a high demand for computing resources. New high-performance device and computing library are coming constantly. The deep learning framework has to integrate these high-performance device and computing library flexibly. +Deep learning has a high demand for computing resources. New high-performance devices and computing libraries are appearing very frequently. Deep learning frameworks have to integrate these high-performance devices and computing libraries flexibly and efficiently. -On the one hand, hardware and computing library are not usually one-to-one coresponding relations. For example, in Intel CPU, there are Eigen and MKL computing library. And in Nvidia GPU, there are Eigen and cuDNN computing library. We have to implement specific kernels for an operator for each computing library. +On one hand, hardware and computing libraries usually do not have a one-to-one correspondence. For example,Intel CPUs support Eigen and MKL computing libraries while Nvidia GPUs support Eigen and cuDNN computing libraries. We have to implement operator specific kernels for each computing library. -On the other hand, users usually do not want to care about the low-level hardware and computing library when writing a neural network configuration. In Fluid, `Layer` is exposed in `Python`, and `Operator` is exposed in `C++`. Both `Layer` and `Operator` are independent on hardwares. +On the other hand, users usually do not want to care about the low-level hardware and computing libraries when writing a neural network configuration. In Fluid, `Layer` is exposed in `Python`, and `Operator` is exposed in `C++`. Both `Layer` and `Operator` are hardware independent. So, how to support a new Device/Library in Fluid becomes a challenge. ## Basic: Integrate A New Device/Library -For a general overview of fluid, please refer to [overview doc](https://github.com/PaddlePaddle/Paddle/blob/develop/doc/howto/read_source.md). +For a general overview of fluid, please refer to the [overview doc](https://github.com/PaddlePaddle/Paddle/blob/develop/doc/howto/read_source.md). -There are mainly there parts we have to consider in integrating a new device/library: +There are mainly three parts that we have to consider while integrating a new device/library: - Place and DeviceContext: indicates the device id and manages hardware resources - Memory and Tensor: malloc/free data on certain device -- Math Functor and OpKernel: implement computing unit on certain device/library +- Math Functor and OpKernel: implement computing unit on certain devices/libraries ### Place and DeviceContext #### Place -Fluid use class [Place](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/platform/place.h#L55) to represent specific device and computing library. There are inheritance relationships between different kinds of `Place`. +Fluid uses class [Place](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/platform/place.h#L55) to represent different devices and computing libraries. There are inheritance relationships between different kinds of `Place`. ``` | CPUPlace --> MKLDNNPlace @@ -43,7 +43,7 @@ typedef boost::variant Place; #### DeviceContext -Fluid use class [DeviceContext](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/platform/device_context.h#L30) to manage the resources in certain hardware, such as CUDA stream in `CDUADeviceContext`. There are also inheritance relationships between different kinds of `DeviceContext`. +Fluid uses class [DeviceContext](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/platform/device_context.h#L30) to manage the resources in different hardwares, such as CUDA stream in `CDUADeviceContext`. There are also inheritance relationships between different kinds of `DeviceContext`. ``` @@ -52,7 +52,7 @@ DeviceContext ----> CUDADeviceContext --> CUDNNDeviceContext \-> FPGADeviceContext ``` -A example of Nvidia GPU is as follows: +An example of Nvidia GPU is as follows: - DeviceContext @@ -93,7 +93,7 @@ class CUDNNDeviceContext : public CUDADeviceContext { #### memory module -Fluid provide following [memory interfaces](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/memory/memory.h#L36): +Fluid provides the following [memory interfaces](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/memory/memory.h#L36): ``` template @@ -106,12 +106,12 @@ template size_t Used(Place place); ``` -To implementing these interfaces, we have to implement MemoryAllocator for specific Device +To implementing these interfaces, we have to implement MemoryAllocator for different Devices #### Tensor -[Tensor](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/framework/tensor.h#L36) holds data with some shape in certain Place. +[Tensor](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/framework/tensor.h#L36) holds data with some shape in a specific Place. ```cpp class Tensor { @@ -168,7 +168,7 @@ t.mutable_data(place); ### Math Functor and OpKernel -Fluid implements computing unit based on different DeviceContext. Some computing unit is shared between operators. These common part will be put in operators/math directory as basic Functors. +Fluid implements computing units based on different DeviceContexts. Some computing units are shared between operators. This common part will be put in operators/math directory as basic Functors. Let's take [MaxOutFunctor](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/operators/math/maxouting.h#L27) as an example: @@ -183,7 +183,7 @@ class MaxOutFunctor { }; ``` -CPU implement in .cc file +CPU implemention is in .cc file ``` template @@ -197,7 +197,7 @@ class MaxOutFunctor { }; ``` -CUDA implement in .cu file +CUDA implemention is in .cu file ``` template @@ -212,11 +212,11 @@ class MaxOutFunctor { ``` -We get computing handle from concrete DeviceContext, and make compution on tensors. +We get computing handle from a concrete DeviceContext, and make compution on tensors. -The implement of `OpKernel` is similar to math functors, the extra thing we need to do is registering the OpKernel to global map. +The implemention of `OpKernel` is similar to math functors, the extra thing we need to do is to register the OpKernel in a global map. -Fluid provides different register interface in op_registry.h +Fluid provides different register interfaces in op_registry.h Let's take [Crop](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/operators/crop_op.cc#L134) operator as an example: @@ -240,7 +240,7 @@ REGISTER_OP_CUDA_KERNEL( ## Advanced topics: How to switch between different Device/Library -Generally, we will impelement OpKernel for all Device/Library of an Operator. We can easily train a Convolutional Neural Network in GPU. However, some OpKernel is not sutibale in a specific Device. For example, crf operator can be only run at CPU, whereas most other operators can be run at GPU. To achieve high performance in such circumstance, we have to switch between different Device/Library. +Generally, we will impelement OpKernel for all Device/Library of an Operator. We can easily train a Convolutional Neural Network in GPU. However, some OpKernel is not sutibale on a specific Device. For example, crf operator can only run on CPU, whereas most other operators can run at GPU. To achieve high performance in such circumstance, we have to switch between different Device/Library. We will discuss how to implement an efficient OpKernel switch policy. From c5afc3fe7cf1f1f93399cb9d6c92ed6f86a5fc74 Mon Sep 17 00:00:00 2001 From: kavyasrinet Date: Wed, 13 Dec 2017 18:40:30 -0800 Subject: [PATCH 085/193] Updating the design doc of Fluid (#6597) --- doc/design/fluid.md | 54 ++++++++++++++++++++++----------------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/doc/design/fluid.md b/doc/design/fluid.md index b3d039d6db..585dc8ef39 100644 --- a/doc/design/fluid.md +++ b/doc/design/fluid.md @@ -2,25 +2,25 @@ ## Why Fluid -When Baidu developed PaddlePaddle in 2013, the only well-known open source deep learning system was Caffe. However, when it open-sourced PaddlePaddle in 2016, there had been many other choices over there. We were facing a challenge -- why would we open source yet another one? +When Baidu developed PaddlePaddle in 2013, the only well-known open source deep learning system at the time was Caffe. However, when PaddlePaddle was open-sourced in 2016, many other choices were available. There was a challenge -- what is the need for open sourcing yet another deep learning framework? -Fluid is the answer. Fluid is similar to PyTorch and TensorFlow Eager Execution, which describes the "process" of training or inference a model, but not the model itself. Indeed, in PyTorch, Eager Execution, and Fluid, there is no such a concept of the model at all. I will explain in this article, Fluid is currently more extreme in this idea than PyTorch and Eager Execution, and we are pushing Fluid towards a compiler and even a new programming language for deep learning +Fluid is the answer. Fluid is similar to PyTorch and TensorFlow Eager Execution, which describes the "process" of training or inference using the concept of a model. In fact in PyTorch, TensorFlow Eager Execution and Fluid, there is no concept of a model at all. The details are covered in the sections below. Fluid is currently more extreme in the above mentioned idea than PyTorch and Eager Execution, and we are trying to push Fluid towards the directions of a compiler and a new programming language for deep learning. ## The Evolution of Deep Learning Systems -Deep learning infrastructure is one of the fastest involving technology. Within only four years, there have been three generations of technologies invented. +Deep learning infrastructure is one of the fastest evolving technologies. Within four years, there have already been three generations of technologies invented. -| Since around | model = sequence of layers | model = graph of operators | No model | +| Existed since | model as sequence of layers | model as graph of operators | No model | |--|--|--|--| | 2013 | Caffe, Theano, Torch, PaddlePaddle | | | | 2015 | | TensorFlow, MxNet, Caffe2, ONNX, n-graph | | | 2016 | | | PyTorch, TensorFlow Eager Execution, PaddlePaddle Fluid | -From the above table, we see that the technology is evolving towards the removal of the concept of the model. To better understand the reason, let us compare the *programming paradigms*, or, the ways we program deep learning applications using these systems. +From the above table, we see that the deep learning technology is evolving towards getting rid of the concept of a model. To understand the reasons behind this direction, a comparison of the *programming paradigms* or the ways to program deep learning applications using these systems, would be helpful. The following section goes over these. ## Deep Learning Programming Paradigms -With any system listed as the first or second generation, e.g., Caffe or TensorFlow, an AI application training program looks like the following: +With the systems listed as the first or second generation, e.g., Caffe or TensorFlow, an AI application training program looks like the following: ```python x = layer.data("image") @@ -33,18 +33,18 @@ for i in xrange(1000): # train for 1000 iterations m = read_minibatch() forward({input=x, data=m}, minimize=c) backward(...) - + print W # print the trained model parameters. ``` The above program includes two parts: -1. the first part describes the model, and -2. the second part describes the training process (or inference process). +1. The first part describes the model, and +2. The second part describes the training process (or inference process) for the model. -This paradigm has a well-known problem that limits programmers' productivity. Suppose that we made some mistakes at configuring the model in the first part of the program, when we run the program, it wouldn't prompt error messages until the execution enters the second part, when the invocation to `forward` or `backward` raise errors. It is difficult for the programmer to realize and locate that there is a mistake many lines away from where the error appears. +This paradigm has a well-known problem that limits the productivity of programmers. If the programmer made a mistake in configuring the model, the error messages wouldn't show up until the second part is executed and `forward` and `backward` propagations are performed. This makes it difficult for the programmer to debug and locate a mistake that is located blocks away from the actual error prompt. -This problem of hard to debug a program is the primary reason that programmers prefer PyTorch than elder systems. Using PyTorch, we would write the above program like the following +This problem of being hard to debug and re-iterate fast on a program is the primary reason that programmers, in general, prefer PyTorch over the older systems. Using PyTorch, we would write the above program as following: ```python W = tensor(...) @@ -57,17 +57,17 @@ for i in xrange(1000): # train for 1000 iterations s = layer.softmax(f) c = layer.mse(l, s) backward() - + print W # print the trained model parameters. ``` -We can see that the main difference is the moving of the model configuration, the first part, into the train loop. This change would allow that mistakes in model configuration reported where they appear. This change also represents the model, or its forward pass, by the process in the training loop. +We can see that the main difference is the moving the model configuration part (the first step) into the training loop. This change would allow the mistakes in model configuration to be reported where they actually appear in the programming block. This change also represents the model better, or its forward pass, by keeping the configuration process in the training loop. ## Describe Arbitrary Models for the Future -Describing the process instead of the model also brings Fluid the flexibility to define models not yet invented. +Describing the process instead of the model also brings Fluid, the flexibility to define different non-standard models that haven't been invented yet. -As we can program the process, we can write an RNN as a loop, instead of an RNN layer or operator. A PyTorch example could look like +As we write out the program for the process, we can write an RNN as a loop, instead of an RNN as a layer or as an operator. A PyTorch example would look like the following: ```python for i in xrange(1000): @@ -77,7 +77,7 @@ for i in xrange(1000): h[t] = the_step(x[t]) ``` -With Fluid, the training loop and the RNN in the above program are not Python loop, but a "loop structure" provided by Fluid and implemented in C++: +With Fluid, the training loop and the RNN in the above program are not really Python loops, but just a "loop structure" provided by Fluid and implemented in C++ as the following: ```python train_loop = layers.While(cond) @@ -89,34 +89,34 @@ with train_loop.block(): h[t] = the_step(input[t]) ``` -A real Fluid example is [here](https://github.com/PaddlePaddle/Paddle/blob/a91efdde6910ce92a78e3aa7157412c4c88d9ee8/python/paddle/v2/fluid/tests/test_while_op.py#L36-L44). +An actual Fluid example is described [here](https://github.com/PaddlePaddle/Paddle/blob/a91efdde6910ce92a78e3aa7157412c4c88d9ee8/python/paddle/v2/fluid/tests/test_while_op.py#L36-L44). -From these examples, you can see that Fluid programs look similar to their PyTorch equivalent, except that Fluid's loop structure, wrapped with Python's `with` statement, could run much faster than Python's loop. +From the example, the Fluid programs look very similar to their PyTorch equivalent programs, except that Fluid's loop structure, wrapped with Python's `with` statement, could run much faster than just a Python loop. We have more examples of the [`if-then-else`](https://github.com/PaddlePaddle/Paddle/blob/develop/doc/design/if_else_op.md) structure of Fluid. ## Turing Completeness -In computability theory, a system of data-manipulation rules, such as a programming language, is said to be Turing complete if it can be used to simulate any Turing machine. For a programming language, if it provides if-then-else and loop, it is Turing complete. From above examples, Fluid seems Turing complete; however, I would like to point out is a slight difference between the if-then-else of Fluid and that in a programming language is that the former runs both of its branches. It splits the input minibatch into two -- one for the true condition and one for the false. I am not sure if this is equivalent to the if-then-else that makes programming languages Turing-complete. I talked with [Yuang Yu](https://research.google.com/pubs/104812.html), but I need to figure out more. +In computability theory, a system of data-manipulation rules, such as a programming language, is said to be Turing complete if it can be used to simulate any Turing machine. For a programming language, if it provides if-then-else and loop, it is Turing complete. From the above examples, Fluid seems to be Turing complete; however, it is noteworthy to notice that there is a slight difference between the `if-then-else` of Fluid and that of a programming language. The difference being that the former runs both of its branches and splits the input mini-batch into two -- one for the True condition and another for the False condition. This hasn't been researched in depth if this is equivalent to the `if-then-else` in programming languages that makes them Turing-complete. Based on a conversation with [Yuang Yu](https://research.google.com/pubs/104812.html), it seems to be the case but this needs to be looked into in-depth. ## The Execution of a Fluid Program -There are two ways to run a Fluid program. When we run an example program, it creates a protobuf message [`ProgramDesc`](https://github.com/PaddlePaddle/Paddle/blob/a91efdde6910ce92a78e3aa7157412c4c88d9ee8/paddle/framework/framework.proto#L145) that describes the process and conceptually likes an [abstract syntax tree](https://en.wikipedia.org/wiki/Abstract_syntax_tree). +There are two ways to execute a Fluid program. When a program is executed, it creates a protobuf message [`ProgramDesc`](https://github.com/PaddlePaddle/Paddle/blob/a91efdde6910ce92a78e3aa7157412c4c88d9ee8/paddle/framework/framework.proto#L145) that describes the process and is conceptually like an [abstract syntax tree](https://en.wikipedia.org/wiki/Abstract_syntax_tree). -We have a C++ class [`Executor`](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/framework/executor.h), which runs a `ProgramDesc` like that an interpreter runs a Python program. +There is a C++ class [`Executor`](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/framework/executor.h), which runs a `ProgramDesc`, similar to how an interpreter runs a Python program. -We are moving towards a compiler, which we will explain in more details later in this article. +Fluid is moving towards the direction of a compiler, which is explain in more detail later in this article. -## Backward Compatibility +## Backward Compatibility of Fluid -Given all advantages from the removal of the concept *model*, hardware manufacturers might still prefer the existence of the concept model, so they could build their hardware reads and runs a trained model for inference. For example, Nervana, a startup company acquired by Intel, has been working on an XPU that reads models in the format known as [n-graph](https://github.com/NervanaSystems/ngraph). Similarly, [Movidius](https://www.movidius.com/) is producing a mobile deep learning chip that reads and runs graphs of operators too. The well-known [ONNX](https://github.com/onnx/onnx) is also a file format of graphs of operators. +Given all the advantages from the removal of the concept of a *model*, hardware manufacturers might still prefer the existence of the concept of a model, so it would be easier for them to support multiple frameworks all at once and could run a trained model during inference. For example, Nervana, a startup company acquired by Intel, has been working on an XPU that reads the models in the format known as [n-graph](https://github.com/NervanaSystems/ngraph). Similarly, [Movidius](https://www.movidius.com/) is producing a mobile deep learning chip that reads and runs graphs of operators. The well-known [ONNX](https://github.com/onnx/onnx) is also a file format of graphs of operators. -For Fluid, we can write a converter that extracts parts in the `ProgramDesc` protobuf message, converts them into a graph of operators, and exports into the ONNX or n-graph format. +For Fluid, we can write a converter that extracts the parts in the `ProgramDesc` protobuf message, converts them into a graph of operators, and exports the graph into the ONNX or n-graph format. ## Towards a Deep Learning Language and the Compiler -We can change the if-then-else and loop structure a little bit in the above Fluid example programs so to make it a new programming language, different from Python. +We can change the `if-then-else` and loop structure a little bit in the above Fluid example programs, to make it into a new programming language, different than Python. -Even if we don't invent a new language, as long as we get the `ProgramDesc` message filled in, we can write a transpiler, which translates each invocation to an operator into a C++ call to a kernel function of that operator. For example, a transpiler that weaves the CUDA kernels outputs an NVIDIA-friendly C++ program, which can be built using `nvcc`. Another transpiler could generate MKL-friendly code that should be built using `icc` from Intel. More interestingly, we can translate a Fluid program into its distributed version of two `ProgramDesc` messages, one for running on the trainer process, and the other one for the parameter server. For more details of the last example, let us check the [concurrent programming design](concurrent_programming.md). The following figure explains this two-stage process: +Even if we do not invent a new language, as long as we get the `ProgramDesc` message filled in, we can write a transpiler, which translates each invocation to an operator, into a C++ call to a kernel function of that operator. For example, a transpiler that weaves the CUDA kernels outputs an NVIDIA-friendly C++ program, which can be built using `nvcc`. Another transpiler could generate MKL-friendly code that should be built using `icc` from Intel. More interestingly, we can translate a Fluid program into its distributed version of two `ProgramDesc` messages, one for running on the trainer process, and the other one for the parameter server. For more details of the last example, the [concurrent programming design](concurrent_programming.md) document would be a good pointer. The following figure explains the proposed two-stage process: ![](fluid-compiler.png) From 97c3de0cfbf150670317e289e7e8e58651d907cb Mon Sep 17 00:00:00 2001 From: chengduoZH Date: Thu, 14 Dec 2017 11:21:41 +0800 Subject: [PATCH 086/193] follow comments --- paddle/operators/conv_transpose_op.h | 1 - 1 file changed, 1 deletion(-) diff --git a/paddle/operators/conv_transpose_op.h b/paddle/operators/conv_transpose_op.h index 0aae000dc4..1171b0435f 100644 --- a/paddle/operators/conv_transpose_op.h +++ b/paddle/operators/conv_transpose_op.h @@ -225,7 +225,6 @@ class GemmConvTransposeGradKernel : public framework::OpKernel { if (input_grad) { input_grad->mutable_data(context.GetPlace()); - // set_zero is unnecessary, math::matmul will reset input_grad. } if (filter_grad) { // filter size (m, c, k_h, k_w) filter_grad->mutable_data(context.GetPlace()); From 685d1e3b330ff6605935ed4a33825bdeb97ced07 Mon Sep 17 00:00:00 2001 From: Yibing Liu Date: Thu, 14 Dec 2017 04:27:05 +0000 Subject: [PATCH 087/193] Enable reshape_op to support dimension inference --- paddle/operators/reshape_op.cc | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/paddle/operators/reshape_op.cc b/paddle/operators/reshape_op.cc index 39bf2118d6..306dfa8069 100644 --- a/paddle/operators/reshape_op.cc +++ b/paddle/operators/reshape_op.cc @@ -34,21 +34,27 @@ class ReshapeOp : public framework::OperatorWithKernel { auto shape = ctx->Attrs().Get>("shape"); PADDLE_ENFORCE(shape.size() > 0, "Attr(shape) shouldn't be empty."); auto x_dims = ctx->GetInputDim("X"); - // TODO(qiao) change batch_size - for (size_t i = 1; i < shape.size(); ++i) { - PADDLE_ENFORCE(shape[i] > 0, - "Each dimension of Attr(shape) " - "must be positive except the first one."); - } - if (shape[0] < 0) { - shape[0] = x_dims[0]; + + std::vector neg_dims_idx; + for (size_t i = 0; i < shape.size(); ++i) { + PADDLE_ENFORCE(shape[i] > 0 || shape[i] == -1, + "Each dimension of Attr(shape) must be positive or -1."); + if (shape[i] == -1) { + neg_dims_idx.push_back(i); + PADDLE_ENFORCE(neg_dims_idx.size() <= 1, + "Only one dimension of Attr(shape) can be -1."); + } } + // capacity check int64_t capacity = std::accumulate(shape.begin(), shape.end(), 1, std::multiplies()); int64_t in_size = framework::product(x_dims); - PADDLE_ENFORCE_EQ(capacity, in_size, + if (neg_dims_idx.size() == 1) { + shape[neg_dims_idx[0]] = in_size / (-capacity); + PADDLE_ENFORCE(shape[neg_dims_idx[0]] > 0, "The size of Input(X) mismatches with Attr(shape)."); + } // resize output std::vector shape_int64(shape.size(), 0); std::transform(shape.begin(), shape.end(), shape_int64.begin(), @@ -88,6 +94,9 @@ the tensor X into a 1-D tensor: [1, 2, 3, 4] +One dimension in the target shape can be set -1, and the real dimension +will be infered from the original shape of Input(X) and other +dimensions in the target shape. )DOC"); } }; From 0a75ed6f5bcad53b3622ee89d48a5613cc4ef396 Mon Sep 17 00:00:00 2001 From: Yibing Liu Date: Thu, 14 Dec 2017 05:06:19 +0000 Subject: [PATCH 088/193] Add unit test for dimension inference in reshape_op --- paddle/operators/reshape_op.cc | 14 +++++++++----- python/paddle/v2/fluid/tests/test_reshape_op.py | 14 ++++++++++++++ 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/paddle/operators/reshape_op.cc b/paddle/operators/reshape_op.cc index 306dfa8069..164f3104eb 100644 --- a/paddle/operators/reshape_op.cc +++ b/paddle/operators/reshape_op.cc @@ -42,19 +42,23 @@ class ReshapeOp : public framework::OperatorWithKernel { if (shape[i] == -1) { neg_dims_idx.push_back(i); PADDLE_ENFORCE(neg_dims_idx.size() <= 1, - "Only one dimension of Attr(shape) can be -1."); + "Only one dimension of Attr(shape) can be unknown."); } } - // capacity check int64_t capacity = std::accumulate(shape.begin(), shape.end(), 1, std::multiplies()); int64_t in_size = framework::product(x_dims); if (neg_dims_idx.size() == 1) { - shape[neg_dims_idx[0]] = in_size / (-capacity); - PADDLE_ENFORCE(shape[neg_dims_idx[0]] > 0, - "The size of Input(X) mismatches with Attr(shape)."); + // dim infer + shape[neg_dims_idx[0]] = in_size / (-capacity); + // recalculate capacity + capacity = std::accumulate(shape.begin(), shape.end(), 1, + std::multiplies()); } + // capacity check + PADDLE_ENFORCE(capacity == in_size, + "The size of Input(X) mismatches with Attr(shape)."); // resize output std::vector shape_int64(shape.size(), 0); std::transform(shape.begin(), shape.end(), shape_int64.begin(), diff --git a/python/paddle/v2/fluid/tests/test_reshape_op.py b/python/paddle/v2/fluid/tests/test_reshape_op.py index 16bb6bb2af..18ee3aece6 100644 --- a/python/paddle/v2/fluid/tests/test_reshape_op.py +++ b/python/paddle/v2/fluid/tests/test_reshape_op.py @@ -17,5 +17,19 @@ class TestReshapeOp(OpTest): self.check_grad(["X"], "Out") +class TestReshapeOpDimInfer(OpTest): + def setUp(self): + self.op_type = "reshape" + self.inputs = {'X': np.random.random((10, 20)).astype("float32")} + self.attrs = {'shape': [4, -1, 5]} + self.outputs = {'Out': self.inputs['X'].reshape(self.attrs['shape'])} + + def test_check_output(self): + self.check_output() + + def test_check_grad(self): + self.check_grad(["X"], "Out") + + if __name__ == '__main__': unittest.main() From 3545d3a61d5cdfe0df90b87939056f026fc8e103 Mon Sep 17 00:00:00 2001 From: yangyaming Date: Thu, 14 Dec 2017 14:11:15 +0800 Subject: [PATCH 089/193] Expose seq_expand op. --- doc/api/v2/fluid/layers.rst | 4 ++ python/paddle/v2/fluid/layers.py | 69 ++++++++++++++++++++- python/paddle/v2/fluid/tests/test_layers.py | 9 +++ 3 files changed, 81 insertions(+), 1 deletion(-) diff --git a/doc/api/v2/fluid/layers.rst b/doc/api/v2/fluid/layers.rst index 89e5fec13b..c3436ca6bc 100644 --- a/doc/api/v2/fluid/layers.rst +++ b/doc/api/v2/fluid/layers.rst @@ -300,3 +300,7 @@ conv2d_transpose .. autofunction:: paddle.v2.fluid.layers.conv2d_transpose :noindex: +seq_expand +--------- +.. autofunction:: paddle.v2.fluid.layers.seq_expand + :noindex: diff --git a/python/paddle/v2/fluid/layers.py b/python/paddle/v2/fluid/layers.py index f67d6d08c7..bdb9e1ba8c 100644 --- a/python/paddle/v2/fluid/layers.py +++ b/python/paddle/v2/fluid/layers.py @@ -11,7 +11,7 @@ from param_attr import ParamAttr __all__ = [ 'fc', 'data', 'cross_entropy', 'conv2d', 'pool2d', 'embedding', 'concat', 'StaticRNN', 'cast', 'sequence_conv', 'sequence_pool', 'sums', 'cos_sim', - 'batch_norm', 'accuracy', 'split_lod_tensor', 'While' + 'batch_norm', 'accuracy', 'split_lod_tensor', 'While', 'seq_expand' ] _REGISTER_LAYER_FROM_OPS = [ @@ -2023,3 +2023,70 @@ class DynamicRNN(object): if self.status != DynamicRNN.IN_RNN: raise ValueError("{0} can only be invoked inside rnn block.".format( method)) + + +def seq_expand(x, y, main_program=None, startup_program=None): + """Sequence Expand Layer. This layer will expand the input variable **x** + according to LoD information of **y**. And the following examples will + explain how seq_expand works: + + .. code-block:: text + + * Case 1 + x is a LoDTensor: + x.lod = [[0, 2, 3], + [0, 1, 3, 4]] + x.data = [a, b, c, d] + x.dims = [4, 1] + + y is a LoDTensor: + y.lod = [[0, 2, 4], + [0, 3, 6, 7, 8]] + + with condition len(y.lod[-1]) - 1 == x.dims[0] + + then output is a 2-level LoDTensor: + out.lod = [[0, 2, 4], + [0, 3, 6, 7, 8]] + out.data = [a, a, a, b, b, b, c, d] + out.dims = [8, 1] + + * Case 2 + x is a Tensor: + x.data = [a, b, c] + x.dims = [3, 1] + + y is a LoDTensor: + Y.lod = [[0, 2, 3, 6]] + + with condition len(y.lod[-1]) - 1 == x.dims[0] + + then output is a 1-level LoDTensor: + out.lod = [[0, 2, 3, 6]] + out.data = [a, a, b, c, c, c] + out.dims = [6, 1] + + Args: + x (Variable): The input variable which is a Tensor or LoDTensor. + y (Variable): The input variable which is a LoDTensor. + main_program (Program): The main program. + startup_program (Program): The startup program. + + Returns: + Variable: The expanded variable which is a LoDTensor. + + Examples: + .. code-block:: python + + x = fluid.layers.data(name='x', shape=[10], dtype='float32') + y = fluid.layers.data(name='y', shape=[10, 20], + dtype='float32', lod_level=1) + out = layers.seq_expand(x=x, y=y) + """ + helper = LayerHelper('seq_expand', input=x, **locals()) + dtype = helper.input_dtype() + tmp = helper.create_tmp_variable(dtype) + helper.append_op( + type='seq_expand', inputs={'X': x, + 'Y': y}, outputs={'Out': tmp}) + return tmp diff --git a/python/paddle/v2/fluid/tests/test_layers.py b/python/paddle/v2/fluid/tests/test_layers.py index 9b88080158..d6f939af23 100644 --- a/python/paddle/v2/fluid/tests/test_layers.py +++ b/python/paddle/v2/fluid/tests/test_layers.py @@ -161,6 +161,15 @@ class TestBook(unittest.TestCase): x=dat, label=lbl)) print(str(program)) + def test_seq_expand(self): + program = Program() + with program_guard(program): + x = layers.data(name='x', shape=[10], dtype='float32') + y = layers.data( + name='y', shape=[10, 20], dtype='float32', lod_level=1) + self.assertIsNotNone(layers.seq_expand(x=x, y=y)) + print(str(program)) + if __name__ == '__main__': unittest.main() From 9b1675048561e2708af40948b192f24a199bf70a Mon Sep 17 00:00:00 2001 From: dzhwinter Date: Wed, 13 Dec 2017 22:44:33 -0800 Subject: [PATCH 090/193] "remove AllReduce2 comments" --- doc/design/paddle_nccl.md | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/doc/design/paddle_nccl.md b/doc/design/paddle_nccl.md index dba451b9b3..5e28144b95 100644 --- a/doc/design/paddle_nccl.md +++ b/doc/design/paddle_nccl.md @@ -53,8 +53,13 @@ Need to notice that AllReduce operator force GPUs synchronized at that point. Th As it shown in the picture, when each GPU compute the gradient of `W`, followed with a `AllReduce` operator, accumulate the `dW` to full batch of data, then run the optimize process individually and apply the gradient to its `W`. -- **AllReduce2** -If we use the NCCL2 AllReduce primitive, every GPU optimized full batch of data, wasted (n-1) GPU compute resources. In addition, AllReduce will only utilize the communicate resource during synchronization, then update the gradient will be a seperated phase. In fact, we can amortize the update gradient time cost into the communicating phase. -- Every parameter has its root card. That card will call **Reduce** operator and collect the gradients from GPUs. -- The whole model's parameter will be hashed to different root card, ensure the load balance between GPUs. -Then we have another version AllReduce operator. Other part keep the same with before. +- **AllReduce** + Need to note that our AllReduce operator is a ring-base AllReduce implementation. If we use the NCCL2 AllReduce primitive, every GPU optimized full batch of data, wasted (n-1) GPU compute resources. In addition, NCCL2 built-in AllReduce will only utilize the communicating resource during synchronization, then update the gradient will be a subsequent phase. In fact, we can amortize the update gradient time cost into the communicating phase. The process is +1. Every parameter has its root card. That card will responsible for aggregating the gradients from GPUs. +2. The whole model's parameter will be hashed to different root card, ensure the load balance between GPUs. +3. Logically neighberhood card will start send parameter to the next one. After one round, the parameter main card will aggregate the full gradients. +4. Then the root card will optimize the parameter. +5. This parameter card will send its optimized result to its neighberhood, then the neighberhood will send parameter to its next one. +6. Finish the sychronization round. + +The total time cost will be 2 * (n-1) * per-parameter-send-time, we reach the goal of amortize the upgrade time into communicating phase. From dafd449c68c23c642ba117a55135c823c6594772 Mon Sep 17 00:00:00 2001 From: fengjiayi Date: Thu, 14 Dec 2017 15:43:14 +0800 Subject: [PATCH 091/193] Unify `step_block` and `block` to `sub_block` --- paddle/framework/backward.cc | 4 ++-- paddle/operators/conditional_block_op.cc | 8 ++++---- paddle/operators/recurrent_op.cc | 2 +- paddle/operators/while_op.cc | 2 +- python/paddle/v2/fluid/layers.py | 6 +++--- 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/paddle/framework/backward.cc b/paddle/framework/backward.cc index a17036c652..faf6e60cbd 100644 --- a/paddle/framework/backward.cc +++ b/paddle/framework/backward.cc @@ -430,14 +430,14 @@ std::vector> MakeBlockBackward( std::vector> op_grads; if ((*it)->Type() == "recurrent" || (*it)->Type() == "while") { - int step_block_idx = (*it)->GetBlockAttr("step_block"); + int step_block_idx = (*it)->GetBlockAttr("sub_block"); BlockDescBind* backward_block = CreateStepBlock( program_desc, no_grad_vars, grad_to_var, step_block_idx); op_grads = MakeOpGrad(*it, no_grad_vars, grad_to_var, {backward_block}); } else if ((*it)->Type() == "conditional_block") { BlockDescBind* backward_block = CreateStepBlock(program_desc, no_grad_vars, grad_to_var, - (*it)->GetBlockAttr("block")); + (*it)->GetBlockAttr("sub_block")); op_grads = MakeOpGrad(*it, no_grad_vars, grad_to_var, {backward_block}); } else { op_grads = MakeOpGrad(*it, no_grad_vars, grad_to_var); diff --git a/paddle/operators/conditional_block_op.cc b/paddle/operators/conditional_block_op.cc index 03c58a7eab..6f2ef9174e 100644 --- a/paddle/operators/conditional_block_op.cc +++ b/paddle/operators/conditional_block_op.cc @@ -65,7 +65,7 @@ class ConditionalBlockOp : public ConditionalOp { scopes->front() = &scope.NewScope(); auto &cur_scope = *scopes->front(); - auto *block = Attr("block"); + auto *block = Attr("sub_block"); framework::Executor exec(dev_ctx); exec.Run(*block->Program(), &cur_scope, block->ID(), false); } @@ -88,7 +88,7 @@ class ConditionalBlockOpProtoMaker : public framework::OpProtoAndCheckerMaker { "unify the conditional block, rnn and while op, the type of " "scope is std::vector"); AddAttr( - "block", "The step block of conditional block operator"); + "sub_block", "The step block of conditional block operator"); AddComment(R"DOC(Conditional block operator Run the sub-block if X is not empty. Params is the other inputs and Out is the @@ -117,7 +117,7 @@ class ConditionalBlockGradOp : public ConditionalOp { auto &scopes = scope_var->Get>(); framework::Scope &cur_scope = *scopes[0]; - auto *block = Attr("block"); + auto *block = Attr("sub_block"); framework::Executor exec(dev_ctx); exec.Run(*block->Program(), &cur_scope, block->ID(), false); @@ -181,7 +181,7 @@ class ConditionalBlockGradMaker : public framework::SingleGradOpDescMaker { grad_op->SetInput("Scope", Output("Scope")); grad_op->SetOutput(framework::GradVarName("X"), InputGrad("X")); grad_op->SetOutput(framework::GradVarName("Params"), InputGrad("Params")); - grad_op->SetBlockAttr("block", *this->grad_block_[0]); + grad_op->SetBlockAttr("sub_block", *this->grad_block_[0]); return std::unique_ptr(grad_op); } }; diff --git a/paddle/operators/recurrent_op.cc b/paddle/operators/recurrent_op.cc index 29f9163643..232d926f7b 100644 --- a/paddle/operators/recurrent_op.cc +++ b/paddle/operators/recurrent_op.cc @@ -25,7 +25,7 @@ constexpr char kOutputs[] = "outputs"; constexpr char kStepScopes[] = "step_scopes"; constexpr char kExStates[] = "ex_states"; constexpr char kStates[] = "states"; -constexpr char kStepBlock[] = "step_block"; +constexpr char kStepBlock[] = "sub_block"; constexpr char kReverse[] = "reverse"; constexpr char kIsTrain[] = "is_train"; #define GRAD_SUFFIX "@GRAD" diff --git a/paddle/operators/while_op.cc b/paddle/operators/while_op.cc index b8e44bcc5a..9a092a570f 100644 --- a/paddle/operators/while_op.cc +++ b/paddle/operators/while_op.cc @@ -25,7 +25,7 @@ namespace operators { using StepScopeVar = std::vector; using LoDTensor = framework::LoDTensor; -constexpr char kStepBlock[] = "step_block"; +constexpr char kStepBlock[] = "sub_block"; constexpr char kCondition[] = "Condition"; constexpr char kStepScopes[] = "StepScopes"; constexpr char kParameters[] = "X"; diff --git a/python/paddle/v2/fluid/layers.py b/python/paddle/v2/fluid/layers.py index f67d6d08c7..2781017ec4 100644 --- a/python/paddle/v2/fluid/layers.py +++ b/python/paddle/v2/fluid/layers.py @@ -1130,7 +1130,7 @@ class StaticRNN(object): attrs={ 'ex_states': pre_memories, 'states': memories, - 'step_block': rnn_block + 'sub_block': rnn_block }) @@ -1207,7 +1207,7 @@ class While(object): }, outputs={'Out': out_vars, 'StepScopes': [step_scope]}, - attrs={'step_block': while_block}) + attrs={'sub_block': while_block}) def lstm(x, @@ -1671,7 +1671,7 @@ class ConditionalBlock(object): }, outputs={'Out': out_list, 'Scope': [step_scope]}, - attrs={'block': inside_block}) + attrs={'sub_block': inside_block}) class IfElseBlockGuard(object): From 0e9b393b340990cf581ec9f6e5f33af74912c0b6 Mon Sep 17 00:00:00 2001 From: dzhwinter Date: Thu, 14 Dec 2017 16:21:58 +0800 Subject: [PATCH 092/193] "derived cudnnDevice context" (#6585) * "derived cudnnDevice context" * "leave remove cudnn handle from CUDADeviceContext" * "fix math function error" --- paddle/operators/math/math_function.cu | 7 +++++++ paddle/platform/device_context.cc | 16 ++++++++++++++++ paddle/platform/device_context.h | 16 ++++++++++++++++ paddle/platform/device_context_test.cc | 16 ++++++++++++++++ paddle/platform/place.h | 7 ++++++- 5 files changed, 61 insertions(+), 1 deletion(-) diff --git a/paddle/operators/math/math_function.cu b/paddle/operators/math/math_function.cu index 1b560a7e2d..e33070c40f 100644 --- a/paddle/operators/math/math_function.cu +++ b/paddle/operators/math/math_function.cu @@ -273,6 +273,13 @@ void set_constant_with_place( TensorSetConstantGPU(context, tensor, value)); } +template <> +void set_constant_with_place( + const platform::DeviceContext& context, framework::Tensor* tensor, + float value) { + set_constant_with_place(context, tensor, value); +} + template struct RowwiseAdd; template struct RowwiseAdd; template struct ColwiseSum; diff --git a/paddle/platform/device_context.cc b/paddle/platform/device_context.cc index 2c7f964216..1c72b50559 100644 --- a/paddle/platform/device_context.cc +++ b/paddle/platform/device_context.cc @@ -125,6 +125,22 @@ cudnnHandle_t CUDADeviceContext::cudnn_handle() const { return cudnn_handle_; } cudaStream_t CUDADeviceContext::stream() const { return stream_; } +CudnnDeviceContext::CudnnDeviceContext(CudnnPlace place) + : CUDADeviceContext(place), place_(place) { + PADDLE_ENFORCE(dynload::cudnnCreate(&cudnn_handle_)); + PADDLE_ENFORCE(dynload::cudnnSetStream(cudnn_handle_, stream())); +} + +CudnnDeviceContext::~CudnnDeviceContext() { + SetDeviceId(place_.device); + Wait(); + PADDLE_ENFORCE(dynload::cudnnDestroy(cudnn_handle_)); +} + +Place CudnnDeviceContext::GetPlace() const { return CudnnPlace(); } + +cudnnHandle_t CudnnDeviceContext::cudnn_handle() const { return cudnn_handle_; } + #endif } // namespace platform diff --git a/paddle/platform/device_context.h b/paddle/platform/device_context.h index 596d9d0bba..f67194993d 100644 --- a/paddle/platform/device_context.h +++ b/paddle/platform/device_context.h @@ -86,6 +86,22 @@ class CUDADeviceContext : public DeviceContext { cublasHandle_t cublas_handle_; }; +class CudnnDeviceContext : public CUDADeviceContext { + public: + explicit CudnnDeviceContext(CudnnPlace place); + virtual ~CudnnDeviceContext(); + + /*! \brief Return place in the device context. */ + Place GetPlace() const final; + + /*! \brief Return cudnn handle in the device context. */ + cudnnHandle_t cudnn_handle() const; + + private: + cudnnHandle_t cudnn_handle_; + CudnnPlace place_; +}; + #endif } // namespace platform diff --git a/paddle/platform/device_context_test.cc b/paddle/platform/device_context_test.cc index 4893cd92f6..be3b2af5af 100644 --- a/paddle/platform/device_context_test.cc +++ b/paddle/platform/device_context_test.cc @@ -46,3 +46,19 @@ TEST(Device, CUDADeviceContext) { delete device_context; } } + +TEST(Device, CudnnDeviceContext) { + using paddle::platform::CudnnDeviceContext; + using paddle::platform::CudnnPlace; + if (paddle::platform::dynload::HasCUDNN()) { + int count = paddle::platform::GetCUDADeviceCount(); + for (int i = 0; i < count; ++i) { + CudnnDeviceContext* device_context = + new CudnnDeviceContext(CudnnPlace(i)); + cudnnHandle_t cudnn_handle = device_context->cudnn_handle(); + ASSERT_NE(nullptr, cudnn_handle); + ASSERT_NE(nullptr, device_context->stream()); + delete device_context; + } + } +} diff --git a/paddle/platform/place.h b/paddle/platform/place.h index 5370360a7d..f0dcec8f52 100644 --- a/paddle/platform/place.h +++ b/paddle/platform/place.h @@ -43,6 +43,11 @@ struct GPUPlace { int device; }; +struct CudnnPlace : public GPUPlace { + CudnnPlace() : GPUPlace() {} + explicit CudnnPlace(int d) : GPUPlace(d) {} +}; + struct IsGPUPlace : public boost::static_visitor { bool operator()(const CPUPlace &) const { return false; } bool operator()(const GPUPlace &gpu) const { return true; } @@ -52,7 +57,7 @@ struct IsGPUPlace : public boost::static_visitor { // should be less equal than 2^(NUM_PLACE_TYPE_LIMIT_IN_BIT) #define NUM_PLACE_TYPE_LIMIT_IN_BIT 4 -typedef boost::variant Place; +typedef boost::variant Place; // static check number of place types is less equal than // 2^(NUM_PLACE_TYPE_LIMIT_IN_BIT) From e11a561c128a894ce03bd07bd3985f55f74220f8 Mon Sep 17 00:00:00 2001 From: fengjiayi Date: Thu, 14 Dec 2017 17:06:25 +0800 Subject: [PATCH 093/193] update --- paddle/pybind/pybind.cc | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/paddle/pybind/pybind.cc b/paddle/pybind/pybind.cc index c16d3e0cbe..9ea4e70a26 100644 --- a/paddle/pybind/pybind.cc +++ b/paddle/pybind/pybind.cc @@ -282,6 +282,16 @@ All parameter, weight, gradient are variables in Paddle. } return ret_values; }); + m.def("get_grad_op_desc", + [](const OpDescBind &op_desc, + const std::unordered_set &no_grad_set, + std::unordered_map &grad_to_var, + const std::vector &grad_sub_block) { + return framework::OpInfoMap::Instance() + .Get(op_desc.Type()) + .GradOpMaker()(op_desc, no_grad_set, &grad_to_var, + grad_sub_block); + }); m.def("prune", [](const ProgramDescBind &origin, const std::vector> &targets) { ProgramDescBind prog_with_targets(origin); From 1059796cbfa48273b8c056fee23f8e405dc24bb8 Mon Sep 17 00:00:00 2001 From: Luo Tao Date: Thu, 14 Dec 2017 17:16:47 +0800 Subject: [PATCH 094/193] update the link of docs icon --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index bbb2d49858..ceeb6d9e51 100644 --- a/README.md +++ b/README.md @@ -2,8 +2,8 @@ [![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://doc.paddlepaddle.org/develop/doc/) -[![Documentation Status](https://img.shields.io/badge/中文文档-最新-brightgreen.svg)](http://doc.paddlepaddle.org/develop/doc_cn/) +[![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 991826317a4192cd4fb3e8505a4a7c60c0fe830c Mon Sep 17 00:00:00 2001 From: Leding Li Date: Thu, 14 Dec 2017 17:23:39 +0800 Subject: [PATCH 095/193] Add extern "C" to paddle_error_string (#6611) --- paddle/capi/error.cpp | 2 +- paddle/capi/error.h | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/paddle/capi/error.cpp b/paddle/capi/error.cpp index 169b65f921..96ce31b45f 100644 --- a/paddle/capi/error.cpp +++ b/paddle/capi/error.cpp @@ -14,7 +14,7 @@ limitations under the License. */ #include "error.h" -const char* paddle_error_string(paddle_error err) { +extern "C" const char* paddle_error_string(paddle_error err) { switch (err) { case kPD_NULLPTR: return "nullptr error"; diff --git a/paddle/capi/error.h b/paddle/capi/error.h index 9d9d0ed63a..2da9e0a3ef 100644 --- a/paddle/capi/error.h +++ b/paddle/capi/error.h @@ -29,9 +29,17 @@ typedef enum { kPD_UNDEFINED_ERROR = -1, } paddle_error; +#ifdef __cplusplus +extern "C" { +#endif + /** * Error string for Paddle API. */ PD_API const char* paddle_error_string(paddle_error err); +#ifdef __cplusplus +} +#endif + #endif From 044a13d02262f1cf84ee685a0575cf2ec28e5623 Mon Sep 17 00:00:00 2001 From: fengjiayi Date: Thu, 14 Dec 2017 17:50:56 +0800 Subject: [PATCH 096/193] expose GradOpMaker to Python --- paddle/pybind/pybind.cc | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/paddle/pybind/pybind.cc b/paddle/pybind/pybind.cc index 9ea4e70a26..1faf24bcb8 100644 --- a/paddle/pybind/pybind.cc +++ b/paddle/pybind/pybind.cc @@ -282,15 +282,22 @@ All parameter, weight, gradient are variables in Paddle. } return ret_values; }); - m.def("get_grad_op_desc", + m.def("get_grad_op_descs", [](const OpDescBind &op_desc, const std::unordered_set &no_grad_set, std::unordered_map &grad_to_var, const std::vector &grad_sub_block) { - return framework::OpInfoMap::Instance() - .Get(op_desc.Type()) - .GradOpMaker()(op_desc, no_grad_set, &grad_to_var, - grad_sub_block); + std::vector> grad_op_descs = + framework::OpInfoMap::Instance() + .Get(op_desc.Type()) + .GradOpMaker()(op_desc, no_grad_set, &grad_to_var, + grad_sub_block); + std::vector grad_op_desc_ptrs(grad_op_descs.size()); + std::transform( + grad_op_descs.begin(), grad_op_descs.end(), + grad_op_desc_ptrs.begin(), + [](std::unique_ptr &p) { return p.release(); }); + return grad_op_desc_ptrs; }); m.def("prune", [](const ProgramDescBind &origin, const std::vector> &targets) { From e0698e33a869f72282ae9f7d78a33c5a4ac2ef00 Mon Sep 17 00:00:00 2001 From: Yu Yang Date: Thu, 14 Dec 2017 17:57:49 +0800 Subject: [PATCH 097/193] Make layers as a python module (#6564) * Make cast op support bool Also add `elemwise_sub/mul/abs/clip` layers * Make fuild.layers as a module * Move layers as a module * Split layers.py into layers module * Fix CI * Fix CI --- python/paddle/v2/fluid/layers/__init__.py | 17 + .../{layers.py => layers/control_flow.py} | 1023 +---------------- python/paddle/v2/fluid/layers/io.py | 57 + python/paddle/v2/fluid/layers/nn.py | 785 +++++++++++++ python/paddle/v2/fluid/layers/ops.py | 9 + python/paddle/v2/fluid/layers/tensor.py | 130 +++ .../book/test_image_classification_train.py | 4 +- .../book/test_understand_sentiment_lstm.py | 48 +- python/setup.py.in | 1 + 9 files changed, 1057 insertions(+), 1017 deletions(-) create mode 100644 python/paddle/v2/fluid/layers/__init__.py rename python/paddle/v2/fluid/{layers.py => layers/control_flow.py} (51%) create mode 100644 python/paddle/v2/fluid/layers/io.py create mode 100644 python/paddle/v2/fluid/layers/nn.py create mode 100644 python/paddle/v2/fluid/layers/ops.py create mode 100644 python/paddle/v2/fluid/layers/tensor.py diff --git a/python/paddle/v2/fluid/layers/__init__.py b/python/paddle/v2/fluid/layers/__init__.py new file mode 100644 index 0000000000..249f570e13 --- /dev/null +++ b/python/paddle/v2/fluid/layers/__init__.py @@ -0,0 +1,17 @@ +import ops +from ops import * +import nn +from nn import * +import io +from io import * +import tensor +from tensor import * +import control_flow +from control_flow import * + +__all__ = [] +__all__ += nn.__all__ +__all__ += io.__all__ +__all__ += tensor.__all__ +__all__ += control_flow.__all__ +__all__ += ops.__all__ diff --git a/python/paddle/v2/fluid/layers.py b/python/paddle/v2/fluid/layers/control_flow.py similarity index 51% rename from python/paddle/v2/fluid/layers.py rename to python/paddle/v2/fluid/layers/control_flow.py index 2781017ec4..5af6c78977 100644 --- a/python/paddle/v2/fluid/layers.py +++ b/python/paddle/v2/fluid/layers/control_flow.py @@ -1,424 +1,18 @@ +from ..layer_helper import LayerHelper, unique_name +from ..framework import Program, Variable, Operator +from .. import core +from tensor import assign, fill_constant import contextlib -import proto.framework_pb2 as framework_pb2 -import core -from framework import OpProtoHolder, Variable, Program, Operator -from initializer import Constant, Normal, Xavier, Initializer -from paddle.v2.fluid.layer_helper import LayerHelper, unique_name -from registry import register_layer -from param_attr import ParamAttr - __all__ = [ - 'fc', 'data', 'cross_entropy', 'conv2d', 'pool2d', 'embedding', 'concat', - 'StaticRNN', 'cast', 'sequence_conv', 'sequence_pool', 'sums', 'cos_sim', - 'batch_norm', 'accuracy', 'split_lod_tensor', 'While' -] - -_REGISTER_LAYER_FROM_OPS = [ - 'mean', 'mul', 'dropout', 'reshape', 'sigmoid', 'scale', 'transpose', - 'sigmoid_cross_entropy_with_logits', 'elementwise_add', 'elementwise_div', - 'elementwise_sub', 'elementwise_mul', 'clip', 'abs' + 'split_lod_tensor', 'merge_lod_tensor', 'BlockGuard', 'StaticRNNGuard', + 'StaticRNNMemoryLink', 'WhileGuard', 'While', 'lod_rank_table', + 'max_sequence_len', 'topk', 'lod_tensor_to_array', 'array_to_lod_tensor', + 'increment', 'array_write', 'create_array', 'less_than', 'array_read', + 'shrink_memory', 'array_length', 'IfElse', 'DynamicRNN', 'ConditionalBlock', + 'StaticRNN' ] -for _OP in set(_REGISTER_LAYER_FROM_OPS): - globals()[_OP] = register_layer(_OP) - __all__.append(_OP) - - -def fc(input, - size, - num_flatten_dims=1, - param_attr=None, - bias_attr=None, - act=None, - name=None, - main_program=None, - startup_program=None): - """ - Fully Connected Layer. - - Args: - input: The input tensor to the function - size: The size of the layer - num_flatten_dims: Number of columns in input - param_attr: The parameters/weights to the FC Layer - param_initializer: Initializer used for the weight/parameter. If None, XavierInitializer() is used - bias_attr: The bias parameter for the FC layer - bias_initializer: Initializer used for the bias. If None, then ConstantInitializer() is used - act: Activation to be applied to the output of FC layer - name: Name/alias of the function - main_program: Name of the main program that calls this - startup_program: Name of the startup program - - This function can take in multiple inputs and performs the Fully Connected - function (linear transformation) on top of each of them. - So for input x, the output will be : Wx + b. Where W is the parameter, - b the bias and x is the input. - - The function also applies an activation (non-linearity) on top of the - output, if activation is passed in the input. - - All the input variables of this function are passed in as local variables - to the LayerHelper constructor. - - """ - helper = LayerHelper('fc', **locals()) - - dtype = helper.input_dtype() - - mul_results = [] - for input_var, param_attr in helper.iter_inputs_and_params(): - input_shape = input_var.shape - param_shape = [ - reduce(lambda a, b: a * b, input_shape[num_flatten_dims:], 1) - ] + [size] - w = helper.create_parameter( - attr=param_attr, shape=param_shape, dtype=dtype, is_bias=False) - tmp = helper.create_tmp_variable(dtype) - helper.append_op( - type="mul", - inputs={ - "X": input_var, - "Y": w, - }, - outputs={"Out": tmp}, - attrs={'x_num_col_dims': num_flatten_dims, - 'y_num_col_dims': 1}) - mul_results.append(tmp) - - # sum - if len(mul_results) == 1: - pre_bias = mul_results[0] - else: - pre_bias = helper.create_tmp_variable(dtype) - helper.append_op( - type="sum", inputs={"X": mul_results}, outputs={"Out": pre_bias}) - # add bias - pre_activation = helper.append_bias_op(pre_bias) - # add activation - return helper.append_activation(pre_activation) - - -def embedding(input, - size, - is_sparse=False, - param_attr=None, - dtype='float32', - main_program=None, - startup_program=None): - """ - Embedding Layer. - - Args: - param_initializer: - input: The input to the function - size: The size of the layer - is_sparse: A flag that decleares whether the input is sparse - param_attr: Parameters for this layer - dtype: The type of data : float32, float_16, int etc - main_program: Name of the main program that calls this - startup_program: Name of the startup program - - This function can take in the input (which is a vector of IDs) and - performs a lookup in the lookup_table using these IDs, to result into - the embedding of each ID in the input. - - All the input variables of this function are passed in as local variables - to the LayerHelper constructor. - - """ - - helper = LayerHelper('embedding', **locals()) - w = helper.create_parameter( - attr=helper.param_attr, shape=size, dtype=dtype, is_bias=False) - tmp = helper.create_tmp_variable(dtype) - helper.append_op( - type='lookup_table', - inputs={'Ids': input, - 'W': w}, - outputs={'Out': tmp}, - attrs={'is_sparse': is_sparse}) - return tmp - - -# TODO(qijun): expose H0 and C0 -def dynamic_lstm(input, - size, - param_attr=None, - bias_attr=None, - use_peepholes=True, - is_reverse=False, - gate_activation='sigmoid', - cell_activation='tanh', - candidate_activation='tanh', - dtype='float32', - main_program=None, - startup_program=None): - helper = LayerHelper('lstm', **locals()) - size = size / 4 - weight = helper.create_parameter( - attr=helper.param_attr, shape=[size, 4 * size], dtype=dtype) - bias_size = [1, 7 * size] - if not use_peepholes: - bias_size[1] = 4 * size - bias = helper.create_parameter( - attr=helper.bias_attr, shape=bias_size, dtype=dtype, is_bias=True) - - hidden = helper.create_tmp_variable(dtype) - cell = helper.create_tmp_variable(dtype) - batch_gate = helper.create_tmp_variable(dtype) - batch_cell_pre_act = helper.create_tmp_variable(dtype) - - helper.append_op( - type='lstm', - inputs={'Input': input, - 'Weight': weight, - 'Bias': bias}, - outputs={ - 'Hidden': hidden, - 'Cell': cell, - 'BatchGate': batch_gate, - 'BatchCellPreAct': batch_cell_pre_act - }, - attrs={ - 'use_peepholes': use_peepholes, - 'is_reverse': is_reverse, - 'gate_activation': gate_activation, - 'cell_activation': cell_activation, - 'candidate_activation': candidate_activation - }) - return hidden, cell - - -def gru_unit(input, - hidden, - size, - weight=None, - bias=None, - activation='tanh', - gate_activation='sigmoid', - main_program=None, - startup_program=None): - """ - GRUUnit Operator implements partial calculations of the GRU unit as following: - - $$ - update \ gate: u_t = actGate(xu_t + W_u * h_{t-1} + b_u) \\ - reset \ gate: r_t = actGate(xr_t + W_r * h_{t-1} + b_r) \\ - output \ candidate: {h}_t = actNode(xc_t + W_c * dot(r_t, h_{t-1}) + b_c) \\ - output: h_t = dot((1 - u_t), h_{t-1}) + dot(u_t, {h}_t) - $$ - - which is same as one time step of GRU Operator. - - @note To implement the complete GRU unit, fully-connected operator must be - used before to feed xu, xr and xc as the Input of GRUUnit operator. - - TODO(ChunweiYan) add more document here - """ - activation_dict = dict( - identity=0, - sigmoid=1, - tanh=2, - relu=3, ) - activation = activation_dict[activation] - gate_activation = activation_dict[gate_activation] - - helper = LayerHelper('gru_unit', **locals()) - dtype = helper.input_dtype() - size = size / 3 - - # create weight - if weight is None: - weight = helper.create_parameter( - attr=helper.param_attr, shape=[size, 3 * size], dtype=dtype) - - # create bias - if bias is None: - bias_size = [1, 3 * size] - bias = helper.create_parameter( - attr=helper.bias_attr, shape=bias_size, dtype=dtype, is_bias=True) - - gate = helper.create_tmp_variable(dtype) - reset_hidden_pre = helper.create_tmp_variable(dtype) - updated_hidden = helper.create_tmp_variable(dtype) - - helper.append_op( - type='gru_unit', - inputs={'Input': input, - 'HiddenPrev': hidden, - 'Weight': weight}, - outputs={ - 'Gate': gate, - 'ResetHiddenPrev': reset_hidden_pre, - 'Hidden': updated_hidden, - }, - attrs={ - 'activation': 0, - 'gate_activation': 1, - }) - - return updated_hidden, reset_hidden_pre, gate - - -def data(name, - shape, - append_batch_size=True, - dtype='float32', - lod_level=0, - type=core.VarDesc.VarType.LOD_TENSOR, - main_program=None, - startup_program=None, - stop_gradient=True): - """ - Data Layer. - - Args: - name: The name/alias of the function - shape: Tuple declaring the shape. - append_batch_size: Whether or not to append the data as a batch. - dtype: The type of data : float32, float_16, int etc - type: The output type. By default it is LOD_TENSOR. - lod_level(int): The LoD Level. 0 means the input data is not a sequence. - main_program: Name of the main program that calls this - startup_program: Name of the startup program - stop_gradient: A boolean that mentions whether gradient should flow. - - This function takes in input and based on whether data has - to be returned back as a minibatch, it creates the global variable using - the helper functions. The global variables can be accessed by all the - following operations and layers in the graph. - - All the input variables of this function are passed in as local variables - to the LayerHelper constructor. - - """ - helper = LayerHelper('data', **locals()) - shape = list(shape) - for i in xrange(len(shape)): - if shape[i] is None: - shape[i] = -1 - append_batch_size = False - elif shape[i] < 0: - append_batch_size = False - - if append_batch_size: - shape = [-1] + shape # append batch size as -1 - - return helper.create_global_variable( - name=name, - shape=shape, - dtype=dtype, - type=type, - stop_gradient=stop_gradient, - lod_level=lod_level) - - -def create_tensor(dtype, name=None, main_program=None, startup_program=None): - helper = LayerHelper("create_tensor", **locals()) - return helper.create_variable(name=helper.name, dtype=dtype) - - -def cast(x, dtype, main_program=None): - """ - This function takes in the input with input_dtype - and casts it to the output_dtype as the output. - """ - helper = LayerHelper('cast', **locals()) - out = helper.create_tmp_variable(dtype=dtype) - helper.append_op( - type='cast', - inputs={'X': [x]}, - outputs={'Out': [out]}, - attrs={'in_dtype': x.dtype, - 'out_dtype': out.dtype}) - return out - - -def concat(input, axis, main_program=None, startup_program=None): - """ - This function concats the input along the axis mentioned - and returns that as the output. - """ - helper = LayerHelper('concat', **locals()) - out = helper.create_tmp_variable(dtype=helper.input_dtype()) - helper.append_op( - type='concat', - inputs={'X': input}, - outputs={'Out': [out]}, - attrs={'axis': axis}) - return out - - -def sums(input, out=None, main_program=None, startup_program=None): - """ - This function takes in the input and performs the sum operation on it - and returns that as the output. - """ - helper = LayerHelper('sum', **locals()) - if out is None: - out = helper.create_tmp_variable(dtype=helper.input_dtype()) - helper.append_op(type='sum', inputs={'X': input}, outputs={'Out': out}) - return out - - -def linear_chain_crf(input, - label, - param_attr=None, - main_program=None, - startup_program=None): - helper = LayerHelper('linear_chain_crf', **locals()) - size = input.shape[1] - transition = helper.create_parameter( - attr=helper.param_attr, - shape=[size + 2, size], - dtype=helper.input_dtype()) - alpha = helper.create_tmp_variable(dtype=helper.input_dtype()) - emission_exps = helper.create_tmp_variable(dtype=helper.input_dtype()) - transition_exps = helper.create_tmp_variable(dtype=helper.input_dtype()) - log_likelihood = helper.create_tmp_variable(dtype=helper.input_dtype()) - helper.append_op( - type='linear_chain_crf', - inputs={"Emission": [input], - "Transition": transition, - "Label": label}, - outputs={ - "Alpha": [alpha], - "EmissionExps": [emission_exps], - "TransitionExps": transition_exps, - "LogLikelihood": log_likelihood - }) - - return log_likelihood - - -def crf_decoding(input, - param_attr, - label=None, - main_program=None, - startup_program=None): - helper = LayerHelper('crf_decoding', **locals()) - transition = helper.get_parameter(param_attr.name) - viterbi_path = helper.create_tmp_variable(dtype=helper.input_dtype()) - helper.append_op( - type='crf_decoding', - inputs={"Emission": [input], - "Transition": transition, - "Label": label}, - outputs={"ViterbiPath": [viterbi_path]}) - - return viterbi_path - - -def assign(input, output, main_program=None, startup_program=None): - helper = LayerHelper('assign', **locals()) - helper.append_op( - type='scale', - inputs={'X': [input]}, - outputs={'Out': [output]}, - attrs={'scale': 1.0}) - return output - def split_lod_tensor(input, mask, @@ -460,404 +54,6 @@ def merge_lod_tensor(in_true, return out -def cos_sim(X, Y, **kwargs): - """ - This function performs the cosine similarity between two tensors - X and Y and returns that as the output. - """ - helper = LayerHelper('cos_sim', **kwargs) - out = helper.create_tmp_variable(dtype=X.dtype) - xnorm = helper.create_tmp_variable(dtype=X.dtype) - ynorm = helper.create_tmp_variable(dtype=X.dtype) - helper.append_op( - type='cos_sim', - inputs={'X': [X], - 'Y': [Y]}, - outputs={'Out': [out], - 'XNorm': [xnorm], - 'YNorm': [ynorm]}) - return out - - -def cross_entropy(input, label, **kwargs): - """ - This function computes cross_entropy using the input and label. - """ - helper = LayerHelper('cross_entropy', **kwargs) - out = helper.create_tmp_variable(dtype=input.dtype) - helper.append_op( - type='cross_entropy', - inputs={'X': [input], - 'Label': [label]}, - outputs={'Y': [out]}, - attrs=kwargs) - return out - - -def square_error_cost(input, label, **kwargs): - """ - This functions returns the squared error cost using the input and label. - The output is appending the op to do the above. - """ - helper = LayerHelper('square_error_cost', **kwargs) - minus_out = helper.create_tmp_variable(dtype=input.dtype) - helper.append_op( - type='elementwise_sub', - inputs={'X': [input], - 'Y': [label]}, - outputs={'Out': [minus_out]}) - - square_out = helper.create_tmp_variable(dtype=input.dtype) - helper.append_op( - type='square', inputs={'X': [minus_out]}, outputs={'Y': [square_out]}) - return square_out - - -def accuracy(input, label, k=1, correct=None, total=None, **kwargs): - """ - This function computes the accuracy using the input and label. - The output is the top_k inputs and their indices. - """ - helper = LayerHelper("accuracy", **kwargs) - topk_out = helper.create_tmp_variable(dtype=input.dtype) - topk_indices = helper.create_tmp_variable(dtype="int64") - helper.append_op( - type="top_k", - inputs={"X": [input]}, - outputs={"Out": [topk_out], - "Indices": [topk_indices]}, - attrs={"k": k}) - acc_out = helper.create_tmp_variable(dtype="float32") - if correct is None: - correct = helper.create_tmp_variable(dtype="int64") - if total is None: - total = helper.create_tmp_variable(dtype="int64") - helper.append_op( - type="accuracy", - inputs={ - "Out": [topk_out], - "Indices": [topk_indices], - "Label": [label] - }, - outputs={ - "Accuracy": [acc_out], - "Correct": [correct], - "Total": [total], - }) - return acc_out - - -def chunk_eval(input, - label, - chunk_scheme, - num_chunk_types, - excluded_chunk_types=None, - **kwargs): - """ - This function computes the accuracy using the input and label. - The output is the top_k inputs and their indices. - """ - helper = LayerHelper("chunk_eval", **kwargs) - - # prepare output - precision = helper.create_tmp_variable(dtype="float32") - recall = helper.create_tmp_variable(dtype="float32") - f1_score = helper.create_tmp_variable(dtype="float32") - - helper.append_op( - type="chunk_eval", - inputs={"Inference": [input], - "Label": [label]}, - outputs={ - "Precision": [precision], - "Recall": [recall], - "F1-Score": [f1_score] - }, - attrs={ - "num_chunk_types": num_chunk_types, - 'chunk_scheme': chunk_scheme, - 'excluded_chunk_types': excluded_chunk_types or [] - }) - return precision, recall, f1_score - - -def sequence_conv(input, - num_filters, - filter_size=3, - filter_stride=1, - padding=None, - bias_attr=None, - param_attr=None, - act=None, - main_program=None, - startup_program=None): - """ - This function creates the op for sequence_conv, using the inputs and - other convolutional configurations for the filters and stride as given - in the input parameters to the function. - """ - - # FIXME(dzh) : want to unify the argument of python layer - # function. So we ignore some unecessary attributes. - # such as, padding_trainable, context_start. - - helper = LayerHelper('sequence_conv', **locals()) - dtype = helper.input_dtype() - filter_shape = [filter_size * input.shape[1], num_filters] - filter_param = helper.create_parameter( - attr=helper.param_attr, shape=filter_shape, dtype=dtype) - pre_bias = helper.create_tmp_variable(dtype) - - helper.append_op( - type='sequence_conv', - inputs={ - 'X': [input], - 'Filter': [filter_param], - }, - outputs={"Out": pre_bias}, - attrs={ - 'contextStride': filter_stride, - 'contextStart': -int(filter_size / 2), - 'contextLength': filter_size - }) - pre_act = helper.append_bias_op(pre_bias) - return helper.append_activation(pre_act) - - -def conv2d(input, - num_filters, - filter_size, - stride=None, - padding=None, - groups=None, - param_attr=None, - bias_attr=None, - act=None, - name=None, - main_program=None, - startup_program=None): - """ - This function creates the op for a 2-dimensional Convolution. - This is performed using the parameters of filters(size, dimensionality etc) - , stride and other configurations for a Convolution operation. - This funciton can also append an activation on top of the - conv-2d output, if mentioned in the input parameters. - """ - - if stride is None: - stride = [1, 1] - helper = LayerHelper('conv2d', **locals()) - dtype = helper.input_dtype() - - num_channels = input.shape[1] - if groups is None: - num_filter_channels = num_channels - else: - if num_channels % groups != 0: - raise ValueError("num_channels must be divisible by groups.") - num_filter_channels = num_channels / groups - - if isinstance(filter_size, int): - filter_size = [filter_size, filter_size] - if isinstance(stride, int): - stride = [stride, stride] - if isinstance(padding, int): - padding = [padding, padding] - - input_shape = input.shape - filter_shape = [num_filters, num_filter_channels] + filter_size - - def _get_default_param_initializer(): - std = (2.0 / (filter_size[0]**2 * num_channels))**0.5 - return Normal(0.0, std, 0) - - filter_param = helper.create_parameter( - attr=helper.param_attr, - shape=filter_shape, - dtype=dtype, - default_initializer=_get_default_param_initializer()) - - pre_bias = helper.create_tmp_variable(dtype) - - helper.append_op( - type='conv2d_cudnn', - inputs={ - 'Input': input, - 'Filter': filter_param, - }, - outputs={"Output": pre_bias}, - attrs={'strides': stride, - 'paddings': padding, - 'groups': groups}) - - pre_act = helper.append_bias_op(pre_bias, dim_start=1, dim_end=2) - - return helper.append_activation(pre_act) - - -def sequence_pool(input, pool_type, **kwargs): - """ - This function add the operator for sequence pooling. - This is applied on top of the input using pool_type mentioned - in the parameters. - """ - helper = LayerHelper('sequence_pool', input=input, **kwargs) - dtype = helper.input_dtype() - pool_out = helper.create_tmp_variable(dtype) - max_index = helper.create_tmp_variable(dtype) - - helper.append_op( - type="sequence_pool", - inputs={"X": input}, - outputs={"Out": pool_out, - "MaxIndex": max_index}, - attrs={"pooltype": pool_type.upper()}) - - return pool_out - - -def pool2d(input, - pool_size, - pool_type, - pool_stride=None, - pool_padding=None, - global_pooling=False, - main_program=None, - startup_program=None): - """ - This function adds the operator for pooling in 2 dimensions, using the - pooling configurations mentioned in input parameters. - """ - if pool_padding is None: - pool_padding = [0, 0] - if pool_stride is None: - pool_stride = [1, 1] - if pool_type not in ["max", "avg"]: - raise ValueError( - "Unknown pool_type: '%s'. It can only be 'max' or 'avg'.", - str(pool_type)) - if isinstance(pool_size, int): - pool_size = [pool_size, pool_size] - if isinstance(pool_stride, int): - pool_stride = [pool_stride, pool_stride] - if isinstance(pool_padding, int): - pool_padding = [pool_padding, pool_padding] - - helper = LayerHelper('pool2d', **locals()) - dtype = helper.input_dtype() - pool_out = helper.create_tmp_variable(dtype) - - helper.append_op( - type="pool2d", - inputs={"X": input}, - outputs={"Out": pool_out}, - attrs={ - "pooling_type": pool_type, - "ksize": pool_size, - "global_pooling": global_pooling, - "strides": pool_stride, - "paddings": pool_padding - }) - - return pool_out - - -def batch_norm(input, - act=None, - is_test=False, - momentum=0.9, - epsilon=1e-05, - param_attr=None, - bias_attr=None, - data_layout='NCHW', - main_program=None, - startup_program=None): - """ - This function helps create an operator to implement - the BatchNorm layer using the configurations from the input parameters. - """ - helper = LayerHelper('batch_norm', **locals()) - dtype = helper.input_dtype() - - input_shape = input.shape - if data_layout == 'NCHW': - channel_num = input_shape[1] - else: - if data_layout == 'NHWC': - channel_num = input_shape[-1] - else: - raise ValueError("unsupported data layout:" + data_layout) - - param_shape = [channel_num] - - # create parameter - scale = helper.create_parameter( - attr=helper.param_attr, - shape=param_shape, - dtype=dtype, - default_initializer=Constant(1.0)) - - bias = helper.create_parameter( - attr=helper.param_attr, shape=param_shape, dtype=dtype, is_bias=True) - - mean = helper.create_global_variable( - dtype=input.dtype, shape=param_shape, persistable=True) - helper.set_variable_initializer(var=mean, initializer=Constant(0.0)) - - variance = helper.create_global_variable( - dtype=input.dtype, shape=param_shape, persistable=True) - helper.set_variable_initializer(var=variance, initializer=Constant(1.0)) - - # create output - # mean and mean_out share the same memory - mean_out = mean - # variance and variance out share the same memory - variance_out = variance - saved_mean = helper.create_tmp_variable(dtype) - saved_variance = helper.create_tmp_variable(dtype) - - batch_norm_out = helper.create_tmp_variable(dtype) - - helper.append_op( - type="batch_norm", - inputs={ - "X": input, - "Scale": scale, - "Bias": bias, - "Mean": mean, - "Variance": variance - }, - outputs={ - "Y": batch_norm_out, - "MeanOut": mean_out, - "VarianceOut": variance_out, - "SavedMean": saved_mean, - "SavedVariance": saved_variance - }, - attrs={"momentum": momentum, - "epsilon": epsilon, - "is_test": is_test}) - - return helper.append_activation(batch_norm_out) - - -def beam_search_decode(ids, scores, main_program=None, startup_program=None): - helper = LayerHelper('beam_search_decode', **locals()) - sentence_ids = helper.create_tmp_variable(dtype=ids.dtype) - sentence_scores = helper.create_tmp_variable(dtype=ids.dtype) - - helper.append_op( - type="beam_search_decode", - inputs={"Ids": ids, - "Scores": scores}, - outputs={ - "SentenceIds": sentence_ids, - "SentenceScores": sentence_scores - }) - - return sentence_ids, sentence_scores - - class BlockGuard(object): """ BlockGuard class. @@ -1210,50 +406,6 @@ class While(object): attrs={'sub_block': while_block}) -def lstm(x, - c_pre_init, - hidden_dim, - forget_bias=None, - main_program=None, - startup_program=None): - """ - This function helps create an operator for the LSTM (Long Short Term - Memory) cell that can be used inside an RNN. - """ - helper = LayerHelper('lstm_unit', **locals()) - rnn = StaticRNN() - with rnn.step(): - c_pre = rnn.memory(init=c_pre_init) - x_t = rnn.step_input(x) - - before_fc = concat( - input=[x_t, c_pre], - axis=1, - main_program=main_program, - startup_program=startup_program) - after_fc = fc(input=before_fc, - size=hidden_dim * 4, - main_program=main_program, - startup_program=startup_program) - - dtype = x.dtype - c = helper.create_tmp_variable(dtype) - h = helper.create_tmp_variable(dtype) - - helper.append_op( - type='lstm_unit', - inputs={"X": after_fc, - "C_prev": c_pre}, - outputs={"C": c, - "H": h}, - attrs={"forget_bias": forget_bias}) - - rnn.update_memory(c_pre, c) - rnn.output(h) - - return rnn() - - def lod_rank_table(x, level=0, main_program=None): """ This function creates an operator for creating a LOD_RANK_TABLE @@ -1331,72 +483,6 @@ def array_to_lod_tensor(x, table, main_program=None, startup_program=None): return tmp -def fill_constant(shape, - dtype, - value, - out=None, - main_program=None, - startup_program=None): - """ - This function creates a tensor , with shape as mentioned in the input and - specified dtype and fills this up with a constant value that - comes in the input. It also sets the stop_gradient to be True. - """ - helper = LayerHelper("fill_constant", **locals()) - if out is None: - out = helper.create_tmp_variable(dtype=dtype) - helper.append_op( - type='fill_constant', - inputs={}, - outputs={'Out': [out]}, - attrs={'shape': shape, - 'dtype': out.dtype, - 'value': float(value)}) - out.stop_gradient = True - return out - - -def fill_constant_batch_size_like(input, - shape, - dtype, - value, - input_dim_idx=0, - output_dim_idx=0, - main_program=None, - startup_program=None): - helper = LayerHelper("fill_constant_batch_size_like", **locals()) - out = helper.create_tmp_variable(dtype=dtype) - helper.append_op( - type='fill_constant_batch_size_like', - inputs={'Input': input}, - outputs={'Out': [out]}, - attrs={ - 'shape': shape, - 'dtype': out.dtype, - 'value': float(value), - 'input_dim_idx': input_dim_idx, - 'output_dim_idx': output_dim_idx - }) - out.stop_gradient = True - return out - - -def ones(shape, dtype, main_program=None): - """ - This function performs the same function as fill_constant() declared above - with the constant value being 1.0. - """ - return fill_constant(value=1.0, **locals()) - - -def zeros(shape, dtype, main_program=None): - """ - This function performs the same function as fill_constant() declared above - with the constant value being 0.0. - """ - return fill_constant(value=0.0, **locals()) - - def increment(x, value=1.0, in_place=True, @@ -1508,95 +594,6 @@ def array_length(array, main_program=None): return tmp -def conv2d_transpose(input, - num_filters, - output_size=None, - filter_size=None, - padding=None, - stride=None, - param_attr=None, - main_program=None, - startup_program=None): - """ - The transpose of conv2d layer. - - This layer is also known as deconvolution layer. - - Args: - input(Variable): The input image with [N, C, H, W] format. - num_filters(int): The number of filter. It is as same as the output - image channel. - output_size(int|tuple|None): The output image size. If output size is a - tuple, it must contain two integers, (image_H, image_W). This - parameter only works when filter_size is None. - filter_size(int|tuple|None): The filter size. If filter_size is a tuple, - it must contain two integers, (filter_size_H, filter_size_W). - Otherwise, the filter will be a square. None if use output size to - calculate filter_size - padding(int|tuple): The padding size. If padding is a tuple, it must - contain two integers, (padding_H, padding_W). Otherwise, the - padding_H = padding_W = padding. - stride(int|tuple): The stride size. If stride is a tuple, it must - contain two integers, (stride_H, stride_W). Otherwise, the - stride_H = stride_W = stride. - param_attr: Parameter Attribute. - main_program(Program): the main program - startup_program(Program): the startup program - - Returns: - Variable: Output image. - """ - helper = LayerHelper("conv2d_transpose", **locals()) - if not isinstance(input, Variable): - raise TypeError("Input of conv2d_transpose must be Variable") - input_channel = input.shape[1] - - op_attr = dict() - - if isinstance(padding, int): - op_attr['paddings'] = [padding, padding] - elif padding is not None: - op_attr['paddings'] = padding - - if isinstance(stride, int): - op_attr['strides'] = stride - elif stride is not None: - op_attr['strides'] = stride - - if filter_size is None: - if output_size is None: - raise ValueError("output_size must be set when filter_size is None") - if isinstance(output_size, int): - output_size = [output_size, output_size] - - padding = op_attr.get('paddings', [0, 0]) - stride = op_attr.get('strides', [1, 1]) - - h_in = input.shape[2] - w_in = input.shape[3] - filter_size_h = output_size[0] - \ - (h_in - 1) * stride[0] + 2 * padding[0] - filter_size_w = output_size[1] - \ - (w_in - 1) * stride[1] + 2 * padding[1] - filter_size = [filter_size_h, filter_size_w] - elif isinstance(filter_size, int): - filter_size = [filter_size, filter_size] - - filter_shape = [input_channel, num_filters] + filter_size - img_filter = helper.create_parameter( - dtype=input.dtype, shape=filter_shape, attr=helper.param_attr) - - out = helper.create_tmp_variable(dtype=input.dtype) - helper.append_op( - type='conv2d_transpose', - inputs={'Input': [input], - 'Filter': [img_filter]}, - outputs={'Output': out}, - attrs=op_attr) - - return out - - class ConditionalBlockGuard(BlockGuard): def __init__(self, block): if not isinstance(block, ConditionalBlock): diff --git a/python/paddle/v2/fluid/layers/io.py b/python/paddle/v2/fluid/layers/io.py new file mode 100644 index 0000000000..f03d8e3c3e --- /dev/null +++ b/python/paddle/v2/fluid/layers/io.py @@ -0,0 +1,57 @@ +from .. import core +from ..layer_helper import LayerHelper + +__all__ = ['data'] + + +def data(name, + shape, + append_batch_size=True, + dtype='float32', + lod_level=0, + type=core.VarDesc.VarType.LOD_TENSOR, + main_program=None, + startup_program=None, + stop_gradient=True): + """ + Data Layer. + + Args: + name: The name/alias of the function + shape: Tuple declaring the shape. + append_batch_size: Whether or not to append the data as a batch. + dtype: The type of data : float32, float_16, int etc + type: The output type. By default it is LOD_TENSOR. + lod_level(int): The LoD Level. 0 means the input data is not a sequence. + main_program: Name of the main program that calls this + startup_program: Name of the startup program + stop_gradient: A boolean that mentions whether gradient should flow. + + This function takes in input and based on whether data has + to be returned back as a minibatch, it creates the global variable using + the helper functions. The global variables can be accessed by all the + following operations and layers in the graph. + + All the input variables of this function are passed in as local variables + to the LayerHelper constructor. + + """ + helper = LayerHelper('data', **locals()) + shape = list(shape) + for i in xrange(len(shape)): + if shape[i] is None: + shape[i] = -1 + append_batch_size = False + elif shape[i] < 0: + append_batch_size = False + + if append_batch_size: + shape = [-1] + shape # append batch size as -1 + + return helper.create_global_variable( + name=name, + shape=shape, + dtype=dtype, + type=type, + stop_gradient=stop_gradient, + lod_level=lod_level) diff --git a/python/paddle/v2/fluid/layers/nn.py b/python/paddle/v2/fluid/layers/nn.py new file mode 100644 index 0000000000..f231f38b3e --- /dev/null +++ b/python/paddle/v2/fluid/layers/nn.py @@ -0,0 +1,785 @@ +""" +All layers just related to the neural network. +""" + +from ..layer_helper import LayerHelper +from ..initializer import Normal, Constant +from ..framework import Variable + +__all__ = [ + 'fc', 'embedding', 'dynamic_lstm', 'gru_unit', 'linear_chain_crf', + 'crf_decoding', 'cos_sim', 'cross_entropy', 'square_error_cost', 'accuracy', + 'chunk_eval', 'sequence_conv', 'conv2d', 'sequence_pool', 'pool2d', + 'batch_norm', 'beam_search_decode', 'conv2d_transpose' +] + + +def fc(input, + size, + num_flatten_dims=1, + param_attr=None, + bias_attr=None, + act=None, + name=None, + main_program=None, + startup_program=None): + """ + Fully Connected Layer. + + Args: + input: The input tensor to the function + size: The size of the layer + num_flatten_dims: Number of columns in input + param_attr: The parameters/weights to the FC Layer + param_initializer: Initializer used for the weight/parameter. If None, XavierInitializer() is used + bias_attr: The bias parameter for the FC layer + bias_initializer: Initializer used for the bias. If None, then ConstantInitializer() is used + act: Activation to be applied to the output of FC layer + name: Name/alias of the function + main_program: Name of the main program that calls this + startup_program: Name of the startup program + + This function can take in multiple inputs and performs the Fully Connected + function (linear transformation) on top of each of them. + So for input x, the output will be : Wx + b. Where W is the parameter, + b the bias and x is the input. + + The function also applies an activation (non-linearity) on top of the + output, if activation is passed in the input. + + All the input variables of this function are passed in as local variables + to the LayerHelper constructor. + + """ + helper = LayerHelper('fc', **locals()) + + dtype = helper.input_dtype() + + mul_results = [] + for input_var, param_attr in helper.iter_inputs_and_params(): + input_shape = input_var.shape + param_shape = [ + reduce(lambda a, b: a * b, input_shape[num_flatten_dims:], 1) + ] + [size] + w = helper.create_parameter( + attr=param_attr, shape=param_shape, dtype=dtype, is_bias=False) + tmp = helper.create_tmp_variable(dtype) + helper.append_op( + type="mul", + inputs={ + "X": input_var, + "Y": w, + }, + outputs={"Out": tmp}, + attrs={'x_num_col_dims': num_flatten_dims, + 'y_num_col_dims': 1}) + mul_results.append(tmp) + + # sum + if len(mul_results) == 1: + pre_bias = mul_results[0] + else: + pre_bias = helper.create_tmp_variable(dtype) + helper.append_op( + type="sum", inputs={"X": mul_results}, outputs={"Out": pre_bias}) + # add bias + pre_activation = helper.append_bias_op(pre_bias) + # add activation + return helper.append_activation(pre_activation) + + +def embedding(input, + size, + is_sparse=False, + param_attr=None, + dtype='float32', + main_program=None, + startup_program=None): + """ + Embedding Layer. + + Args: + param_initializer: + input: The input to the function + size: The size of the layer + is_sparse: A flag that decleares whether the input is sparse + param_attr: Parameters for this layer + dtype: The type of data : float32, float_16, int etc + main_program: Name of the main program that calls this + startup_program: Name of the startup program + + This function can take in the input (which is a vector of IDs) and + performs a lookup in the lookup_table using these IDs, to result into + the embedding of each ID in the input. + + All the input variables of this function are passed in as local variables + to the LayerHelper constructor. + + """ + + helper = LayerHelper('embedding', **locals()) + w = helper.create_parameter( + attr=helper.param_attr, shape=size, dtype=dtype, is_bias=False) + tmp = helper.create_tmp_variable(dtype) + helper.append_op( + type='lookup_table', + inputs={'Ids': input, + 'W': w}, + outputs={'Out': tmp}, + attrs={'is_sparse': is_sparse}) + return tmp + + +# TODO(qijun): expose H0 and C0 +def dynamic_lstm(input, + size, + param_attr=None, + bias_attr=None, + use_peepholes=True, + is_reverse=False, + gate_activation='sigmoid', + cell_activation='tanh', + candidate_activation='tanh', + dtype='float32', + main_program=None, + startup_program=None): + helper = LayerHelper('lstm', **locals()) + size = size / 4 + weight = helper.create_parameter( + attr=helper.param_attr, shape=[size, 4 * size], dtype=dtype) + bias_size = [1, 7 * size] + if not use_peepholes: + bias_size[1] = 4 * size + bias = helper.create_parameter( + attr=helper.bias_attr, shape=bias_size, dtype=dtype, is_bias=True) + + hidden = helper.create_tmp_variable(dtype) + cell = helper.create_tmp_variable(dtype) + batch_gate = helper.create_tmp_variable(dtype) + batch_cell_pre_act = helper.create_tmp_variable(dtype) + + helper.append_op( + type='lstm', + inputs={'Input': input, + 'Weight': weight, + 'Bias': bias}, + outputs={ + 'Hidden': hidden, + 'Cell': cell, + 'BatchGate': batch_gate, + 'BatchCellPreAct': batch_cell_pre_act + }, + attrs={ + 'use_peepholes': use_peepholes, + 'is_reverse': is_reverse, + 'gate_activation': gate_activation, + 'cell_activation': cell_activation, + 'candidate_activation': candidate_activation + }) + return hidden, cell + + +def gru_unit(input, + hidden, + size, + weight=None, + bias=None, + activation='tanh', + gate_activation='sigmoid', + main_program=None, + startup_program=None): + """ + GRUUnit Operator implements partial calculations of the GRU unit as following: + + $$ + update \ gate: u_t = actGate(xu_t + W_u * h_{t-1} + b_u) \\ + reset \ gate: r_t = actGate(xr_t + W_r * h_{t-1} + b_r) \\ + output \ candidate: {h}_t = actNode(xc_t + W_c * dot(r_t, h_{t-1}) + b_c) \\ + output: h_t = dot((1 - u_t), h_{t-1}) + dot(u_t, {h}_t) + $$ + + which is same as one time step of GRU Operator. + + @note To implement the complete GRU unit, fully-connected operator must be + used before to feed xu, xr and xc as the Input of GRUUnit operator. + + TODO(ChunweiYan) add more document here + """ + activation_dict = dict( + identity=0, + sigmoid=1, + tanh=2, + relu=3, ) + activation = activation_dict[activation] + gate_activation = activation_dict[gate_activation] + + helper = LayerHelper('gru_unit', **locals()) + dtype = helper.input_dtype() + size = size / 3 + + # create weight + if weight is None: + weight = helper.create_parameter( + attr=helper.param_attr, shape=[size, 3 * size], dtype=dtype) + + # create bias + if bias is None: + bias_size = [1, 3 * size] + bias = helper.create_parameter( + attr=helper.bias_attr, shape=bias_size, dtype=dtype, is_bias=True) + + gate = helper.create_tmp_variable(dtype) + reset_hidden_pre = helper.create_tmp_variable(dtype) + updated_hidden = helper.create_tmp_variable(dtype) + + helper.append_op( + type='gru_unit', + inputs={'Input': input, + 'HiddenPrev': hidden, + 'Weight': weight}, + outputs={ + 'Gate': gate, + 'ResetHiddenPrev': reset_hidden_pre, + 'Hidden': updated_hidden, + }, + attrs={ + 'activation': 0, + 'gate_activation': 1, + }) + + return updated_hidden, reset_hidden_pre, gate + + +def linear_chain_crf(input, + label, + param_attr=None, + main_program=None, + startup_program=None): + helper = LayerHelper('linear_chain_crf', **locals()) + size = input.shape[1] + transition = helper.create_parameter( + attr=helper.param_attr, + shape=[size + 2, size], + dtype=helper.input_dtype()) + alpha = helper.create_tmp_variable(dtype=helper.input_dtype()) + emission_exps = helper.create_tmp_variable(dtype=helper.input_dtype()) + transition_exps = helper.create_tmp_variable(dtype=helper.input_dtype()) + log_likelihood = helper.create_tmp_variable(dtype=helper.input_dtype()) + helper.append_op( + type='linear_chain_crf', + inputs={"Emission": [input], + "Transition": transition, + "Label": label}, + outputs={ + "Alpha": [alpha], + "EmissionExps": [emission_exps], + "TransitionExps": transition_exps, + "LogLikelihood": log_likelihood + }) + + return log_likelihood + + +def crf_decoding(input, + param_attr, + label=None, + main_program=None, + startup_program=None): + helper = LayerHelper('crf_decoding', **locals()) + transition = helper.get_parameter(param_attr.name) + viterbi_path = helper.create_tmp_variable(dtype=helper.input_dtype()) + helper.append_op( + type='crf_decoding', + inputs={"Emission": [input], + "Transition": transition, + "Label": label}, + outputs={"ViterbiPath": [viterbi_path]}) + + return viterbi_path + + +def cos_sim(X, Y, **kwargs): + """ + This function performs the cosine similarity between two tensors + X and Y and returns that as the output. + """ + helper = LayerHelper('cos_sim', **kwargs) + out = helper.create_tmp_variable(dtype=X.dtype) + xnorm = helper.create_tmp_variable(dtype=X.dtype) + ynorm = helper.create_tmp_variable(dtype=X.dtype) + helper.append_op( + type='cos_sim', + inputs={'X': [X], + 'Y': [Y]}, + outputs={'Out': [out], + 'XNorm': [xnorm], + 'YNorm': [ynorm]}) + return out + + +def cross_entropy(input, label, **kwargs): + """ + This function computes cross_entropy using the input and label. + """ + helper = LayerHelper('cross_entropy', **kwargs) + out = helper.create_tmp_variable(dtype=input.dtype) + helper.append_op( + type='cross_entropy', + inputs={'X': [input], + 'Label': [label]}, + outputs={'Y': [out]}, + attrs=kwargs) + return out + + +def square_error_cost(input, label, **kwargs): + """ + This functions returns the squared error cost using the input and label. + The output is appending the op to do the above. + """ + helper = LayerHelper('square_error_cost', **kwargs) + minus_out = helper.create_tmp_variable(dtype=input.dtype) + helper.append_op( + type='elementwise_sub', + inputs={'X': [input], + 'Y': [label]}, + outputs={'Out': [minus_out]}) + + square_out = helper.create_tmp_variable(dtype=input.dtype) + helper.append_op( + type='square', inputs={'X': [minus_out]}, outputs={'Y': [square_out]}) + return square_out + + +def accuracy(input, label, k=1, correct=None, total=None, **kwargs): + """ + This function computes the accuracy using the input and label. + The output is the top_k inputs and their indices. + """ + helper = LayerHelper("accuracy", **kwargs) + topk_out = helper.create_tmp_variable(dtype=input.dtype) + topk_indices = helper.create_tmp_variable(dtype="int64") + helper.append_op( + type="top_k", + inputs={"X": [input]}, + outputs={"Out": [topk_out], + "Indices": [topk_indices]}, + attrs={"k": k}) + acc_out = helper.create_tmp_variable(dtype="float32") + if correct is None: + correct = helper.create_tmp_variable(dtype="int64") + if total is None: + total = helper.create_tmp_variable(dtype="int64") + helper.append_op( + type="accuracy", + inputs={ + "Out": [topk_out], + "Indices": [topk_indices], + "Label": [label] + }, + outputs={ + "Accuracy": [acc_out], + "Correct": [correct], + "Total": [total], + }) + return acc_out + + +def chunk_eval(input, + label, + chunk_scheme, + num_chunk_types, + excluded_chunk_types=None, + **kwargs): + """ + This function computes the accuracy using the input and label. + The output is the top_k inputs and their indices. + """ + helper = LayerHelper("chunk_eval", **kwargs) + + # prepare output + precision = helper.create_tmp_variable(dtype="float32") + recall = helper.create_tmp_variable(dtype="float32") + f1_score = helper.create_tmp_variable(dtype="float32") + + helper.append_op( + type="chunk_eval", + inputs={"Inference": [input], + "Label": [label]}, + outputs={ + "Precision": [precision], + "Recall": [recall], + "F1-Score": [f1_score] + }, + attrs={ + "num_chunk_types": num_chunk_types, + 'chunk_scheme': chunk_scheme, + 'excluded_chunk_types': excluded_chunk_types or [] + }) + return precision, recall, f1_score + + +def sequence_conv(input, + num_filters, + filter_size=3, + filter_stride=1, + padding=None, + bias_attr=None, + param_attr=None, + act=None, + main_program=None, + startup_program=None): + """ + This function creates the op for sequence_conv, using the inputs and + other convolutional configurations for the filters and stride as given + in the input parameters to the function. + """ + + # FIXME(dzh) : want to unify the argument of python layer + # function. So we ignore some unecessary attributes. + # such as, padding_trainable, context_start. + + helper = LayerHelper('sequence_conv', **locals()) + dtype = helper.input_dtype() + filter_shape = [filter_size * input.shape[1], num_filters] + filter_param = helper.create_parameter( + attr=helper.param_attr, shape=filter_shape, dtype=dtype) + pre_bias = helper.create_tmp_variable(dtype) + + helper.append_op( + type='sequence_conv', + inputs={ + 'X': [input], + 'Filter': [filter_param], + }, + outputs={"Out": pre_bias}, + attrs={ + 'contextStride': filter_stride, + 'contextStart': -int(filter_size / 2), + 'contextLength': filter_size + }) + pre_act = helper.append_bias_op(pre_bias) + return helper.append_activation(pre_act) + + +def conv2d(input, + num_filters, + filter_size, + stride=None, + padding=None, + groups=None, + param_attr=None, + bias_attr=None, + act=None, + name=None, + main_program=None, + startup_program=None): + """ + This function creates the op for a 2-dimensional Convolution. + This is performed using the parameters of filters(size, dimensionality etc) + , stride and other configurations for a Convolution operation. + This funciton can also append an activation on top of the + conv-2d output, if mentioned in the input parameters. + """ + + if stride is None: + stride = [1, 1] + helper = LayerHelper('conv2d', **locals()) + dtype = helper.input_dtype() + + num_channels = input.shape[1] + if groups is None: + num_filter_channels = num_channels + else: + if num_channels % groups != 0: + raise ValueError("num_channels must be divisible by groups.") + num_filter_channels = num_channels / groups + + if isinstance(filter_size, int): + filter_size = [filter_size, filter_size] + if isinstance(stride, int): + stride = [stride, stride] + if isinstance(padding, int): + padding = [padding, padding] + + input_shape = input.shape + filter_shape = [num_filters, num_filter_channels] + filter_size + + def _get_default_param_initializer(): + std = (2.0 / (filter_size[0]**2 * num_channels))**0.5 + return Normal(0.0, std, 0) + + filter_param = helper.create_parameter( + attr=helper.param_attr, + shape=filter_shape, + dtype=dtype, + default_initializer=_get_default_param_initializer()) + + pre_bias = helper.create_tmp_variable(dtype) + + helper.append_op( + type='conv2d_cudnn', + inputs={ + 'Input': input, + 'Filter': filter_param, + }, + outputs={"Output": pre_bias}, + attrs={'strides': stride, + 'paddings': padding, + 'groups': groups}) + + pre_act = helper.append_bias_op(pre_bias, dim_start=1, dim_end=2) + + return helper.append_activation(pre_act) + + +def sequence_pool(input, pool_type, **kwargs): + """ + This function add the operator for sequence pooling. + This is applied on top of the input using pool_type mentioned + in the parameters. + """ + helper = LayerHelper('sequence_pool', input=input, **kwargs) + dtype = helper.input_dtype() + pool_out = helper.create_tmp_variable(dtype) + max_index = helper.create_tmp_variable(dtype) + + helper.append_op( + type="sequence_pool", + inputs={"X": input}, + outputs={"Out": pool_out, + "MaxIndex": max_index}, + attrs={"pooltype": pool_type.upper()}) + + return pool_out + + +def pool2d(input, + pool_size, + pool_type, + pool_stride=None, + pool_padding=None, + global_pooling=False, + main_program=None, + startup_program=None): + """ + This function adds the operator for pooling in 2 dimensions, using the + pooling configurations mentioned in input parameters. + """ + if pool_padding is None: + pool_padding = [0, 0] + if pool_stride is None: + pool_stride = [1, 1] + if pool_type not in ["max", "avg"]: + raise ValueError( + "Unknown pool_type: '%s'. It can only be 'max' or 'avg'.", + str(pool_type)) + if isinstance(pool_size, int): + pool_size = [pool_size, pool_size] + if isinstance(pool_stride, int): + pool_stride = [pool_stride, pool_stride] + if isinstance(pool_padding, int): + pool_padding = [pool_padding, pool_padding] + + helper = LayerHelper('pool2d', **locals()) + dtype = helper.input_dtype() + pool_out = helper.create_tmp_variable(dtype) + + helper.append_op( + type="pool2d", + inputs={"X": input}, + outputs={"Out": pool_out}, + attrs={ + "pooling_type": pool_type, + "ksize": pool_size, + "global_pooling": global_pooling, + "strides": pool_stride, + "paddings": pool_padding + }) + + return pool_out + + +def batch_norm(input, + act=None, + is_test=False, + momentum=0.9, + epsilon=1e-05, + param_attr=None, + bias_attr=None, + data_layout='NCHW', + main_program=None, + startup_program=None): + """ + This function helps create an operator to implement + the BatchNorm layer using the configurations from the input parameters. + """ + helper = LayerHelper('batch_norm', **locals()) + dtype = helper.input_dtype() + + input_shape = input.shape + if data_layout == 'NCHW': + channel_num = input_shape[1] + else: + if data_layout == 'NHWC': + channel_num = input_shape[-1] + else: + raise ValueError("unsupported data layout:" + data_layout) + + param_shape = [channel_num] + + # create parameter + scale = helper.create_parameter( + attr=helper.param_attr, + shape=param_shape, + dtype=dtype, + default_initializer=Constant(1.0)) + + bias = helper.create_parameter( + attr=helper.param_attr, shape=param_shape, dtype=dtype, is_bias=True) + + mean = helper.create_global_variable( + dtype=input.dtype, shape=param_shape, persistable=True) + helper.set_variable_initializer(var=mean, initializer=Constant(0.0)) + + variance = helper.create_global_variable( + dtype=input.dtype, shape=param_shape, persistable=True) + helper.set_variable_initializer(var=variance, initializer=Constant(1.0)) + + # create output + # mean and mean_out share the same memory + mean_out = mean + # variance and variance out share the same memory + variance_out = variance + saved_mean = helper.create_tmp_variable(dtype) + saved_variance = helper.create_tmp_variable(dtype) + + batch_norm_out = helper.create_tmp_variable(dtype) + + helper.append_op( + type="batch_norm", + inputs={ + "X": input, + "Scale": scale, + "Bias": bias, + "Mean": mean, + "Variance": variance + }, + outputs={ + "Y": batch_norm_out, + "MeanOut": mean_out, + "VarianceOut": variance_out, + "SavedMean": saved_mean, + "SavedVariance": saved_variance + }, + attrs={"momentum": momentum, + "epsilon": epsilon, + "is_test": is_test}) + + return helper.append_activation(batch_norm_out) + + +def beam_search_decode(ids, scores, main_program=None, startup_program=None): + helper = LayerHelper('beam_search_decode', **locals()) + sentence_ids = helper.create_tmp_variable(dtype=ids.dtype) + sentence_scores = helper.create_tmp_variable(dtype=ids.dtype) + + helper.append_op( + type="beam_search_decode", + inputs={"Ids": ids, + "Scores": scores}, + outputs={ + "SentenceIds": sentence_ids, + "SentenceScores": sentence_scores + }) + + return sentence_ids, sentence_scores + + +def conv2d_transpose(input, + num_filters, + output_size=None, + filter_size=None, + padding=None, + stride=None, + param_attr=None, + main_program=None, + startup_program=None): + """ + The transpose of conv2d layer. + + This layer is also known as deconvolution layer. + + Args: + input(Variable): The input image with [N, C, H, W] format. + num_filters(int): The number of filter. It is as same as the output + image channel. + output_size(int|tuple|None): The output image size. If output size is a + tuple, it must contain two integers, (image_H, image_W). This + parameter only works when filter_size is None. + filter_size(int|tuple|None): The filter size. If filter_size is a tuple, + it must contain two integers, (filter_size_H, filter_size_W). + Otherwise, the filter will be a square. None if use output size to + calculate filter_size + padding(int|tuple): The padding size. If padding is a tuple, it must + contain two integers, (padding_H, padding_W). Otherwise, the + padding_H = padding_W = padding. + stride(int|tuple): The stride size. If stride is a tuple, it must + contain two integers, (stride_H, stride_W). Otherwise, the + stride_H = stride_W = stride. + param_attr: Parameter Attribute. + main_program(Program): the main program + startup_program(Program): the startup program + + Returns: + Variable: Output image. + """ + helper = LayerHelper("conv2d_transpose", **locals()) + if not isinstance(input, Variable): + raise TypeError("Input of conv2d_transpose must be Variable") + input_channel = input.shape[1] + + op_attr = dict() + + if isinstance(padding, int): + op_attr['paddings'] = [padding, padding] + elif padding is not None: + op_attr['paddings'] = padding + + if isinstance(stride, int): + op_attr['strides'] = stride + elif stride is not None: + op_attr['strides'] = stride + + if filter_size is None: + if output_size is None: + raise ValueError("output_size must be set when filter_size is None") + if isinstance(output_size, int): + output_size = [output_size, output_size] + + padding = op_attr.get('paddings', [0, 0]) + stride = op_attr.get('strides', [1, 1]) + + h_in = input.shape[2] + w_in = input.shape[3] + filter_size_h = output_size[0] - \ + (h_in - 1) * stride[0] + 2 * padding[0] + filter_size_w = output_size[1] - \ + (w_in - 1) * stride[1] + 2 * padding[1] + filter_size = [filter_size_h, filter_size_w] + elif isinstance(filter_size, int): + filter_size = [filter_size, filter_size] + + filter_shape = [input_channel, num_filters] + filter_size + img_filter = helper.create_parameter( + dtype=input.dtype, shape=filter_shape, attr=helper.param_attr) + + out = helper.create_tmp_variable(dtype=input.dtype) + helper.append_op( + type='conv2d_transpose', + inputs={'Input': [input], + 'Filter': [img_filter]}, + outputs={'Output': out}, + attrs=op_attr) + + return out diff --git a/python/paddle/v2/fluid/layers/ops.py b/python/paddle/v2/fluid/layers/ops.py new file mode 100644 index 0000000000..fa312ace60 --- /dev/null +++ b/python/paddle/v2/fluid/layers/ops.py @@ -0,0 +1,9 @@ +from ..registry import register_layer +__all__ = [ + 'mean', 'mul', 'dropout', 'reshape', 'sigmoid', 'scale', 'transpose', + 'sigmoid_cross_entropy_with_logits', 'elementwise_add', 'elementwise_div', + 'elementwise_sub', 'elementwise_mul', 'clip', 'abs' +] + +for _OP in set(__all__): + globals()[_OP] = register_layer(_OP) diff --git a/python/paddle/v2/fluid/layers/tensor.py b/python/paddle/v2/fluid/layers/tensor.py new file mode 100644 index 0000000000..a839ed897d --- /dev/null +++ b/python/paddle/v2/fluid/layers/tensor.py @@ -0,0 +1,130 @@ +from ..layer_helper import LayerHelper + +__all__ = [ + 'create_tensor', 'cast', 'concat', 'sums', 'assign', + 'fill_constant_batch_size_like', 'fill_constant', 'ones', 'zeros' +] + + +def create_tensor(dtype, name=None, main_program=None, startup_program=None): + helper = LayerHelper("create_tensor", **locals()) + return helper.create_variable(name=helper.name, dtype=dtype) + + +def cast(x, dtype, main_program=None): + """ + This function takes in the input with input_dtype + and casts it to the output_dtype as the output. + """ + helper = LayerHelper('cast', **locals()) + out = helper.create_tmp_variable(dtype=dtype) + helper.append_op( + type='cast', + inputs={'X': [x]}, + outputs={'Out': [out]}, + attrs={'in_dtype': x.dtype, + 'out_dtype': out.dtype}) + return out + + +def concat(input, axis, main_program=None, startup_program=None): + """ + This function concats the input along the axis mentioned + and returns that as the output. + """ + helper = LayerHelper('concat', **locals()) + out = helper.create_tmp_variable(dtype=helper.input_dtype()) + helper.append_op( + type='concat', + inputs={'X': input}, + outputs={'Out': [out]}, + attrs={'axis': axis}) + return out + + +def sums(input, out=None, main_program=None, startup_program=None): + """ + This function takes in the input and performs the sum operation on it + and returns that as the output. + """ + helper = LayerHelper('sum', **locals()) + if out is None: + out = helper.create_tmp_variable(dtype=helper.input_dtype()) + helper.append_op(type='sum', inputs={'X': input}, outputs={'Out': out}) + return out + + +def assign(input, output, main_program=None, startup_program=None): + helper = LayerHelper('assign', **locals()) + helper.append_op( + type='scale', + inputs={'X': [input]}, + outputs={'Out': [output]}, + attrs={'scale': 1.0}) + return output + + +def fill_constant(shape, + dtype, + value, + out=None, + main_program=None, + startup_program=None): + """ + This function creates a tensor , with shape as mentioned in the input and + specified dtype and fills this up with a constant value that + comes in the input. It also sets the stop_gradient to be True. + """ + helper = LayerHelper("fill_constant", **locals()) + if out is None: + out = helper.create_tmp_variable(dtype=dtype) + helper.append_op( + type='fill_constant', + inputs={}, + outputs={'Out': [out]}, + attrs={'shape': shape, + 'dtype': out.dtype, + 'value': float(value)}) + out.stop_gradient = True + return out + + +def fill_constant_batch_size_like(input, + shape, + dtype, + value, + input_dim_idx=0, + output_dim_idx=0, + main_program=None, + startup_program=None): + helper = LayerHelper("fill_constant_batch_size_like", **locals()) + out = helper.create_tmp_variable(dtype=dtype) + helper.append_op( + type='fill_constant_batch_size_like', + inputs={'Input': input}, + outputs={'Out': [out]}, + attrs={ + 'shape': shape, + 'dtype': out.dtype, + 'value': float(value), + 'input_dim_idx': input_dim_idx, + 'output_dim_idx': output_dim_idx + }) + out.stop_gradient = True + return out + + +def ones(shape, dtype, main_program=None): + """ + This function performs the same function as fill_constant() declared above + with the constant value being 1.0. + """ + return fill_constant(value=1.0, **locals()) + + +def zeros(shape, dtype, main_program=None): + """ + This function performs the same function as fill_constant() declared above + with the constant value being 0.0. + """ + return fill_constant(value=0.0, **locals()) diff --git a/python/paddle/v2/fluid/tests/book/test_image_classification_train.py b/python/paddle/v2/fluid/tests/book/test_image_classification_train.py index 4e71b6f345..3d336ffe95 100644 --- a/python/paddle/v2/fluid/tests/book/test_image_classification_train.py +++ b/python/paddle/v2/fluid/tests/book/test_image_classification_train.py @@ -1,9 +1,9 @@ from __future__ import print_function -import numpy as np +import sys + import paddle.v2 as paddle import paddle.v2.fluid as fluid -import sys def resnet_cifar10(input, depth=32): diff --git a/python/paddle/v2/fluid/tests/book/test_understand_sentiment_lstm.py b/python/paddle/v2/fluid/tests/book/test_understand_sentiment_lstm.py index 80f8599679..c0b051f862 100644 --- a/python/paddle/v2/fluid/tests/book/test_understand_sentiment_lstm.py +++ b/python/paddle/v2/fluid/tests/book/test_understand_sentiment_lstm.py @@ -1,6 +1,51 @@ import numpy as np import paddle.v2 as paddle import paddle.v2.fluid as fluid +from paddle.v2.fluid.layer_helper import LayerHelper + + +def lstm(x, + c_pre_init, + hidden_dim, + forget_bias=None, + main_program=None, + startup_program=None): + """ + This function helps create an operator for the LSTM (Long Short Term + Memory) cell that can be used inside an RNN. + """ + helper = LayerHelper('lstm_unit', **locals()) + rnn = fluid.layers.StaticRNN() + with rnn.step(): + c_pre = rnn.memory(init=c_pre_init) + x_t = rnn.step_input(x) + + before_fc = fluid.layers.concat( + input=[x_t, c_pre], + axis=1, + main_program=main_program, + startup_program=startup_program) + after_fc = fluid.layers.fc(input=before_fc, + size=hidden_dim * 4, + main_program=main_program, + startup_program=startup_program) + + dtype = x.dtype + c = helper.create_tmp_variable(dtype) + h = helper.create_tmp_variable(dtype) + + helper.append_op( + type='lstm_unit', + inputs={"X": after_fc, + "C_prev": c_pre}, + outputs={"C": c, + "H": h}, + attrs={"forget_bias": forget_bias}) + + rnn.update_memory(c_pre, c) + rnn.output(h) + + return rnn() def lstm_net(dict_dim, class_dim=2, emb_dim=32, seq_len=80, batch_size=50): @@ -23,8 +68,7 @@ def lstm_net(dict_dim, class_dim=2, emb_dim=32, seq_len=80, batch_size=50): c_pre_init = fluid.layers.fill_constant( dtype=emb.dtype, shape=[batch_size, emb_dim], value=0.0) c_pre_init.stop_gradient = False - layer_1_out = fluid.layers.lstm( - emb, c_pre_init=c_pre_init, hidden_dim=emb_dim) + layer_1_out = lstm(emb, c_pre_init=c_pre_init, hidden_dim=emb_dim) layer_1_out = fluid.layers.transpose(x=layer_1_out, axis=[1, 0, 2]) prediction = fluid.layers.fc(input=layer_1_out, diff --git a/python/setup.py.in b/python/setup.py.in index 9ccb4dc176..8396fb44cf 100644 --- a/python/setup.py.in +++ b/python/setup.py.in @@ -68,6 +68,7 @@ packages=['paddle', 'paddle.v2.plot', 'paddle.v2.fluid', 'paddle.v2.fluid.proto', + 'paddle.v2.fluid.layers', 'py_paddle'] with open('@PADDLE_SOURCE_DIR@/python/requirements.txt') as f: From a524f8e6d6988b995d8f84fa7b51b416d8f12480 Mon Sep 17 00:00:00 2001 From: Luo Tao Date: Thu, 14 Dec 2017 18:46:24 +0800 Subject: [PATCH 098/193] auto compute the training FPS by avg elapsed time --- benchmark/paddle/image/run_mkldnn_train.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/benchmark/paddle/image/run_mkldnn_train.sh b/benchmark/paddle/image/run_mkldnn_train.sh index 320206239a..5335af5ac1 100755 --- a/benchmark/paddle/image/run_mkldnn_train.sh +++ b/benchmark/paddle/image/run_mkldnn_train.sh @@ -28,6 +28,10 @@ function train() { --test_period=100 \ --config_args=$args \ 2>&1 | tee ${log} + + avg_time=`tail ${log} -n 1 | awk -F ' ' '{print $8}' | sed 's/avg=//'` + fps=`awk 'BEGIN{printf "%.2f",('$bs' / '$avg_time' * 1000)}'` + echo "FPS: $fps images/sec" 2>&1 | tee -a ${log} } if [ ! -f "train.list" ]; then From a2dfabb46a5dc2ac11d57b91c3fe8ed749c17c82 Mon Sep 17 00:00:00 2001 From: dzhwinter Date: Thu, 14 Dec 2017 03:07:21 -0800 Subject: [PATCH 099/193] "fix based on comments" --- doc/design/paddle_nccl.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/design/paddle_nccl.md b/doc/design/paddle_nccl.md index 5e28144b95..7f0d8e14e4 100644 --- a/doc/design/paddle_nccl.md +++ b/doc/design/paddle_nccl.md @@ -7,7 +7,7 @@ This Design Doc refers to the NCCL feature in paddle. We propose an approach t ## Motivation -NCCL is a NVIDIA library support Multi-GPU communicating and optimized for NVIDIA GPUs, it provides routines such as all-gather, all-reduce, broadcast, reduce, reduce-scatter, that can achieve high bandwidth over PCIe and NVLink high-speed interconnect. [NCCL](https://developer.nvidia.com/nccl). With NCCL library, we can easily accelerate the training in parallel. +[NCCL](https://developer.nvidia.com/nccl) is a NVIDIA library support Multi-GPU communicating and optimized for NVIDIA GPUs, it provides routines such as all-gather, all-reduce, broadcast, reduce, reduce-scatter, that can achieve high bandwidth over PCIe and NVLink high-speed interconnect. With NCCL library, we can easily accelerate the training in parallel. - Pros 1. easily plug-in with [NCCL2](https://developer.nvidia.com/nccl) library. From 126d274ed4c162045bd3c5e957826227bb2119b7 Mon Sep 17 00:00:00 2001 From: wangmeng28 Date: Thu, 14 Dec 2017 00:38:44 +0800 Subject: [PATCH 100/193] Add separable convolution --- .../paddle/trainer_config_helpers/networks.py | 104 ++++++++++++++++-- 1 file changed, 92 insertions(+), 12 deletions(-) diff --git a/python/paddle/trainer_config_helpers/networks.py b/python/paddle/trainer_config_helpers/networks.py index 9776ae1805..6e231cc10f 100644 --- a/python/paddle/trainer_config_helpers/networks.py +++ b/python/paddle/trainer_config_helpers/networks.py @@ -25,10 +25,10 @@ from paddle.trainer.config_parser import * __all__ = [ 'sequence_conv_pool', 'simple_lstm', "simple_img_conv_pool", "img_conv_bn_pool", 'lstmemory_group', 'lstmemory_unit', 'small_vgg', - 'img_conv_group', 'vgg_16_network', 'gru_unit', 'gru_group', 'simple_gru', - 'simple_attention', 'dot_product_attention', 'multi_head_attention', - 'simple_gru2', 'bidirectional_gru', 'text_conv_pool', 'bidirectional_lstm', - 'inputs', 'outputs' + 'img_conv_group', 'img_separable_conv', 'vgg_16_network', 'gru_unit', + 'gru_group', 'simple_gru', 'simple_attention', 'dot_product_attention', + 'multi_head_attention', 'simple_gru2', 'bidirectional_gru', + 'text_conv_pool', 'bidirectional_lstm', 'inputs', 'outputs' ] ###################################################### @@ -251,13 +251,13 @@ def img_conv_bn_pool(input, pool_layer_attr=None): """ Convolution, batch normalization, pooling group. - + Img input => Conv => BN => Pooling => Output. :param name: group name. :type name: basestring :param input: input layer. - :type input: LayerOutput + :type input: LayerOutput :param filter_size: see img_conv_layer for details. :type filter_size: int :param num_filters: see img_conv_layer for details. @@ -435,6 +435,86 @@ def img_conv_group(input, input=tmp, stride=pool_stride, pool_size=pool_size, pool_type=pool_type) +@wrap_name_default("separable_conv") +def img_separable_conv(input, + num_channels, + num_out_channels, + filter_size, + stride=1, + padding=0, + depth_multiplier=1, + act=None, + bias_attr=None, + param_attr=None, + shared_bias=True, + layer_type=None, + name=None): + """ + Separable Convolution. + + The separable convolution module is consisted of a depthwise convolution + that acts separately on input channels, followed by a pointwise convolution + with 1*1 kernels that mixes channels. It is used for Xception: + https://arxiv.org/pdf/1610.02357.pdf + + :param input: input layer. + :type input: LayerOutput + :param num_channels: the number of input channels. + :type num_channels: int + :param num_out_channels: the number of output channels. + :type num_out_channels: int + :param filter_size: the filter size for the depthwise convolution. + :type filter_size: int|tuple + :param stride: the stride size for the depthwise convolution. + :type stride: int|tuple + :param padding: the padding size for the depthwise convolution. + :type padding: int|tuple + :param depth_multiplier: the number of filter for one channel in the + depthwize convolution. + :type depth_multiplier: int + :param act: the activation function for the output. + :type act: BaseActivation + :param bias_attr: see img_conv_layer for details. + :type bias_attr: ParameterAttribute + :param param_attr: see img_conv_layer for details. + :type param_attr: ParameterAttribute + :param shared_bias: see img_conv_layer for details. + :type shared_bias: bool + :param layer_type: see img_conv_layer for details. + :type layer_type: bool + :return: layer's output + :rtype: LayerOutput + """ + __depthwise_conv__ = img_conv_layer( + name="%s_depthwise_conv" % name, + input=input, + num_channels=num_channels, + num_filters=num_channels * depth_multiplier, + groups=num_channels, + filter_size=filter_size, + stride=stride, + padding=padding, + act=LinearActivation(), + bias_attr=bias_attr, + param_attr=param_attr, + shared_biases=shared_bias, + layer_type=layer_type) + __pointwise_conv__ = img_conv_layer( + name="%s_pointwise_conv" % name, + input=__depthwise_conv__, + num_channels=num_channels * depth_multiplier, + num_filters=num_out_channels, + filter_size=1, + stride=1, + padding=0, + act=act, + bias_attr=bias_attr, + param_attr=param_attr, + shared_biases=shared_bias, + layer_type=layer_type) + return __pointwise_conv__ + + def small_vgg(input_image, num_channels, num_classes): def __vgg__(ipt, num_filter, times, dropouts, num_channels_=None): return img_conv_group( @@ -648,7 +728,7 @@ def lstmemory_unit(input, lstm_bias_attr=None, lstm_layer_attr=None): """ - lstmemory_unit defines the caculation process of a LSTM unit during a + lstmemory_unit defines the caculation process of a LSTM unit during a single time step. This function is not a recurrent layer, so it can not be directly used to process sequence input. This function is always used in recurrent_group (see layers.py for more details) to implement attention @@ -869,7 +949,7 @@ def gru_unit(input, gru_layer_attr=None, naive=False): """ - gru_unit defines the calculation process of a gated recurrent unit during a single + gru_unit defines the calculation process of a gated recurrent unit during a single time step. This function is not a recurrent layer, so it can not be directly used to process sequence input. This function is always used in the recurrent_group (see layers.py for more details) to implement attention @@ -1012,7 +1092,7 @@ def simple_gru(input, simple_gru in network.py. The reason why there are so many interfaces is that we have two ways to implement recurrent neural network. One way is to use one complete layer to implement rnn (including simple rnn, gru and lstm) - with multiple time steps, such as recurrent_layer, lstmemory, grumemory. But + with multiple time steps, such as recurrent_layer, lstmemory, grumemory. But the multiplication operation :math:`W x_t` is not computed in these layers. See details in their interfaces in layers.py. The other implementation is to use an recurrent group which can ensemble a @@ -1116,7 +1196,7 @@ def simple_gru2(input, :type act: BaseActivation :param gate_act: gate activiation type of gru :type gate_act: BaseActivation - :param gru_bias_attr: bias parameter attribute of gru layer, + :param gru_bias_attr: bias parameter attribute of gru layer, False means no bias, None means default bias. :type gru_bias_attr: ParameterAttribute|False|None :param gru_layer_attr: Extra attribute of the gru layer. @@ -1188,7 +1268,7 @@ def bidirectional_gru(input, :type size: int :param return_seq: If set False, the last time step of output are concatenated and returned. - If set True, the entire output sequences in forward + If set True, the entire output sequences in forward and backward directions are concatenated and returned. :type return_seq: bool :return: LayerOutput object. @@ -1277,7 +1357,7 @@ def bidirectional_lstm(input, :type size: int :param return_seq: If set False, the last time step of output are concatenated and returned. - If set True, the entire output sequences in forward + If set True, the entire output sequences in forward and backward directions are concatenated and returned. :type return_seq: bool :return: LayerOutput object. From a02a68dc6daecbd3d5b17b57db03e0b3f916646e Mon Sep 17 00:00:00 2001 From: dzhwinter Date: Thu, 14 Dec 2017 06:09:54 -0800 Subject: [PATCH 101/193] "fixed based on comment" --- doc/design/paddle_nccl.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/design/paddle_nccl.md b/doc/design/paddle_nccl.md index 7f0d8e14e4..c7dac70998 100644 --- a/doc/design/paddle_nccl.md +++ b/doc/design/paddle_nccl.md @@ -28,9 +28,9 @@ Besides, it needs interfaces to synchronize model update with each different GPU As mentioned above, we wrap the NCCL routines as several kinds of operators. Need to note that NCCL need to create Communicator between gpu at the beginning, so there is a NCCLInit operator created. -### Graph Converter +### Transpiler -To be compatible with [parameter server design doc](https://github.com/PaddlePaddle/Paddle/blob/develop/doc/design/ops/dist_train.md), the graph converter converts the user defined operation graph into sub-graphs to be executed on different devices. +To be compatible with [parameter server design doc](https://github.com/PaddlePaddle/Paddle/blob/develop/doc/design/ops/dist_train.md), the transpiler compiles the user defined operation graph into sub-graphs to be executed on different devices. 1. The user-defined model will be a single device program @@ -40,7 +40,7 @@ To be compatible with [parameter server design doc](https://github.com/PaddlePad -After convert, the graph as shows +After compiling, the graph as shows From e0c33176460ffe322c8ff6da024628741423d020 Mon Sep 17 00:00:00 2001 From: tensor-tang Date: Thu, 14 Dec 2017 23:14:18 +0800 Subject: [PATCH 102/193] add MKLDNNPlace --- paddle/platform/place.cc | 6 ++++++ paddle/platform/place.h | 19 ++++++++++++++++++- paddle/platform/place_test.cc | 6 ++++++ 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/paddle/platform/place.cc b/paddle/platform/place.cc index 856e54df89..16f1774285 100644 --- a/paddle/platform/place.cc +++ b/paddle/platform/place.cc @@ -23,6 +23,7 @@ class PlacePrinter : public boost::static_visitor<> { public: explicit PlacePrinter(std::ostream &os) : os_(os) {} void operator()(const CPUPlace &) { os_ << "CPUPlace"; } + void operator()(const MKLDNNPlace &) { os_ << "MKLDNNPlace"; } void operator()(const GPUPlace &p) { os_ << "GPUPlace(" << p.device << ")"; } private: @@ -38,6 +39,7 @@ const Place &get_place() { return the_default_place; } const GPUPlace default_gpu() { return GPUPlace(0); } const CPUPlace default_cpu() { return CPUPlace(); } +const MKLDNNPlace default_mkldnn() { return MKLDNNPlace(); } bool is_gpu_place(const Place &p) { return boost::apply_visitor(IsGPUPlace(), p); @@ -46,6 +48,10 @@ bool is_cpu_place(const Place &p) { return !boost::apply_visitor(IsGPUPlace(), p); } +bool is_mkldnn_place(const Place &p) { + return boost::apply_visitor(IsMKLDNNPlace(), p); +} + bool places_are_same_class(const Place &p1, const Place &p2) { return p1.which() == p2.which(); } diff --git a/paddle/platform/place.h b/paddle/platform/place.h index 5370360a7d..e745b2e839 100644 --- a/paddle/platform/place.h +++ b/paddle/platform/place.h @@ -31,6 +31,14 @@ struct CPUPlace { inline bool operator!=(const CPUPlace &) const { return false; } }; +struct MKLDNNPlace : public CPUPlace { + MKLDNNPlace() {} + + // needed for variant equality comparison + inline bool operator==(const MKLDNNPlace &) const { return true; } + inline bool operator!=(const MKLDNNPlace &) const { return false; } +}; + struct GPUPlace { GPUPlace() : GPUPlace(0) {} explicit GPUPlace(int d) : device(d) {} @@ -45,14 +53,21 @@ struct GPUPlace { struct IsGPUPlace : public boost::static_visitor { bool operator()(const CPUPlace &) const { return false; } + bool operator()(const MKLDNNPlace &) const { return false; } bool operator()(const GPUPlace &gpu) const { return true; } }; +struct IsMKLDNNPlace : public boost::static_visitor { + bool operator()(const MKLDNNPlace &) const { return true; } + bool operator()(const CPUPlace &) const { return false; } + bool operator()(const GPUPlace &) const { return false; } +}; + // Define the max number of Place in bit length. i.e., the max number of places // should be less equal than 2^(NUM_PLACE_TYPE_LIMIT_IN_BIT) #define NUM_PLACE_TYPE_LIMIT_IN_BIT 4 -typedef boost::variant Place; +typedef boost::variant Place; // static check number of place types is less equal than // 2^(NUM_PLACE_TYPE_LIMIT_IN_BIT) @@ -65,9 +80,11 @@ const Place &get_place(); const GPUPlace default_gpu(); const CPUPlace default_cpu(); +const MKLDNNPlace default_mkldnn(); bool is_gpu_place(const Place &); bool is_cpu_place(const Place &); +bool is_mkldnn_place(const Place &); bool places_are_same_class(const Place &, const Place &); std::ostream &operator<<(std::ostream &, const Place &); diff --git a/paddle/platform/place_test.cc b/paddle/platform/place_test.cc index 33e2e5a439..184af12c23 100644 --- a/paddle/platform/place_test.cc +++ b/paddle/platform/place_test.cc @@ -21,9 +21,15 @@ TEST(Place, Default) { EXPECT_TRUE(paddle::platform::is_gpu_place(paddle::platform::get_place())); EXPECT_TRUE(paddle::platform::is_gpu_place(paddle::platform::default_gpu())); EXPECT_TRUE(paddle::platform::is_cpu_place(paddle::platform::default_cpu())); + EXPECT_TRUE( + paddle::platform::is_mkldnn_place(paddle::platform::default_mkldnn())); paddle::platform::set_place(paddle::platform::CPUPlace()); EXPECT_TRUE(paddle::platform::is_cpu_place(paddle::platform::get_place())); + + paddle::platform::set_place(paddle::platform::MKLDNNPlace()); + EXPECT_FALSE(paddle::platform::is_cpu_place(paddle::platform::get_place())); + EXPECT_TRUE(paddle::platform::is_mkldnn_place(paddle::platform::get_place())); } TEST(Place, Print) { From f271210595953fee610dd049909d7e3a40f58285 Mon Sep 17 00:00:00 2001 From: tensor-tang Date: Fri, 15 Dec 2017 15:15:18 +0800 Subject: [PATCH 103/193] fix undefined issue when with_gpu --- paddle/operators/math/math_function.cc | 8 ++++++++ paddle/platform/place.h | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/paddle/operators/math/math_function.cc b/paddle/operators/math/math_function.cc index 2b35e4532a..a05810d778 100644 --- a/paddle/operators/math/math_function.cc +++ b/paddle/operators/math/math_function.cc @@ -277,6 +277,14 @@ void set_constant_with_place( TensorSetConstantCPU(tensor, value)); } +template <> +void set_constant_with_place( + const platform::DeviceContext& context, framework::Tensor* tensor, + float value) { + framework::VisitDataType(framework::ToDataType(tensor->type()), + TensorSetConstantCPU(tensor, value)); +} + struct TensorSetConstantWithPlace : public boost::static_visitor { TensorSetConstantWithPlace(const platform::DeviceContext& context, framework::Tensor* tensor, float value) diff --git a/paddle/platform/place.h b/paddle/platform/place.h index e745b2e839..70acc5b2d4 100644 --- a/paddle/platform/place.h +++ b/paddle/platform/place.h @@ -31,7 +31,7 @@ struct CPUPlace { inline bool operator!=(const CPUPlace &) const { return false; } }; -struct MKLDNNPlace : public CPUPlace { +struct MKLDNNPlace { MKLDNNPlace() {} // needed for variant equality comparison From a92f057ed1d52f8eed341212e11a76153512a1cf Mon Sep 17 00:00:00 2001 From: tensor-tang Date: Fri, 15 Dec 2017 16:46:27 +0800 Subject: [PATCH 104/193] fix conflict of Place --- paddle/platform/place.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/paddle/platform/place.h b/paddle/platform/place.h index 5a1ce52800..4526945792 100644 --- a/paddle/platform/place.h +++ b/paddle/platform/place.h @@ -72,7 +72,7 @@ struct IsMKLDNNPlace : public boost::static_visitor { // should be less equal than 2^(NUM_PLACE_TYPE_LIMIT_IN_BIT) #define NUM_PLACE_TYPE_LIMIT_IN_BIT 4 -typedef boost::variant Place; +typedef boost::variant Place; // static check number of place types is less equal than // 2^(NUM_PLACE_TYPE_LIMIT_IN_BIT) From bf269d67b3d1e8d88797022e4ea542f34c06df47 Mon Sep 17 00:00:00 2001 From: tensor-tang Date: Fri, 15 Dec 2017 16:48:00 +0800 Subject: [PATCH 105/193] fix place_test on MKLDNNPlace --- paddle/platform/place.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/paddle/platform/place.cc b/paddle/platform/place.cc index 16f1774285..25fe8d21b4 100644 --- a/paddle/platform/place.cc +++ b/paddle/platform/place.cc @@ -45,7 +45,7 @@ bool is_gpu_place(const Place &p) { return boost::apply_visitor(IsGPUPlace(), p); } bool is_cpu_place(const Place &p) { - return !boost::apply_visitor(IsGPUPlace(), p); + return !is_gpu_place(p) && !is_mkldnn_place(p); } bool is_mkldnn_place(const Place &p) { From a243edf44bbfad597cc16de1e8c21943c909898a Mon Sep 17 00:00:00 2001 From: Xi Chen Date: Thu, 14 Dec 2017 14:31:49 -0800 Subject: [PATCH 106/193] add cross compiling doc in en --- doc/mobile/cross_compiling_for_ios_en.md | 120 +++++++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 doc/mobile/cross_compiling_for_ios_en.md diff --git a/doc/mobile/cross_compiling_for_ios_en.md b/doc/mobile/cross_compiling_for_ios_en.md new file mode 100644 index 0000000000..5428f501e8 --- /dev/null +++ b/doc/mobile/cross_compiling_for_ios_en.md @@ -0,0 +1,120 @@ +# iOS Compiling Guide + +This tutorial will walk you through cross compiling the PaddlePaddle library for iOS from the source in MacOS. + +## Preparation + +Apple provides Xcode for cross-compiling and IDE for iOS development. Download from App store or [here](https://developer.apple.com/cn/xcode/). To verify your installation, run command as follows + +```bash +$ xcodebuild -version +Xcode 9.0 +Build version 9A235 +``` + +## Cross-compiling configurations + +PaddlePaddle provides cross-compiling toolchain configuration documentation [cmake/cross_compiling/ios.cmake](https://github.com/PaddlePaddle/Paddle/blob/develop/cmake/cross_compiling/ios.cmake), which has some default settings for frequently used compilers. + +There are some mandatory environment variables need to be set before cross compiling PaddlePaddle for iOS: + +- `CMAKE_SYSTEM_NAME`, CMake compiling target platform name, has to be `iOS`. PaddlePaddle CMake will compile all the third party dependencies and enforce some parameters (`WITH_C_API=ON`、`WITH_GPU=OFF`、`WITH_AVX=OFF`、`WITH_PYTHON=OFF`、`WITH_RDMA=OFF`) when this variable is set with value `iOS`. + +- `WITH_C_API`, Whether to compile inference C-API library, has to be `ON`, since C-API is the only supported interface for inferencing in iOS. +- `WITH_SWIG_PY`, has to be `ON`. It's not supported to inference or train via swig in iOS. + +Optional environment variables for iOS are: + +- `IOS_PLATFORM`, either `OS` (default) or `SIMULATOR`. + - `OS`, build targets ARM-based physical devices like iPhone or iPad. + - `SIMULATOR`, build targets x86 architecture simulators. +- `IOS_ARCH`, target architecture. By default, all architecture types will be compiled. If you need to specify the architecture to compile for, please find valid values for different `IOS_PLATFORM` settings from the table below: + + + + + + + + + + + + + + + + + + + + + + +
IOS_PLATFORMIOS_ARCH
OSarmv7, armv7s, arm64
SIMULATORi386, x86_64
+ +- `IOS_DEPLOYMENT_TARGET`, minimum iOS version to deployment, `7.0` by default. +- `IOS_ENABLE_BITCODE`, whether to enable [Bitcode](https://developer.apple.com/library/content/documentation/IDEs/Conceptual/AppDistributionGuide/AppThinning/AppThinning.html#//apple_ref/doc/uid/TP40012582-CH35-SW3), values can be `ON/OFF`, `ON` by default. +- `IOS_USE_VECLIB_FOR_BLAS`, whether to use [vecLib](https://developer.apple.com/documentation/accelerate/veclib) framework for BLAS computing. values can be `ON/OFF`, `OFF` by default. +- `IOS_DEVELOPMENT_ROOT`, the path to `Developer` directory, can be explicitly set with your `/path/to/platform/Developer`. If left blank, PaddlePaddle will automatically pick the Xcode corresponding `platform`'s `Developer` directory based on your `IOS_PLATFORM` value. +- `IOS_SDK_ROOT`, the path to `SDK` root, can be explicitly set with your `/path/to/platform/Developer/SDKs/SDK`. if left black, PaddlePaddle will pick the latest SDK in the directory of `IOS_DEVELOPMENT_ROOT`. + +other settings: + +- `USE_EIGEN_FOR_BLAS`, whether to use Eigen for matrix computing. effective when `IOS_USE_VECLIB_FOR_BLAS=OFF`. Values can be `ON/OFF`, `OFF` by default. +- `HOST_C/CXX_COMPILER`, host C/C++ compiler. Uses value from environment variable `CC/CXX` by default or `cc/c++` if `CC/CXX` doesn't exist. + +some typical cmake configurations: + +```bash +cmake -DCMAKE_SYSTEM_NAME=iOS \ + -DIOS_PLATFORM=OS \ + -DIOS_ARCH="armv7;arm64" \ + -DIOS_ENABLE_BITCODE=ON \ + -DIOS_USE_VECLIB_FOR_BLAS=ON \ + -DCMAKE_INSTALL_PREFIX=your/path/to/install \ + -DWITH_C_API=ON \ + -DWITH_TESTING=OFF \ + -DWITH_SWIG_PY=OFF \ + .. +``` + +```bash +cmake -DCMAKE_SYSTEM_NAME=iOS \ + -DIOS_PLATFORM=SIMULATOR \ + -DIOS_ARCH="x86_64" \ + -DIOS_USE_VECLIB_FOR_BLAS=ON \ + -DCMAKE_INSTALL_PREFIX=your/path/to/install \ + -DWITH_C_API=ON \ + -DWITH_TESTING=OFF \ + -DWITH_SWIG_PY=OFF \ + .. +``` + +You can set other compiling parameters for your own need. I.E. if you are trying to minimize the library size, set `CMAKE_BUILD_TYPE` with `MinSizeRel`; or if the performance is your concern, set `CMAKE_BUILD_TYPE` with `Release`. You can even manipulate the PaddlePaddle compiling procedure by manually set `CMAKE_C/CXX_FLAGS` values. + +**TIPS for a better performance**: + +- set `CMAKE_BUILD_TYPE` with `Release` +- set `IOS_USE_VECLIB_FOR_BLAS` with `ON` + +## Compile and install + +After CMake, run following commands, PaddlePaddle will download the compile 3rd party dependencies, compile and install PaddlePaddle inference library. + +``` +$ make +$ make install +``` + +Please Note: if you compiled PaddlePaddle in the source directory for other platforms, do remove `third_party` and `build` directory within the source with `rm -rf` to ensure that all the 3rd party libraries dependencies and PaddlePaddle is newly compiled with current CMake configuration. + +`your/path/to/install` directory will have following directories after `compile` and `install`: + +- `include`, contains all the C-API header files. +- `lib`, contains PaddlePaddle C-API static library. +- `third_party` contains all the 3rd party libraries. + +Please note: if PaddlePaddle library need to support both physical devices and simulators, you will need to compile correspondingly, then merge fat library with `lipo` + +Now you will have PaddlePaddle library compiled and installed, the fat library can be used in deep learning related iOS APPs. Please refer to C-API documentation for usage guides. From d2b6d2ef8a42feed15ac5ce4cd43877436f8abe1 Mon Sep 17 00:00:00 2001 From: Xi Chen Date: Thu, 14 Dec 2017 14:35:44 -0800 Subject: [PATCH 107/193] minor tweaks. --- doc/mobile/cross_compiling_for_ios_en.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/mobile/cross_compiling_for_ios_en.md b/doc/mobile/cross_compiling_for_ios_en.md index 5428f501e8..e2a1f6fc5f 100644 --- a/doc/mobile/cross_compiling_for_ios_en.md +++ b/doc/mobile/cross_compiling_for_ios_en.md @@ -1,4 +1,4 @@ -# iOS Compiling Guide +# PaddlePaddle Compiling Guide for iOS This tutorial will walk you through cross compiling the PaddlePaddle library for iOS from the source in MacOS. From f5dc9eadaafc74e606aef849145693ece2e743e9 Mon Sep 17 00:00:00 2001 From: zhushuang02 Date: Fri, 15 Dec 2017 10:22:59 +0800 Subject: [PATCH 108/193] Add refer code to get started --- doc/getstarted/concepts/src/infer.py | 14 ++++++++++++++ doc/getstarted/concepts/src/train.py | 5 +++++ doc/getstarted/concepts/use_concepts_cn.rst | 5 +++++ 3 files changed, 24 insertions(+) create mode 100644 doc/getstarted/concepts/src/infer.py diff --git a/doc/getstarted/concepts/src/infer.py b/doc/getstarted/concepts/src/infer.py new file mode 100644 index 0000000000..780d831da8 --- /dev/null +++ b/doc/getstarted/concepts/src/infer.py @@ -0,0 +1,14 @@ +import paddle.v2 as paddle +import numpy as np + +paddle.init(use_gpu=False) +x = paddle.layer.data(name='x', type=paddle.data_type.dense_vector(2)) +y_predict = paddle.layer.fc(input=x, size=1, act=paddle.activation.Linear()) + +# loading the model which generated by training +with open('hello_params_pass_90.tar', 'r') as f: + parameters = paddle.parameters.Parameters.from_tar(f) + +i = [[[1, 2]]] + +print paddle.infer(output_layer=y_predict, parameters=parameters, input=i) diff --git a/doc/getstarted/concepts/src/train.py b/doc/getstarted/concepts/src/train.py index 8aceb23406..4bccbfca3c 100644 --- a/doc/getstarted/concepts/src/train.py +++ b/doc/getstarted/concepts/src/train.py @@ -26,6 +26,11 @@ def event_handler(event): if event.batch_id % 1 == 0: print "Pass %d, Batch %d, Cost %f" % (event.pass_id, event.batch_id, event.cost) + # product model every 10 pass + if isinstance(event, paddle.event.EndPass): + if event.pass_id % 10 == 0: + with open('params_pass_%d.tar' % event.pass_id, 'w') as f: + trainer.save_parameter_to_tar(f) # define training dataset reader diff --git a/doc/getstarted/concepts/use_concepts_cn.rst b/doc/getstarted/concepts/use_concepts_cn.rst index c243083794..7ff0b29ac3 100644 --- a/doc/getstarted/concepts/use_concepts_cn.rst +++ b/doc/getstarted/concepts/use_concepts_cn.rst @@ -147,4 +147,9 @@ PaddlePaddle支持不同类型的输入数据,主要包括四种类型,和 .. literalinclude:: src/train.py :linenos: +使用以上训练好的模型进行预测的例子: + +.. literalinclude:: src/infer.py + :linenos: + 有关线性回归的实际应用,可以参考PaddlePaddle book的 `第一章节 `_。 From 7fe3c5789d4d65cd082550d2144108aabdfbda4b Mon Sep 17 00:00:00 2001 From: Liu Yiqun Date: Fri, 15 Dec 2017 02:40:27 +0000 Subject: [PATCH 109/193] Fix typo in cross-compiling documentation of iOS and add it to the index. --- doc/mobile/cross_compiling_for_ios_cn.md | 4 ++-- doc/mobile/cross_compiling_for_ios_en.md | 8 ++++---- doc/mobile/index_en.rst | 1 + 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/doc/mobile/cross_compiling_for_ios_cn.md b/doc/mobile/cross_compiling_for_ios_cn.md index 9da48e7f21..d5196d9a4c 100644 --- a/doc/mobile/cross_compiling_for_ios_cn.md +++ b/doc/mobile/cross_compiling_for_ios_cn.md @@ -18,11 +18,11 @@ PaddlePaddle为交叉编译提供了工具链配置文档[cmake/cross_compiling/ - `CMAKE_SYSTEM_NAME`,CMake编译的目标平台,必须设置为`iOS`。在设置`CMAKE_SYSTEM_NAME=iOS`后,PaddlePaddle的CMake系统会自动编译所有的第三方依赖库,并且强制设置一些PaddlePaddle参数的值(`WITH_C_API=ON`、`WITH_GPU=OFF`、`WITH_AVX=OFF`、`WITH_PYTHON=OFF`、`WITH_RDMA=OFF`)。 - `WITH_C_API`,是否编译C-API预测库,必须设置为ON。在iOS平台上只支持使用C-API来预测。 -- `WITH_SWIG_PY`,必须设置为ON。在iOS平台上不支持通过swig调用来训练或者预测。 +- `WITH_SWIG_PY`,必须设置为`OFF`。在iOS平台上不支持通过swig调用来训练或者预测。 iOS平台可选配置参数: -- `IOS_PLATFORM`,可设置为`OS/SIMULATOR`,默认值为`OS`。 +- `IOS_PLATFORM`,可设置为`OS`(默认值)或`SIMULATOR`。 - `OS`,构建目标为`arm`架构的iPhone或者iPad等物理设备。 - `SIMULATOR`,构建目标为`x86`架构的模拟器平台。 - `IOS_ARCH`,目标架构。针对不同的`IOS_PLATFORM`,可设置的目标架构如下表所示,默认编译所有架构: diff --git a/doc/mobile/cross_compiling_for_ios_en.md b/doc/mobile/cross_compiling_for_ios_en.md index e2a1f6fc5f..aa390cd61f 100644 --- a/doc/mobile/cross_compiling_for_ios_en.md +++ b/doc/mobile/cross_compiling_for_ios_en.md @@ -18,12 +18,12 @@ PaddlePaddle provides cross-compiling toolchain configuration documentation [cma There are some mandatory environment variables need to be set before cross compiling PaddlePaddle for iOS: -- `CMAKE_SYSTEM_NAME`, CMake compiling target platform name, has to be `iOS`. PaddlePaddle CMake will compile all the third party dependencies and enforce some parameters (`WITH_C_API=ON`、`WITH_GPU=OFF`、`WITH_AVX=OFF`、`WITH_PYTHON=OFF`、`WITH_RDMA=OFF`) when this variable is set with value `iOS`. +- `CMAKE_SYSTEM_NAME`, CMake compiling target platform name, has to be `iOS`. PaddlePaddle CMake will compile all the third party dependencies and enforce some parameters (`WITH_C_API=ON`, `WITH_GPU=OFF`, `WITH_AVX=OFF`, `WITH_PYTHON=OFF`,`WITH_RDMA=OFF`) when this variable is set with value `iOS`. - `WITH_C_API`, Whether to compile inference C-API library, has to be `ON`, since C-API is the only supported interface for inferencing in iOS. -- `WITH_SWIG_PY`, has to be `ON`. It's not supported to inference or train via swig in iOS. +- `WITH_SWIG_PY`, has to be `OFF`. It's not supported to inference or train via swig in iOS. -Optional environment variables for iOS are: +Optional environment variables for iOS are: - `IOS_PLATFORM`, either `OS` (default) or `SIMULATOR`. - `OS`, build targets ARM-based physical devices like iPhone or iPad. @@ -115,6 +115,6 @@ Please Note: if you compiled PaddlePaddle in the source directory for other plat - `lib`, contains PaddlePaddle C-API static library. - `third_party` contains all the 3rd party libraries. -Please note: if PaddlePaddle library need to support both physical devices and simulators, you will need to compile correspondingly, then merge fat library with `lipo` +Please note: if PaddlePaddle library need to support both physical devices and simulators, you will need to compile correspondingly, then merge fat library with `lipo`. Now you will have PaddlePaddle library compiled and installed, the fat library can be used in deep learning related iOS APPs. Please refer to C-API documentation for usage guides. diff --git a/doc/mobile/index_en.rst b/doc/mobile/index_en.rst index 3c08d73671..ef421dacad 100644 --- a/doc/mobile/index_en.rst +++ b/doc/mobile/index_en.rst @@ -5,4 +5,5 @@ MOBILE :maxdepth: 1 cross_compiling_for_android_en.md + cross_compiling_for_ios_en.md cross_compiling_for_raspberry_en.md From d7b67f2b7460bd68d4db41c63dbc3c92d4b95497 Mon Sep 17 00:00:00 2001 From: Yancey Date: Fri, 15 Dec 2017 13:16:44 +0800 Subject: [PATCH 110/193] fix pipe_reader on multi passes (#6627) fix pipe reader on multi passes --- python/paddle/v2/reader/decorator.py | 4 +-- .../paddle/v2/reader/tests/decorator_test.py | 30 +++++++++++++++++++ 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/python/paddle/v2/reader/decorator.py b/python/paddle/v2/reader/decorator.py index 7e457f987d..27c82c95f7 100644 --- a/python/paddle/v2/reader/decorator.py +++ b/python/paddle/v2/reader/decorator.py @@ -390,8 +390,6 @@ def pipe_reader(left_cmd, if not callable(parser): raise TypeError("parser must be a callable object") - process = subprocess.Popen( - left_cmd.split(" "), bufsize=bufsize, stdout=subprocess.PIPE) # TODO(typhoonzero): add a thread to read stderr # Always init a decompress object is better than @@ -400,6 +398,8 @@ def pipe_reader(left_cmd, 32 + zlib.MAX_WBITS) # offset 32 to skip the header def reader(): + process = subprocess.Popen( + left_cmd.split(" "), bufsize=bufsize, stdout=subprocess.PIPE) remained = "" while True: buff = process.stdout.read(bufsize) diff --git a/python/paddle/v2/reader/tests/decorator_test.py b/python/paddle/v2/reader/tests/decorator_test.py index 5a92951b10..06e14796da 100644 --- a/python/paddle/v2/reader/tests/decorator_test.py +++ b/python/paddle/v2/reader/tests/decorator_test.py @@ -145,5 +145,35 @@ class TestXmap(unittest.TestCase): self.assertEqual(e, mapper(idx)) +class TestPipeReader(unittest.TestCase): + def test_pipe_reader(self): + def simple_parser(lines): + return lines + + import tempfile + + records = [str(i) for i in xrange(5)] + temp = tempfile.NamedTemporaryFile() + try: + with open(temp.name, 'w') as f: + for r in records: + f.write('%s\n' % r) + + cmd = "cat %s" % temp.name + reader = paddle.v2.reader.pipe_reader( + cmd, simple_parser, bufsize=128) + for i in xrange(4): + result = [] + for r in reader(): + result.append(r) + + for idx, e in enumerate(records): + print e, result[idx] + self.assertEqual(e, result[idx]) + finally: + # delete the temporary file + temp.close() + + if __name__ == '__main__': unittest.main() From 537a0d4c0e22dae88b7c917928bda2f976cb6700 Mon Sep 17 00:00:00 2001 From: Coke Date: Fri, 15 Dec 2017 13:47:11 +0800 Subject: [PATCH 111/193] Update infer.py --- doc/getstarted/concepts/src/infer.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/doc/getstarted/concepts/src/infer.py b/doc/getstarted/concepts/src/infer.py index 780d831da8..4cc58dfee0 100644 --- a/doc/getstarted/concepts/src/infer.py +++ b/doc/getstarted/concepts/src/infer.py @@ -6,9 +6,13 @@ x = paddle.layer.data(name='x', type=paddle.data_type.dense_vector(2)) y_predict = paddle.layer.fc(input=x, size=1, act=paddle.activation.Linear()) # loading the model which generated by training -with open('hello_params_pass_90.tar', 'r') as f: +with open('params_pass_90.tar', 'r') as f: parameters = paddle.parameters.Parameters.from_tar(f) -i = [[[1, 2]]] - +# Input multiple sets of data,Output the infer result in a array. +i = [[[1, 2]], [[3, 4]], [[5, 6]]] print paddle.infer(output_layer=y_predict, parameters=parameters, input=i) +# Will print: +# [[ -3.24491572] +# [ -6.94668722] +# [-10.64845848]] From d62552dc99583396ddd639fee58242ff9aae368f Mon Sep 17 00:00:00 2001 From: Coke Date: Fri, 15 Dec 2017 13:52:12 +0800 Subject: [PATCH 112/193] Update use_concepts_cn.rst --- doc/getstarted/concepts/use_concepts_cn.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/getstarted/concepts/use_concepts_cn.rst b/doc/getstarted/concepts/use_concepts_cn.rst index 7ff0b29ac3..e695ff283e 100644 --- a/doc/getstarted/concepts/use_concepts_cn.rst +++ b/doc/getstarted/concepts/use_concepts_cn.rst @@ -147,7 +147,7 @@ PaddlePaddle支持不同类型的输入数据,主要包括四种类型,和 .. literalinclude:: src/train.py :linenos: -使用以上训练好的模型进行预测的例子: +使用以上训练好的模型进行预测,取其中一个模型params_pass_90.tar,输入需要预测的向量组,然后打印输出: .. literalinclude:: src/infer.py :linenos: From d5cab4f07c3e63970642cd428a9a33b284ddf4f1 Mon Sep 17 00:00:00 2001 From: Yu Yang Date: Fri, 15 Dec 2017 14:22:30 +0800 Subject: [PATCH 113/193] Fix compile on CUDA9.1 & MacOS (#6642) --- paddle/math/float16.h | 4 ++-- paddle/platform/dynload/nccl.cc | 5 +++++ paddle/platform/dynload/nccl.h | 24 ++++++++++++------------ paddle/platform/nccl_test.cu | 4 ++-- paddle/platform/variant.h | 13 +++++++++++++ python/.gitignore | 1 + 6 files changed, 35 insertions(+), 16 deletions(-) diff --git a/paddle/math/float16.h b/paddle/math/float16.h index 76ad3a0123..efebbce504 100644 --- a/paddle/math/float16.h +++ b/paddle/math/float16.h @@ -79,7 +79,7 @@ public: #ifdef PADDLE_CUDA_FP16 HOSTDEVICE inline explicit float16(const half& h) { #if CUDA_VERSION >= 9000 - x = reinterpret_cast<__half_raw*>(&h)->x; + x = reinterpret_cast<__half_raw*>(const_cast(&h))->x; #else x = h.x; #endif // CUDA_VERSION >= 9000 @@ -145,7 +145,7 @@ public: #ifdef PADDLE_CUDA_FP16 HOSTDEVICE inline float16& operator=(const half& rhs) { #if CUDA_VERSION >= 9000 - x = reinterpret_cast<__half_raw*>(&rhs)->x; + x = reinterpret_cast<__half_raw*>(const_cast(&rhs))->x; #else x = rhs.x; #endif diff --git a/paddle/platform/dynload/nccl.cc b/paddle/platform/dynload/nccl.cc index 8f92b8d94d..91168f37ef 100644 --- a/paddle/platform/dynload/nccl.cc +++ b/paddle/platform/dynload/nccl.cc @@ -25,6 +25,11 @@ void *nccl_dso_handle; NCCL_RAND_ROUTINE_EACH(DEFINE_WRAP); +void LoadNCCLDSO() { + platform::call_once(nccl_dso_flag, + [] { GetNCCLDsoHandle(&nccl_dso_handle); }); +} + } // namespace dynload } // namespace platform } // namespace paddle diff --git a/paddle/platform/dynload/nccl.h b/paddle/platform/dynload/nccl.h index 981b2ab258..11007c1031 100644 --- a/paddle/platform/dynload/nccl.h +++ b/paddle/platform/dynload/nccl.h @@ -28,18 +28,18 @@ extern std::once_flag nccl_dso_flag; extern void* nccl_dso_handle; #ifdef PADDLE_USE_DSO -#define DECLARE_DYNAMIC_LOAD_NCCL_WRAP(__name) \ - struct DynLoad__##__name { \ - template \ - auto operator()(Args... args) -> decltype(__name(args...)) { \ - using nccl_func = decltype(__name(args...)) (*)(Args...); \ - platform::call_once(nccl_dso_flag, \ - paddle::platform::dynload::GetNCCLDsoHandle, \ - &nccl_dso_handle); \ - void* p_##__name = dlsym(nccl_dso_handle, #__name); \ - return reinterpret_cast(p_##__name)(args...); \ - } \ - }; \ +extern void LoadNCCLDSO(); + +#define DECLARE_DYNAMIC_LOAD_NCCL_WRAP(__name) \ + struct DynLoad__##__name { \ + template \ + auto operator()(Args... args) -> decltype(__name(args...)) { \ + using nccl_func = decltype(__name(args...)) (*)(Args...); \ + paddle::platform::dynload::LoadNCCLDSO(); \ + void* p_##__name = dlsym(nccl_dso_handle, #__name); \ + return reinterpret_cast(p_##__name)(args...); \ + } \ + }; \ extern DynLoad__##__name __name #else #define DECLARE_DYNAMIC_LOAD_NCCL_WRAP(__name) \ diff --git a/paddle/platform/nccl_test.cu b/paddle/platform/nccl_test.cu index c99dae68be..94ab360a19 100644 --- a/paddle/platform/nccl_test.cu +++ b/paddle/platform/nccl_test.cu @@ -31,7 +31,7 @@ namespace platform { TEST(NCCL, init) { std::vector comms; comms.resize(dev_count); - PADDLE_ENFORCE(dynload::ncclCommInitAll(comms.data(), dev_count, nullptr)); + dynload::ncclCommInitAll(comms.data(), dev_count, nullptr); for (int i = 0; i < dev_count; ++i) { dynload::ncclCommDestroy(comms[i]); } @@ -62,7 +62,7 @@ TEST(NCCL, all_reduce) { std::vector comms; comms.resize(dev_count); VLOG(1) << "Initializing ncclComm"; - PADDLE_ENFORCE(dynload::ncclCommInitAll(comms.data(), dev_count, nullptr)); + dynload::ncclCommInitAll(comms.data(), dev_count, nullptr); VLOG(1) << "ncclComm initialized"; VLOG(1) << "Creating thread data"; std::vector>> data; diff --git a/paddle/platform/variant.h b/paddle/platform/variant.h index 619897ca19..284b4c42ac 100644 --- a/paddle/platform/variant.h +++ b/paddle/platform/variant.h @@ -14,6 +14,19 @@ #pragma once +#ifdef __CUDACC__ +#ifdef __CUDACC_VER_MAJOR__ +// CUDA 9 define `__CUDACC_VER__` as a warning message, manually define +// __CUDACC_VER__ instead. +#undef __CUDACC_VER__ + +#define __CUDACC_VER__ \ + (__CUDACC_VER_MAJOR__ * 10000 + __CUDACC_VER_MINOR__ * 100 + \ + __CUDACC_VER_BUILD__) +#endif + +#endif + #include #ifdef PADDLE_WITH_CUDA diff --git a/python/.gitignore b/python/.gitignore index cc7d0ece4a..1ba1d4c9b0 100644 --- a/python/.gitignore +++ b/python/.gitignore @@ -2,6 +2,7 @@ build dist paddle.egg-info +paddlepaddle_gpu.egg-info .idea paddle/proto/*.py paddle/proto/*.pyc From d37ed6cb13fc63aa2c81ece8de005bfbea4916be Mon Sep 17 00:00:00 2001 From: Yibing Liu Date: Fri, 15 Dec 2017 07:41:54 +0000 Subject: [PATCH 114/193] polish code in reshape_op --- paddle/operators/reshape_op.cc | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/paddle/operators/reshape_op.cc b/paddle/operators/reshape_op.cc index 5baf459536..d82d828747 100644 --- a/paddle/operators/reshape_op.cc +++ b/paddle/operators/reshape_op.cc @@ -36,10 +36,13 @@ class ReshapeOp : public framework::OperatorWithKernel { auto x_dims = ctx->GetInputDim("X"); std::vector neg_dims_idx; + // set some dimension to -1 if it is unknown + const int unknown_size = -1; for (size_t i = 0; i < shape.size(); ++i) { - PADDLE_ENFORCE(shape[i] > 0 || shape[i] == -1, - "Each dimension of Attr(shape) must be positive or -1."); - if (shape[i] == -1) { + PADDLE_ENFORCE(shape[i] > 0 || shape[i] == unknown_size, + "Each dimension of Attr(shape) must be positive or %d.", + unknown_size); + if (shape[i] == unknown_size) { neg_dims_idx.push_back(i); PADDLE_ENFORCE(neg_dims_idx.size() <= 1, "Only one dimension of Attr(shape) can be unknown."); @@ -53,8 +56,7 @@ class ReshapeOp : public framework::OperatorWithKernel { // dim infer shape[neg_dims_idx[0]] = in_size / (-capacity); // recalculate capacity - capacity = std::accumulate(shape.begin(), shape.end(), 1, - std::multiplies()); + capacity = shape[neg_dims_idx[0]] * (-capacity); } // capacity check PADDLE_ENFORCE(capacity == in_size, @@ -98,9 +100,9 @@ the tensor X into a 2-D tensor: [[1, 2, 3, 4]] -One dimension in the target shape can be set -1, and the real dimension -will be infered from the original shape of Input(X) and other -dimensions in the target shape. +One dimension in the target shape can be set -1, representing that its +size is unknown. In this case, the real dimension will be infered from +the original shape of Input(X) and other dimensions in the target shape. )DOC"); } }; From acaef9a1302a7907f9d42dffb7a75616b483b658 Mon Sep 17 00:00:00 2001 From: tensor-tang Date: Thu, 14 Dec 2017 20:58:10 +0800 Subject: [PATCH 115/193] rename mkldnn doc --- doc/design/{mkldnn => mkl}/image/engine.png | Bin doc/design/{mkldnn => mkl}/image/gradients.png | Bin doc/design/{mkldnn => mkl}/image/layers.png | Bin doc/design/{mkldnn => mkl}/image/matrix.png | Bin doc/design/{mkldnn => mkl}/image/overview.png | Bin doc/design/{mkldnn/README.MD => mkl/mkldnn.md} | 1 - 6 files changed, 1 deletion(-) rename doc/design/{mkldnn => mkl}/image/engine.png (100%) rename doc/design/{mkldnn => mkl}/image/gradients.png (100%) rename doc/design/{mkldnn => mkl}/image/layers.png (100%) rename doc/design/{mkldnn => mkl}/image/matrix.png (100%) rename doc/design/{mkldnn => mkl}/image/overview.png (100%) rename doc/design/{mkldnn/README.MD => mkl/mkldnn.md} (99%) diff --git a/doc/design/mkldnn/image/engine.png b/doc/design/mkl/image/engine.png similarity index 100% rename from doc/design/mkldnn/image/engine.png rename to doc/design/mkl/image/engine.png diff --git a/doc/design/mkldnn/image/gradients.png b/doc/design/mkl/image/gradients.png similarity index 100% rename from doc/design/mkldnn/image/gradients.png rename to doc/design/mkl/image/gradients.png diff --git a/doc/design/mkldnn/image/layers.png b/doc/design/mkl/image/layers.png similarity index 100% rename from doc/design/mkldnn/image/layers.png rename to doc/design/mkl/image/layers.png diff --git a/doc/design/mkldnn/image/matrix.png b/doc/design/mkl/image/matrix.png similarity index 100% rename from doc/design/mkldnn/image/matrix.png rename to doc/design/mkl/image/matrix.png diff --git a/doc/design/mkldnn/image/overview.png b/doc/design/mkl/image/overview.png similarity index 100% rename from doc/design/mkldnn/image/overview.png rename to doc/design/mkl/image/overview.png diff --git a/doc/design/mkldnn/README.MD b/doc/design/mkl/mkldnn.md similarity index 99% rename from doc/design/mkldnn/README.MD rename to doc/design/mkl/mkldnn.md index 61d453de24..e2fe1e6b26 100644 --- a/doc/design/mkldnn/README.MD +++ b/doc/design/mkl/mkldnn.md @@ -208,4 +208,3 @@ if use_mkldnn 但是在PaddlePaddle中,无论是重构前的layer还是重构后的op,都不会想要知道next layer/op的信息。 4. MKL-DNN的高性能格式与PaddlePaddle原有的`NCHW`不同(PaddlePaddle中的cuDNN部分使用的也是`NCHW`,所以不存在这个问题)。 所以需要引入一个转换方法,并且只需要在必要的时候转换这种格式,才能更好的发挥MKL-DNN的性能。 - From 1670ec081bd35c36e63298de2b31f0b88007888b Mon Sep 17 00:00:00 2001 From: tensor-tang Date: Thu, 14 Dec 2017 21:03:13 +0800 Subject: [PATCH 116/193] add mkl packed desgin doc --- doc/design/mkl/mkl_packed.md | 91 ++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 doc/design/mkl/mkl_packed.md diff --git a/doc/design/mkl/mkl_packed.md b/doc/design/mkl/mkl_packed.md new file mode 100644 index 0000000000..a9fb56d709 --- /dev/null +++ b/doc/design/mkl/mkl_packed.md @@ -0,0 +1,91 @@ +# Intel® MKL Packed Optimization on PaddlePaddle: Design Doc + + +## Contents + +- [Overview](#overview) +- [Key Points](#key-points) + - [Background](#background) + - [Solution](#solution) +- [Actions](#actions) + - [CMake](#cmake) + - [Layers](#layers) + - [Unit Tests](#unit-tests) + - [Python API](#python-api) + - [Benchmarking](#benchmarking) + + +## Overview +我们计划将 Intel® MKL 中引入的 GEMM Packed APIs\[[1](#references)\] 集成到 PaddlePaddle 中,充分发挥英特尔平台的优势,有效提升PaddlePaddle在英特尔架构上的性能。 +现阶段的优化主要针对 Recurrent Neural Network(以下简称RNN)相关层(包括`RecurrentLayer`, `GatedRecurrentLayer`和`LstmLayer`), 以及 PaddlePaddle V1 API。 + +## Key Points + +### Background +为了达到最佳性能, Intel® MKL 中的 cblas_?gemm 会在计算前将原数据转换为更适合英特尔平台的Packed格式, 这一数据格式的转换操作 (Packing),在问题本身的计算量比较小的时候显得相对来说较为耗时。 +在现有的某些情况下(例如RNN),多次调用 cblas_?gemm 时会使用相同的原数据,每次调用时对原数据的重复Packing便成为了冗余。 + +为了最大程度减少多次调用 cblas_?gemm 在Packing上的耗时,Intel® MKL 引入了以下四个API: + * cblas_?gemm_alloc + * cblas_?gemm_pack + * cblas_?gemm_compute + * cblas_?gemm_free + +通过使用这些API,我们可以先完成对原数据的Packing操作,再把已转换为Packed格式的数据传递给那些复用同一数据的gemm_compute函数,从而避免了Packing冗余。 + +### Solution +在RNN的case下,同一次 forward/backward 过程中所有time state共享同一个weight矩阵。当只做 inference 时,各次 forward 之间也都使用相同的weight矩阵,没有必要在每次forward中每个time state的计算时对weight进行重复的packing操作。 + +我们通过使用新引入的GEMM Packed APIs,在layer init时先完成对weight的packing操作,然后在 forward/backward 时复用已pack过后的weight,并在每次weight更新后重新Packing。 + +* 优化前,对于sequence length = `T` 的model, `N` 次iteration执行的Packing次数为: + - `inference`: `N * T` + - `training`: `2 * N * T` +* 优化后,对于sequence length = `T` 的model, `N` 次iteration执行的Packing次数减少至: + - `inference`: `1` + - `training`: `2 * N` + +## Actions + +添加的相关文件和目录结构如下: + +```txt +PaddlePaddle/Paddle +├── ... +└── paddle/ + ├── ... + └── gserver/ + ├── ... + ├── layers/ + │ ├── ... + │ ├── MKLPackedRecurrentLayer.* + | ├── MKLPackedGatedRecurrentLayer.* + | ├── MKLPackedLstmLayer.* + | └── MKLPackedGemm.h + └── tests/ + ├── ... + └── test_MKLPacked.cpp +``` + +### CMake +在对应的`CMakeLists.txt`中根据`WITH_MKL`是否打开,来决定是否开启MKL Packed相关功能。 + +### Layers +所有的`MKLPacked*Layer`都继承于PaddlePaddle的基类`Layer`, 并添加头文件 `MKLPackedGemm.h`,该文件中实现的对相关GEMM Packed APIs做了封装。 + +### Unit Tests +我们会添加`test_MKLPacked.cpp`用于MKL Packed优化后layer的测试。 +对于每一个新加的RNN layer,我们会对比如下2个方面: +1. 对比优化后layer自身,sequence mode(`rnn_use_batch=false`)与batch mode(`rnn_use_batch=true`)的结果。 +2. 对比优化后layer与相对应的PaddlePaddle原有layer, 在batch mode下的结果。 + +### Python API +TBD + +### Benchmarking +会添加相应的脚本用于测试和对比在使用MKL Packed recurrent layers 前后的网络性能。 + +## References +1. [Introducing the new Packed APIs for GEMM](https://software.intel.com/en-us/articles/introducing-the-new-packed-apis-for-gemm) + + From 3f2fa0a1f65f6ca7d6881a4bac93d190b2032b78 Mon Sep 17 00:00:00 2001 From: tensor-tang Date: Sat, 16 Dec 2017 13:50:37 +0800 Subject: [PATCH 117/193] follow comments and refine doc --- doc/design/mkl/mkl_packed.md | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/doc/design/mkl/mkl_packed.md b/doc/design/mkl/mkl_packed.md index a9fb56d709..55d13d777c 100644 --- a/doc/design/mkl/mkl_packed.md +++ b/doc/design/mkl/mkl_packed.md @@ -1,4 +1,4 @@ -# Intel® MKL Packed Optimization on PaddlePaddle: Design Doc +# Intel® MKL Packed on PaddlePaddle: Design Doc ## Contents @@ -17,13 +17,17 @@ ## Overview 我们计划将 Intel® MKL 中引入的 GEMM Packed APIs\[[1](#references)\] 集成到 PaddlePaddle 中,充分发挥英特尔平台的优势,有效提升PaddlePaddle在英特尔架构上的性能。 -现阶段的优化主要针对 Recurrent Neural Network(以下简称RNN)相关层(包括`RecurrentLayer`, `GatedRecurrentLayer`和`LstmLayer`), 以及 PaddlePaddle V1 API。 +现阶段的优化主要针对 Recurrent Neural Network(以下简称RNN)相关层(包括`RecurrentLayer`, `GatedRecurrentLayer`和`LstmLayer`), 以及 PaddlePaddle V1 API。 ## Key Points ### Background -为了达到最佳性能, Intel® MKL 中的 cblas_?gemm 会在计算前将原数据转换为更适合英特尔平台的Packed格式, 这一数据格式的转换操作 (Packing),在问题本身的计算量比较小的时候显得相对来说较为耗时。 -在现有的某些情况下(例如RNN),多次调用 cblas_?gemm 时会使用相同的原数据,每次调用时对原数据的重复Packing便成为了冗余。 +目前PaddlePaddle采用了 Intel® MKL库的cblas_?gemm函数,这个函数本身会在计算前将原数据转换为更适合英特尔平台的内部格式。 + +1. 转换耗时 \ +这一数据格式的转换操作(Packing),在问题本身的计算量比较小的时候,显得相对来说较为耗时。例如在DeepSpeech2 \[[2](#references)\] 的Vanilla RNN部分中,矩阵大小是`batch_size * 2048`。 +2. 转换冗余 \ +由于在现有的某些情况下(例如RNN),多次调用 cblas_?gemm 会使用相同的原数据,因此,每次调用时对原数据的重复Packing便成为了冗余。 为了最大程度减少多次调用 cblas_?gemm 在Packing上的耗时,Intel® MKL 引入了以下四个API: * cblas_?gemm_alloc @@ -34,16 +38,16 @@ 通过使用这些API,我们可以先完成对原数据的Packing操作,再把已转换为Packed格式的数据传递给那些复用同一数据的gemm_compute函数,从而避免了Packing冗余。 ### Solution -在RNN的case下,同一次 forward/backward 过程中所有time state共享同一个weight矩阵。当只做 inference 时,各次 forward 之间也都使用相同的weight矩阵,没有必要在每次forward中每个time state的计算时对weight进行重复的packing操作。 +在RNN的情况下,同一次**前向/后向**(forward/backward)过程中所有**时间步**(time step)共享同一个**权重**(weight)。当只做**预测**(inference)时,各次**前向**之间也都使用了相同的**权重**,没有必要在每次**前向**中每个**时间步**的计算时对**权重**进行重复的Packing操作。 -我们通过使用新引入的GEMM Packed APIs,在layer init时先完成对weight的packing操作,然后在 forward/backward 时复用已pack过后的weight,并在每次weight更新后重新Packing。 +我们通过使用新引入的GEMM Packed APIs,在层**初始化**的时时候,先完成对**权重**的Packing操作,然后在**前向/后向**时复用已经转换过的**权重**,并在每次**权重**更新后,对新的**权重**进行转换用于下次迭代。 -* 优化前,对于sequence length = `T` 的model, `N` 次iteration执行的Packing次数为: - - `inference`: `N * T` - - `training`: `2 * N * T` -* 优化后,对于sequence length = `T` 的model, `N` 次iteration执行的Packing次数减少至: - - `inference`: `1` - - `training`: `2 * N` +* 优化前,对于序列长度(sequence length)为`T`的网络模型(model), `N`次迭代执行的转换次数为: + - `inference`: `N * T` + - `training`: `2 * N * T` +* 优化后,对于同样设置的网络模型,其转换次数减少至: + - `inference`: `1` + - `training`: `2 * N` ## Actions @@ -71,7 +75,7 @@ PaddlePaddle/Paddle 在对应的`CMakeLists.txt`中根据`WITH_MKL`是否打开,来决定是否开启MKL Packed相关功能。 ### Layers -所有的`MKLPacked*Layer`都继承于PaddlePaddle的基类`Layer`, 并添加头文件 `MKLPackedGemm.h`,该文件中实现的对相关GEMM Packed APIs做了封装。 +所有的`MKLPacked*Layer`都继承于PaddlePaddle的基类`Layer`, 并添加头文件 `MKLPackedGemm.h`,该文件对相关GEMM Packed APIs做了封装。 ### Unit Tests 我们会添加`test_MKLPacked.cpp`用于MKL Packed优化后layer的测试。 @@ -87,5 +91,5 @@ TBD ## References 1. [Introducing the new Packed APIs for GEMM](https://software.intel.com/en-us/articles/introducing-the-new-packed-apis-for-gemm) - +2. [DeepSpeech2 on PaddlePaddle](https://github.com/PaddlePaddle/DeepSpeech#deepspeech2-on-paddlepaddle) From c1a6870706bf593e6f8e394d5cbcbf20f9fd1f23 Mon Sep 17 00:00:00 2001 From: tensor-tang Date: Sat, 16 Dec 2017 15:06:17 +0800 Subject: [PATCH 118/193] follow comments and refine doc --- doc/design/mkl/mkl_packed.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/design/mkl/mkl_packed.md b/doc/design/mkl/mkl_packed.md index 55d13d777c..c07f7d0cbe 100644 --- a/doc/design/mkl/mkl_packed.md +++ b/doc/design/mkl/mkl_packed.md @@ -22,7 +22,7 @@ ## Key Points ### Background -目前PaddlePaddle采用了 Intel® MKL库的cblas_?gemm函数,这个函数本身会在计算前将原数据转换为更适合英特尔平台的内部格式。 +目前PaddlePaddle采用了 Intel® MKL库的[cblas_?gemm](https://software.intel.com/en-us/mkl-developer-reference-c-cblas-gemm)函数,这个函数本身会在计算前将原数据转换为更适合英特尔平台的内部格式。 1. 转换耗时 \ 这一数据格式的转换操作(Packing),在问题本身的计算量比较小的时候,显得相对来说较为耗时。例如在DeepSpeech2 \[[2](#references)\] 的Vanilla RNN部分中,矩阵大小是`batch_size * 2048`。 @@ -38,9 +38,9 @@ 通过使用这些API,我们可以先完成对原数据的Packing操作,再把已转换为Packed格式的数据传递给那些复用同一数据的gemm_compute函数,从而避免了Packing冗余。 ### Solution -在RNN的情况下,同一次**前向/后向**(forward/backward)过程中所有**时间步**(time step)共享同一个**权重**(weight)。当只做**预测**(inference)时,各次**前向**之间也都使用了相同的**权重**,没有必要在每次**前向**中每个**时间步**的计算时对**权重**进行重复的Packing操作。 +在RNN的情况下,同一次前向、后向(forward/backward)过程中所有时间步(time step)共享同一个权重(weight)。当只做推断(inference)时,各次前向之间也都使用了相同的权重,没有必要在每次前向中每个时间步的计算时对权重进行重复的Packing操作。 -我们通过使用新引入的GEMM Packed APIs,在层**初始化**的时时候,先完成对**权重**的Packing操作,然后在**前向/后向**时复用已经转换过的**权重**,并在每次**权重**更新后,对新的**权重**进行转换用于下次迭代。 +我们通过使用新引入的GEMM Packed APIs,在层初始化的时候,先完成对权重的Packing操作,然后在前向,后向时复用已经转换过的权重,并在每次权重更新后,对新的权重进行转换用于下次迭代。 * 优化前,对于序列长度(sequence length)为`T`的网络模型(model), `N`次迭代执行的转换次数为: - `inference`: `N * T` From 0fce0fe6983f4f167b873465fc90cff08fc31bd9 Mon Sep 17 00:00:00 2001 From: dangqingqing Date: Fri, 15 Dec 2017 15:48:58 +0800 Subject: [PATCH 119/193] Reduce memory usage in conv layer and RoI layer for mobile inference. --- paddle/function/GemmConvOp.cpp | 5 +++++ paddle/gserver/layers/ROIPoolLayer.cpp | 27 +++++++++++++++++--------- 2 files changed, 23 insertions(+), 9 deletions(-) diff --git a/paddle/function/GemmConvOp.cpp b/paddle/function/GemmConvOp.cpp index 8d34eee886..ffbf366fa9 100644 --- a/paddle/function/GemmConvOp.cpp +++ b/paddle/function/GemmConvOp.cpp @@ -233,6 +233,11 @@ public: inputGrad += inputChannels * inputHeight * inputWidth; outputGrad += outputChannels * outputHeight * outputWidth; } +#ifdef PADDLE_MOBILE_INFERENCE + if (Device == DEVICE_TYPE_CPU) { + delete memory_; + } +#endif } }; diff --git a/paddle/gserver/layers/ROIPoolLayer.cpp b/paddle/gserver/layers/ROIPoolLayer.cpp index 2c8256b91c..7d7c30b4d8 100644 --- a/paddle/gserver/layers/ROIPoolLayer.cpp +++ b/paddle/gserver/layers/ROIPoolLayer.cpp @@ -84,12 +84,15 @@ void ROIPoolLayer::forward(PassType passType) { size_t poolChannelOffset = pooledHeight_ * pooledWidth_; real* outputData = outputValue->getData(); - Matrix::resizeOrCreate(maxIdxs_, - numROIs, - channels_ * pooledHeight_ * pooledWidth_, - false, - false); - real* argmaxData = maxIdxs_->getData(); + real* argmaxData = nullptr; + if (passType != PASS_TEST) { + Matrix::resizeOrCreate(maxIdxs_, + numROIs, + channels_ * pooledHeight_ * pooledWidth_, + false, + false); + argmaxData = maxIdxs_->getData(); + } for (size_t n = 0; n < numROIs; ++n) { // the first five elememts of each RoI should be: @@ -128,14 +131,18 @@ void ROIPoolLayer::forward(PassType passType) { bool isEmpty = (hend <= hstart) || (wend <= wstart); size_t poolIndex = ph * pooledWidth_ + pw; outputData[poolIndex] = isEmpty ? 0 : -FLT_MAX; - argmaxData[poolIndex] = -1; + if (argmaxData) { + argmaxData[poolIndex] = -1; + } for (size_t h = hstart; h < hend; ++h) { for (size_t w = wstart; w < wend; ++w) { size_t index = h * width_ + w; if (batchData[index] > outputData[poolIndex]) { outputData[poolIndex] = batchData[index]; - argmaxData[poolIndex] = index; + if (argmaxData) { + argmaxData[poolIndex] = index; + } } } } @@ -143,7 +150,9 @@ void ROIPoolLayer::forward(PassType passType) { } batchData += channelOffset; outputData += poolChannelOffset; - argmaxData += poolChannelOffset; + if (argmaxData) { + argmaxData += poolChannelOffset; + } } bottomROIs += roiOffset; } From 349609207e0d6b6a2ff1548b8d0773c7857989f0 Mon Sep 17 00:00:00 2001 From: dangqingqing Date: Fri, 15 Dec 2017 16:22:19 +0800 Subject: [PATCH 120/193] Fix the error function/GemmConvOp. --- paddle/function/GemmConvOp.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/paddle/function/GemmConvOp.cpp b/paddle/function/GemmConvOp.cpp index ffbf366fa9..3387cae396 100644 --- a/paddle/function/GemmConvOp.cpp +++ b/paddle/function/GemmConvOp.cpp @@ -126,6 +126,11 @@ public: inputData += inputChannels * inputHeight * inputWidth; outputData += outputChannels * outputHeight * outputWidth; } +#ifdef PADDLE_MOBILE_INFERENCE + if (Device == DEVICE_TYPE_CPU) { + delete memory_; + } +#endif } }; @@ -233,11 +238,6 @@ public: inputGrad += inputChannels * inputHeight * inputWidth; outputGrad += outputChannels * outputHeight * outputWidth; } -#ifdef PADDLE_MOBILE_INFERENCE - if (Device == DEVICE_TYPE_CPU) { - delete memory_; - } -#endif } }; From 1b0c7d7c7afd4c5f09eb43358dd4851ba1735c3f Mon Sep 17 00:00:00 2001 From: Yu Yang Date: Fri, 15 Dec 2017 16:24:27 +0800 Subject: [PATCH 121/193] Simplize system_allocator and fix GPU_INFO (#6653) --- paddle/memory/detail/system_allocator.cc | 50 ++++++------------------ paddle/platform/gpu_info.cc | 19 ++++----- 2 files changed, 23 insertions(+), 46 deletions(-) diff --git a/paddle/memory/detail/system_allocator.cc b/paddle/memory/detail/system_allocator.cc index 6a815a1b57..509250debc 100644 --- a/paddle/memory/detail/system_allocator.cc +++ b/paddle/memory/detail/system_allocator.cc @@ -19,6 +19,7 @@ limitations under the License. */ #include // for malloc and free #include // for mlock and munlock +#include // for std::max #include "gflags/gflags.h" @@ -28,7 +29,7 @@ limitations under the License. */ // of memory available to the system for paging. So, by default, we // should set false to use_pinned_memory. DEFINE_bool(use_pinned_memory, true, "If set, allocate cpu pinned memory."); - +DECLARE_double(fraction_of_gpu_memory_to_use); namespace paddle { namespace memory { namespace detail { @@ -77,45 +78,20 @@ void* GPUAllocator::Alloc(size_t& index, size_t size) { // CUDA documentation doesn't explain if cudaMalloc returns nullptr // if size is 0. We just make sure it does. if (size <= 0) return nullptr; - - size_t available = 0; - size_t capacity = 0; - paddle::platform::GpuMemoryUsage(available, capacity); - - // Reserve memory for page tables, etc. - size_t reserving = 0.05 * capacity + paddle::platform::GpuMinChunkSize(); - size_t usable = available > reserving ? available - reserving : 0; - - // If remaining size no less than expected size, using general - // cudaMalloc to allocate GPU memory. - void* p = 0; - if (size <= usable) { - cudaError_t result = cudaMalloc(&p, size); - if (result == cudaSuccess) { - index = 0; - gpu_alloc_size_ += size; - return p; - } - } - - // If remaining size less than expected size or cudaMalloc failed, - // cudaMallocHost will be considered as a fallback allocator. - // - // NOTE: here, we use GpuMaxAllocSize() as the maximum memory size - // of host fallback allocation. Allocates too much would reduce - // the amount of memory available to the underlying system for paging. - usable = paddle::platform::GpuMaxAllocSize() - fallback_alloc_size_; - - if (size > usable) return nullptr; - - cudaError_t result = cudaMallocHost(&p, size); + void* p; + cudaError_t result = cudaMalloc(&p, size); if (result == cudaSuccess) { - index = 1; - fallback_alloc_size_ += size; + index = 0; + gpu_alloc_size_ += size; return p; + } else { + LOG(WARNING) + << "Cannot malloc " << size / 1024.0 / 1024.0 + << " MB GPU memory. Please shrink FLAGS_fraction_of_gpu_memory_to_use " + "environment variable to a lower value. Current value is " + << FLAGS_fraction_of_gpu_memory_to_use; + return nullptr; } - - return nullptr; } void GPUAllocator::Free(void* p, size_t size, size_t index) { diff --git a/paddle/platform/gpu_info.cc b/paddle/platform/gpu_info.cc index 4fa2eaed31..541eca5f39 100644 --- a/paddle/platform/gpu_info.cc +++ b/paddle/platform/gpu_info.cc @@ -73,19 +73,20 @@ size_t GpuMaxChunkSize() { size_t available = 0; GpuMemoryUsage(available, total); - - // Reserving the rest memory for page tables, etc. - size_t reserving = 0.05 * total; - + VLOG(10) << "GPU Usage " << available / 1024 / 1024 << "M/" + << total / 1024 / 1024 << "M"; + size_t reserving = static_cast(0.05 * total); // If available less than minimum chunk size, no usable memory exists. available = - std::max(std::max(available, GpuMinChunkSize()) - GpuMinChunkSize(), - reserving) - - reserving; + std::min(std::max(available, GpuMinChunkSize()) - GpuMinChunkSize(), + total - reserving); + + // Reserving the rest memory for page tables, etc. - size_t allocating = FLAGS_fraction_of_gpu_memory_to_use * total; + size_t allocating = static_cast(FLAGS_fraction_of_gpu_memory_to_use * + (total - reserving)); - PADDLE_ENFORCE_LT(allocating, available); + PADDLE_ENFORCE_LE(allocating, available); return allocating; } From e1049c478697329b504ac682125210112fc13295 Mon Sep 17 00:00:00 2001 From: Luo Tao Date: Fri, 15 Dec 2017 17:18:28 +0800 Subject: [PATCH 122/193] add fluid python api in chinese website --- doc/api/index_cn.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/api/index_cn.rst b/doc/api/index_cn.rst index 9be0b370ee..84f9097a6c 100644 --- a/doc/api/index_cn.rst +++ b/doc/api/index_cn.rst @@ -7,3 +7,4 @@ API 模型配置 数据访问 训练与应用 + v2/fluid.rst From 7968b66d72d44edb1648b76acf90df37f0bd73c2 Mon Sep 17 00:00:00 2001 From: dangqingqing Date: Fri, 15 Dec 2017 19:17:48 +0800 Subject: [PATCH 123/193] Fix error in function/GemmConvOp.cpp. --- paddle/function/GemmConvOp.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/paddle/function/GemmConvOp.cpp b/paddle/function/GemmConvOp.cpp index 3387cae396..de7b70e271 100644 --- a/paddle/function/GemmConvOp.cpp +++ b/paddle/function/GemmConvOp.cpp @@ -128,7 +128,7 @@ public: } #ifdef PADDLE_MOBILE_INFERENCE if (Device == DEVICE_TYPE_CPU) { - delete memory_; + memory_.reset(); } #endif } From 734e87e55b00418aed0fac5a879b2704d62cf3ab Mon Sep 17 00:00:00 2001 From: yangyaming Date: Fri, 15 Dec 2017 20:08:55 +0800 Subject: [PATCH 124/193] Add python wrapper for lstm unit op. --- doc/api/v2/fluid/layers.rst | 11 +- python/paddle/v2/fluid/layers/nn.py | 112 +++++++++++++++++++- python/paddle/v2/fluid/tests/test_layers.py | 17 +++ 3 files changed, 132 insertions(+), 8 deletions(-) diff --git a/doc/api/v2/fluid/layers.rst b/doc/api/v2/fluid/layers.rst index 89e5fec13b..0ab36402fa 100644 --- a/doc/api/v2/fluid/layers.rst +++ b/doc/api/v2/fluid/layers.rst @@ -188,12 +188,6 @@ beam_search_decode :noindex: -lstm ---------- -.. autofunction:: paddle.v2.fluid.layers.lstm - :noindex: - - lod_rank_table --------- .. autofunction:: paddle.v2.fluid.layers.lod_rank_table @@ -300,3 +294,8 @@ conv2d_transpose .. autofunction:: paddle.v2.fluid.layers.conv2d_transpose :noindex: + +lstm_unit +--------- +.. autofunction:: paddle.v2.fluid.layers.lstm_unit + :noindex: diff --git a/python/paddle/v2/fluid/layers/nn.py b/python/paddle/v2/fluid/layers/nn.py index bad7dbd84e..84e62d988c 100644 --- a/python/paddle/v2/fluid/layers/nn.py +++ b/python/paddle/v2/fluid/layers/nn.py @@ -5,12 +5,13 @@ All layers just related to the neural network. from ..layer_helper import LayerHelper from ..initializer import Normal, Constant from ..framework import Variable +from tensor import concat __all__ = [ 'fc', 'embedding', 'dynamic_lstm', 'gru_unit', 'linear_chain_crf', 'crf_decoding', 'cos_sim', 'cross_entropy', 'square_error_cost', 'accuracy', 'chunk_eval', 'sequence_conv', 'conv2d', 'sequence_pool', 'pool2d', - 'batch_norm', 'beam_search_decode', 'conv2d_transpose' + 'batch_norm', 'beam_search_decode', 'conv2d_transpose', 'lstm_unit' ] @@ -392,7 +393,7 @@ def chunk_eval(input, excluded_chunk_types=None, **kwargs): """ - This function computes and outputs the precision, recall and + This function computes and outputs the precision, recall and F1-score of chunk detection. """ helper = LayerHelper("chunk_eval", **kwargs) @@ -789,3 +790,110 @@ def conv2d_transpose(input, attrs=op_attr) return out + + +def lstm_unit(x_t, + hidden_t_prev, + cell_t_prev, + forget_bias=0.0, + main_program=None, + startup_program=None): + """Lstm unit layer. The equation of a lstm step is: + + .. math:: + + i_t & = \sigma(W_{x_i}x_{t} + W_{h_i}h_{t-1} + W_{c_i}c_{t-1} + b_i) + + f_t & = \sigma(W_{x_f}x_{t} + W_{h_f}h_{t-1} + W_{c_f}c_{t-1} + b_f) + + c_t & = f_tc_{t-1} + i_t tanh (W_{x_c}x_t+W_{h_c}h_{t-1} + b_c) + + o_t & = \sigma(W_{x_o}x_{t} + W_{h_o}h_{t-1} + W_{c_o}c_t + b_o) + + h_t & = o_t tanh(c_t) + + The inputs of lstm unit includes :math:`x_t`, :math:`h_{t-1}` and + :math:`c_{t-1}`. The implementation separates the linear transformation + and non-linear transformation apart. Here, we take :math:`i_t` as an + example. The linear transformation is applied by calling a `fc` layer and + the equation is: + + .. math:: + + L_{i_t} = W_{x_i}x_{t} + W_{h_i}h_{t-1} + W_{c_i}c_{t-1} + b_i + + The non-linear transformation is applied by calling `lstm_unit_op` and the + equation is: + + .. math:: + + i_t = \sigma(L_{i_t}) + + This layer has two outputs including :math:`o_t` and :math:`h_t`. + + Args: + x_t (Variable): The input value of current step. + hidden_t_prev (Variable): The hidden value of lstm unit. + cell_t_prev (Variable): The cell value of lstm unit. + forget_bias (float): The forget bias of lstm unit. + main_program (Program): The main program. + startup_program (Program): the startup program. + + Returns: + tuple: The cell value and hidden value of lstm unit. + + Raises: + ValueError: The ranks of **x_t**, **hidden_t_prev** and **cell_t_prev**\ + not be 2 or the 1st dimensions of **x_t**, **hidden_t_prev** \ + and **cell_t_prev** not be the same. + + Examples: + + .. code-block:: python + + x_t = fluid.layers.fc(input=x_t_data, size=10) + prev_hidden = fluid.layers.fc(input=prev_hidden_data, size=20) + prev_cell = fluid.layers.fc(input=prev_cell_data, size=30) + cell_value, hidden_value = fluid.layers.lstm_unit(x_t=x_t, + hidden_t_prev=prev_hidden, + cell_t_prev=prev_cell) + """ + helper = LayerHelper('lstm_unit', **locals()) + + if len(x_t.shape) != 2: + raise ValueError("Rank of x_t must be 2.") + + if len(hidden_t_prev.shape) != 2: + raise ValueError("Rank of hidden_t_prev must be 2.") + + if len(cell_t_prev.shape) != 2: + raise ValueError("Rank of cell_t_prev must be 2.") + + if x_t.shape[0] != hidden_t_prev.shape[0] or x_t.shape[ + 0] != cell_t_prev.shape[0]: + raise ValueError("The 1s dimension of x_t, hidden_t_prev and " + "cell_t_prev must be the same.") + + size = cell_t_prev.shape[1] + concat_out = concat( + input=[x_t, hidden_t_prev], + axis=1, + main_program=main_program, + startup_program=startup_program) + fc_out = fc(input=concat_out, + size=4 * size, + main_program=main_program, + startup_program=startup_program) + dtype = x_t.dtype + c = helper.create_tmp_variable(dtype) + h = helper.create_tmp_variable(dtype) + + helper.append_op( + type='lstm_unit', + inputs={"X": fc_out, + "C_prev": cell_t_prev}, + outputs={"C": c, + "H": h}, + attrs={"forget_bias": forget_bias}) + + return c, h diff --git a/python/paddle/v2/fluid/tests/test_layers.py b/python/paddle/v2/fluid/tests/test_layers.py index 9b88080158..468bd41285 100644 --- a/python/paddle/v2/fluid/tests/test_layers.py +++ b/python/paddle/v2/fluid/tests/test_layers.py @@ -161,6 +161,23 @@ class TestBook(unittest.TestCase): x=dat, label=lbl)) print(str(program)) + def test_lstm_unit(self): + program = Program() + with program_guard(program): + x_t_data = layers.data( + name='x_t_data', shape=[10, 10], dtype='float32') + x_t = layers.fc(input=x_t_data, size=10) + prev_hidden_data = layers.data( + name='prev_hidden_data', shape=[10, 20], dtype='float32') + prev_hidden = layers.fc(input=prev_hidden_data, size=20) + prev_cell_data = layers.data( + name='prev_cell', shape=[10, 30], dtype='float32') + prev_cell = layers.fc(input=prev_cell_data, size=30) + self.assertIsNotNone( + layers.lstm_unit( + x_t=x_t, hidden_t_prev=prev_hidden, cell_t_prev=prev_cell)) + print(str(program)) + if __name__ == '__main__': unittest.main() From 0d748f5bcd6615652e3c9ccbffc58c03756cfb85 Mon Sep 17 00:00:00 2001 From: yangyaming Date: Fri, 15 Dec 2017 20:20:40 +0800 Subject: [PATCH 125/193] Move seq_expand to nn.py. --- python/paddle/v2/fluid/layers/nn.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/paddle/v2/fluid/layers/nn.py b/python/paddle/v2/fluid/layers/nn.py index cdc77d0604..bed46e4972 100644 --- a/python/paddle/v2/fluid/layers/nn.py +++ b/python/paddle/v2/fluid/layers/nn.py @@ -10,7 +10,7 @@ __all__ = [ 'fc', 'embedding', 'dynamic_lstm', 'gru_unit', 'linear_chain_crf', 'crf_decoding', 'cos_sim', 'cross_entropy', 'square_error_cost', 'accuracy', 'chunk_eval', 'sequence_conv', 'conv2d', 'sequence_pool', 'pool2d', - 'batch_norm', 'beam_search_decode', 'conv2d_transpose' + 'batch_norm', 'beam_search_decode', 'conv2d_transpose', 'seq_expand' ] From 84cb542c13905f5113a6e91d86129ec7a1a90e06 Mon Sep 17 00:00:00 2001 From: tensor-tang Date: Fri, 15 Dec 2017 17:23:03 +0800 Subject: [PATCH 126/193] use intel openmp to speedup seq2batch when WITH_MKL --- paddle/gserver/layers/SequenceToBatch.cpp | 25 +++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/paddle/gserver/layers/SequenceToBatch.cpp b/paddle/gserver/layers/SequenceToBatch.cpp index 5fa7b6f488..7892d475a6 100644 --- a/paddle/gserver/layers/SequenceToBatch.cpp +++ b/paddle/gserver/layers/SequenceToBatch.cpp @@ -171,12 +171,25 @@ void SequenceToBatch::sequence2BatchCopy(Matrix &batch, hl_sequence2batch_copy( batchData, seqData, idxData, seqWidth, batchCount, seq2batch); } else { - for (int i = 0; i < batchCount; ++i) { - if (seq2batch) { - memcpy(batch.rowBuf(i), - sequence.rowBuf(idxData[i]), - seqWidth * sizeof(real)); - } else { + if (seq2batch) { + const int blockMemSize = 8 * 1024; + const int blockSize = blockMemSize / sizeof(real); +#ifdef PADDLE_USE_MKLML +#pragma omp parallel for collapse(2) +#endif + for (int i = 0; i < batchCount; ++i) { + for (int j = 0; j < seqWidth; j += blockSize) { + memcpy(batch.rowBuf(i) + j, + sequence.rowBuf(idxData[i]) + j, + (j + blockSize > seqWidth) ? (seqWidth - j) * sizeof(real) + : blockMemSize); + } + } + } else { +#ifdef PADDLE_USE_MKLML +#pragma omp parallel for +#endif + for (int i = 0; i < batchCount; ++i) { memcpy(sequence.rowBuf(idxData[i]), batch.rowBuf(i), seqWidth * sizeof(real)); From 9c27c13e469f4c2f11f00c6e2570927e1d640e3c Mon Sep 17 00:00:00 2001 From: tensor-tang Date: Sat, 16 Dec 2017 21:16:01 +0800 Subject: [PATCH 127/193] follow comments using macro to separate the original implements --- paddle/gserver/layers/SequenceToBatch.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/paddle/gserver/layers/SequenceToBatch.cpp b/paddle/gserver/layers/SequenceToBatch.cpp index 7892d475a6..6b769378d2 100644 --- a/paddle/gserver/layers/SequenceToBatch.cpp +++ b/paddle/gserver/layers/SequenceToBatch.cpp @@ -172,11 +172,10 @@ void SequenceToBatch::sequence2BatchCopy(Matrix &batch, batchData, seqData, idxData, seqWidth, batchCount, seq2batch); } else { if (seq2batch) { +#ifdef PADDLE_USE_MKLML const int blockMemSize = 8 * 1024; const int blockSize = blockMemSize / sizeof(real); -#ifdef PADDLE_USE_MKLML #pragma omp parallel for collapse(2) -#endif for (int i = 0; i < batchCount; ++i) { for (int j = 0; j < seqWidth; j += blockSize) { memcpy(batch.rowBuf(i) + j, @@ -185,6 +184,13 @@ void SequenceToBatch::sequence2BatchCopy(Matrix &batch, : blockMemSize); } } +#else + for (int i = 0; i < batchCount; ++i) { + memcpy(batch.rowBuf(i), + sequence.rowBuf(idxData[i]), + seqWidth * sizeof(real)); + } +#endif } else { #ifdef PADDLE_USE_MKLML #pragma omp parallel for From ca0b5caeceb8589675b1c2f98b9cd76a92e01bce Mon Sep 17 00:00:00 2001 From: typhoonzero Date: Sat, 16 Dec 2017 15:37:06 +0800 Subject: [PATCH 128/193] refine cluster doc structure --- doc/howto/usage/cluster/cluster_train_cn.md | 113 +-- doc/howto/usage/cluster/cluster_train_en.md | 113 +-- doc/howto/usage/k8s/k8s_aws_en.md | 689 ------------------ doc/howto/usage/k8s/k8s_cn.md | 205 ------ doc/howto/usage/k8s/k8s_distributed_cn.md | 315 -------- doc/howto/usage/k8s/k8s_en.md | 201 ----- doc/howto/usage/k8s/src/Dockerfile | 7 - .../usage/k8s/src/add_security_group.png | Bin 118948 -> 0 bytes doc/howto/usage/k8s/src/create_efs.png | Bin 241814 -> 0 bytes doc/howto/usage/k8s/src/efs_mount.png | Bin 230609 -> 0 bytes doc/howto/usage/k8s/src/k8s-paddle-arch.png | Bin 513104 -> 0 bytes doc/howto/usage/k8s/src/k8s_data/Dockerfile | 7 - doc/howto/usage/k8s/src/k8s_data/README.md | 6 - doc/howto/usage/k8s/src/k8s_data/get_data.sh | 26 - doc/howto/usage/k8s/src/k8s_train/Dockerfile | 6 - doc/howto/usage/k8s/src/k8s_train/README.md | 5 - doc/howto/usage/k8s/src/k8s_train/start.sh | 19 - .../usage/k8s/src/k8s_train/start_paddle.py | 170 ----- doc/howto/usage/k8s/src/managed_policy.png | Bin 247321 -> 0 bytes .../usage/k8s/src/pserver_and_trainer.png | Bin 71688 -> 0 bytes .../k8s/src/route53_create_recordset.png | Bin 35749 -> 0 bytes .../usage/k8s/src/route53_create_zone.png | Bin 52035 -> 0 bytes .../usage/k8s/src/worker_security_group.png | Bin 89208 -> 0 bytes 23 files changed, 14 insertions(+), 1868 deletions(-) delete mode 100644 doc/howto/usage/k8s/k8s_aws_en.md delete mode 100644 doc/howto/usage/k8s/k8s_cn.md delete mode 100644 doc/howto/usage/k8s/k8s_distributed_cn.md delete mode 100644 doc/howto/usage/k8s/k8s_en.md delete mode 100644 doc/howto/usage/k8s/src/Dockerfile delete mode 100644 doc/howto/usage/k8s/src/add_security_group.png delete mode 100644 doc/howto/usage/k8s/src/create_efs.png delete mode 100644 doc/howto/usage/k8s/src/efs_mount.png delete mode 100644 doc/howto/usage/k8s/src/k8s-paddle-arch.png delete mode 100644 doc/howto/usage/k8s/src/k8s_data/Dockerfile delete mode 100644 doc/howto/usage/k8s/src/k8s_data/README.md delete mode 100755 doc/howto/usage/k8s/src/k8s_data/get_data.sh delete mode 100644 doc/howto/usage/k8s/src/k8s_train/Dockerfile delete mode 100644 doc/howto/usage/k8s/src/k8s_train/README.md delete mode 100755 doc/howto/usage/k8s/src/k8s_train/start.sh delete mode 100755 doc/howto/usage/k8s/src/k8s_train/start_paddle.py delete mode 100644 doc/howto/usage/k8s/src/managed_policy.png delete mode 100644 doc/howto/usage/k8s/src/pserver_and_trainer.png delete mode 100644 doc/howto/usage/k8s/src/route53_create_recordset.png delete mode 100644 doc/howto/usage/k8s/src/route53_create_zone.png delete mode 100644 doc/howto/usage/k8s/src/worker_security_group.png diff --git a/doc/howto/usage/cluster/cluster_train_cn.md b/doc/howto/usage/cluster/cluster_train_cn.md index 2e98b3de3f..4cf5eec030 100644 --- a/doc/howto/usage/cluster/cluster_train_cn.md +++ b/doc/howto/usage/cluster/cluster_train_cn.md @@ -1,25 +1,8 @@ # PaddlePaddle分布式训练 -* [概述](#概述) -* [环境准备](#环境准备) -* [启动参数说明](#启动参数说明) - * [启动参数服务器](#启动参数服务器) - * [启动计算节点](#启动计算节点) - * [准备数据集](#准备数据集) - * [准备训练程序](#准备训练程序) -* [使用分布式计算平台或工具](#使用分布式计算平台或工具) - * [使用Fabric启动集群作业](#使用fabric启动集群作业) - * [准备一个Linux集群](#准备一个linux集群) - * [启动集群作业](#启动集群作业) - * [终止集群作业](#终止集群作业) - * [检查集群训练结果](#检查集群训练结果) - * [检查模型输出](#检查模型输出) - * [在OpenMPI集群中提交训练作业](#在openmpi集群中提交训练作业) - * [准备OpenMPI集群](#准备OpenMPI集群) - * [启动集群作业](#启动集群作业-1) - * [在Kubernetes集群中提交训练作业](#在kubernetes集群中提交训练作业) ## 概述 + 本文将介绍如何使用PaddlePaddle在不同的集群框架下完成分布式训练。分布式训练架构如下图所示: @@ -32,6 +15,7 @@ 在使用同步SGD训练神经网络时,PaddlePaddle使用同步屏障(barrier),使梯度的提交和参数的更新按照顺序方式执行。在异步SGD中,则并不会等待所有trainer提交梯度才更新参数,这样极大地提高了计算的并行性:参数服务器之间不相互依赖,并行地接收梯度和更新参数,参数服务器也不会等待计算节点全部都提交梯度之后才开始下一步,计算节点之间也不会相互依赖,并行地执行模型的训练。可以看出,虽然异步SGD方式会提高参数更新并行度, 但是并不能保证参数同步更新,在任意时间某一台参数服务器上保存的参数可能比另一台要更新,与同步SGD相比,梯度会有噪声。 + ## 环境准备 1. 准备您的计算集群。计算集群通常由一组(几台到几千台规模)的Linux服务器组成。服务器之间可以通过局域网(LAN)联通,每台服务器具有集群中唯一的IP地址(或者可被DNS解析的主机名)。集群中的每台计算机通常被成为一个“节点”。 @@ -195,91 +179,10 @@ PaddlePaddle可以使用多种分布式计算平台构建分布式计算任务 在使用分布式计算平台进行训练时,任务被调度在集群中时,分布式计算平台通常会通过API或者环境变量提供任务运行需要的参数,比如节点的ID、IP和任务节点个数等。 -### 使用Fabric启动集群作业 - -#### 准备一个Linux集群 -可以在`paddle/scripts/cluster_train_v2/fabric/docker_cluster`目录下,执行`kubectl -f ssh_servers.yaml`启动一个测试集群,并使用`kubectl get po -o wide`获得这些节点的IP地址。 - -#### 启动集群作业 - -`paddle.py` 提供了自动化脚本来启动不同节点中的所有 PaddlePaddle 集群进程。默认情况下,所有命令行选项可以设置为 `paddle.py` 命令选项并且 `paddle.py` 将透明、自动地将这些选项应用到 PaddlePaddle 底层进程。 - -`paddle.py` 为方便作业启动提供了两个独特的命令选项。 - -- `job_dispatch_package` 设为本地 `workspace` 目录,它将被分发到 `conf.py` 中设置的所有节点。它有助于帮助频繁修改和访问工作区文件的用户减少负担,否则频繁的多节点工作空间部署可能会很麻烦。 -- `job_workspace` 设为已部署的工作空间目录,`paddle.py` 将跳过分发阶段直接启动所有节点的集群作业。它可以帮助减少分发延迟。 - -`cluster_train/run.sh` 提供了命令样例来运行 `doc/howto/usage/cluster/src/word2vec` 集群任务,只需用您定义的目录修改 `job_dispatch_package` 和 `job_workspace`,然后: -``` -sh run.sh -``` - -集群作业将会在几秒后启动。 - -#### 终止集群作业 -`paddle.py`能获取`Ctrl + C` SIGINT 信号来自动终止它启动的所有进程。只需中断 `paddle.py` 任务来终止集群作业。如果程序崩溃你也可以手动终止。 - -#### 检查集群训练结果 -详细信息请检查 $workspace/log 里的日志,每一个节点都有相同的日志结构。 - -`paddle_trainer.INFO` -提供几乎所有训练的内部输出日志,与本地训练相同。这里检验运行时间模型的收敛。 - -`paddle_pserver2.INFO` -提供 pserver 运行日志,有助于诊断分布式错误。 - -`server.log` -提供 parameter server 进程的 stderr 和 stdout。训练失败时可以检查错误日志。 - -`train.log` -提供训练过程的 stderr 和 stdout。训练失败时可以检查错误日志。 - -#### 检查模型输出 -运行完成后,模型文件将被写入节点 0 的 `output` 目录中。 -工作空间中的 `nodefile` 表示当前集群作业的节点 ID。 - -### 在OpenMPI集群中提交训练作业 - -#### 准备OpenMPI集群 - -执行下面的命令以启动3个节点的OpenMPI集群和一个"head"节点: - -```bash -paddle/scripts/cluster_train_v2/openmpi/docker_cluster -kubectl create -f head.yaml -kubectl create -f mpi-nodes.yaml -``` - -然后可以从head节点ssh无密码登录到OpenMPI的每个节点上。 - -#### 启动集群作业 - -您可以按照下面的步骤在OpenMPI集群中提交paddle训练任务: - -```bash -# 获得head和node节点的IP地址 -kubectl get po -o wide -# 将node节点的IP地址保存到machines文件中 -kubectl get po -o wide | grep nodes | awk '{print $6}' > machines -# 拷贝必要的文件到head节点 -scp -i ssh/id_rsa.mpi.pub machines prepare.py train.py start_mpi_train.sh tutorial@[headIP]:~ -# ssh 登录到head节点 -ssh -i ssh/id_rsa.mpi.pub tutorial@[headIP] -# --------------- 以下操作均在head节点中执行 --------------- -# 准备训练数据 -python prepare.py -# 拷贝训练程序和字典文件到每台MPI节点 -cat machines | xargs -i scp word_dict.pickle train.py start_mpi_train.sh machines {}:/home/tutorial -# 创建日志目录 -mpirun -hostfile machines -n 3 mkdir /home/tutorial/logs -# 拷贝训练数据到各自的节点 -scp train.txt-00000 test.txt-00000 [node1IP]:/home/tutorial -scp train.txt-00001 test.txt-00001 [node2IP]:/home/tutorial -scp train.txt-00002 test.txt-00002 [node3IP]:/home/tutorial -# 启动训练任务 -mpirun -hostfile machines -n 3 /home/tutorial/start_mpi_train.sh -``` - -### 在Kubernetes集群中提交训练作业 +## 在不同集群中运行 -此部分的使用方法可以参考[here](../k8s/k8s_distributed_cn.md)。 + [fabric](fabric_cn.md) + [opemmpi](openmpi_cn.md) + [kubernetes](k8s_cn.md) + [kubernetes distributed](k8s_distributed_cn.md) + [kubernetes on AWS](k8s_aws_en.md) diff --git a/doc/howto/usage/cluster/cluster_train_en.md b/doc/howto/usage/cluster/cluster_train_en.md index baa97c0c02..13b14dc113 100644 --- a/doc/howto/usage/cluster/cluster_train_en.md +++ b/doc/howto/usage/cluster/cluster_train_en.md @@ -1,24 +1,5 @@ # PaddlePaddle Distributed Training -* [Introduction](#introduction) -* [Preparations](#preparations) -* [Command-line arguments](#command-line-arguments) - * [Starting parameter server](#starting-parameter-server) - * [Starting trainer](#starting-trainer) - * [Prepare Training Dataset](#prepare-training-dataset) - * [Prepare Training program](#prepare-training-program) -* [Use cluster platforms or cluster management tools](#use-cluster-platforms-or-cluster-management-tools) - * [Cluster Training Using Fabric](#cluster-training-using-fabric) - * [Prepare a Linux cluster](#prepare-a-linux-cluster) - * [Launching Cluster Job](#launching-cluster-job) - * [Kill Cluster Job](#kill-cluster-job) - * [Check Cluster Training Result](#check-cluster-training-result) - * [Check Model Output](#check-model-output) - * [Cluster Training Using OpenMPI](#cluster-training-using-openmpi) - * [Prepare an OpenMPI cluster](#prepare-an-openmpi-cluster) - * [Launching Cluster Job](#launching-cluster-job-1) - * [Cluster Training Using Kubernetes](#cluster-training-using-kubernetes) - ## Introduction In this article, we'll explain how to run distributed training jobs with PaddlePaddle on different types of clusters. The diagram below shows the main architecture of a distributed trainning job: @@ -202,92 +183,10 @@ We'll introduce cluster job management on these platforms. The examples can be f These cluster platforms provide API or environment variables for training processes, when the job is dispatched to different nodes. Like node ID, IP or total number of nodes etc. -### Cluster Training Using Fabric - -#### Prepare a Linux cluster - -Run `kubectl -f ssh_servers.yaml` under the directory: `paddle/scripts/cluster_train_v2/fabric/docker_cluster` will launch a demo cluster. Run `kubectl get po -o wide` to get IP addresses of these nodes. - -#### Launching Cluster Job -`paddle.py` provides automatical scripts to start all PaddlePaddle cluster processes in different nodes. By default, all command line options can be set as `paddle.py` command options and `paddle.py` will transparently and automatically set these options to PaddlePaddle lower level processes. - -`paddle.py`provides two distinguished command option for easy job launching. - -- `job_dispatch_package` set it with local `workspace` directory, it will be dispatched to all nodes which is set in `conf.py`. It could be helpful for frequently manipulating workspace files. otherwise, frequent multi-nodes workspace deployment is very annoying. -- `job_workspace` set it with already deployed workspace directory, `paddle.py` will skip dispatch stage to directly launch cluster job with all nodes. It could help to reduce heavy -dispatch latency. - -`cluster_train/run.sh` provides command line sample to run `demo/recommendation` cluster job, just modify `job_dispatch_package` and `job_workspace` with your defined directory, then: -``` -sh run.sh -``` - -The cluster Job will start in several seconds. - -#### Kill Cluster Job -`paddle.py` can capture `Ctrl + C` SIGINT signal to automatically kill all processes launched by it. So just stop `paddle.py` to kill cluster job. You should manually kill the job if the program crashed. - -#### Check Cluster Training Result -Check log in $workspace/log for details, each node owns same log structure. - -`paddle_trainer.INFO` -It provides almost all internal output log for training, same as local training. Check runtime model convergence here. - -`paddle_pserver2.INFO` -It provides parameter server running log, which could help to diagnose distributed error. - -`server.log` -It provides stderr and stdout of parameter server process. Check error log if training crashes. - -`train.log` -It provides stderr and stdout of trainer process. Check error log if training crashes. - -#### Check Model Output -After one pass finished, model files will be written in `output` directory in node 0. -`nodefile` in workspace indicates the node id of current cluster job. - -### Cluster Training Using OpenMPI - -#### Prepare an OpenMPI cluster - -Run the following command to start a 3-node MPI cluster and one "head" node. - -```bash -cd paddle/scripts/cluster_train_v2/openmpi/docker_cluster -kubectl create -f head.yaml -kubectl create -f mpi-nodes.yaml -``` - -Then you can log in to every OpenMPI node using ssh without input any passwords. - -#### Launching Cluster Job - -Follow the steps to launch a PaddlePaddle training job in OpenMPI cluster:\ - -```bash -# find out node IP addresses -kubectl get po -o wide -# generate a "machines" file containing node IP addresses -kubectl get po -o wide | grep nodes | awk '{print $6}' > machines -# copy necessary files onto "head" node -scp -i ssh/id_rsa.mpi.pub machines prepare.py train.py start_mpi_train.sh tutorial@[headIP]:~ -# login to head node using ssh -ssh -i ssh/id_rsa.mpi.pub tutorial@[headIP] -# --------------- in head node --------------- -# prepare training data -python prepare.py -# copy training data and dict file to MPI nodes -cat machines | xargs -i scp word_dict.pickle train.py start_mpi_train.sh machines {}:/home/tutorial -# creat a directory for storing log files -mpirun -hostfile machines -n 3 mkdir /home/tutorial/logs -# copy training data to every node -scp train.txt-00000 test.txt-00000 [node1IP]:/home/tutorial -scp train.txt-00001 test.txt-00001 [node2IP]:/home/tutorial -scp train.txt-00002 test.txt-00002 [node3IP]:/home/tutorial -# start the job -mpirun -hostfile machines -n 3 /home/tutorial/start_mpi_train.sh -``` - -### Cluster Training Using Kubernetes +## Use different clusters -The details can be found [here](../k8s/k8s_cn.md) + [fabric](fabric_cn.md) + [opemmpi](openmpi_cn.md) + [kubernetes](k8s_cn.md) + [kubernetes distributed](k8s_distributed_cn.md) + [kubernetes on AWS](k8s_aws_en.md) diff --git a/doc/howto/usage/k8s/k8s_aws_en.md b/doc/howto/usage/k8s/k8s_aws_en.md deleted file mode 100644 index ce72b08038..0000000000 --- a/doc/howto/usage/k8s/k8s_aws_en.md +++ /dev/null @@ -1,689 +0,0 @@ - -# Distributed PaddlePaddle Training on AWS with Kubernetes - -We will show you step by step on how to run distributed PaddlePaddle training on AWS cluster with Kubernetes. Let's start from core concepts. - -## Distributed PaddlePaddle Training Core Concepts - -### Distributed Training Job - -A distributed training job is represented by a [Kubernetes job](https://kubernetes.io/docs/user-guide/jobs/#what-is-a-job). - -Each Kuberentes job is described by a job config file, which specifies the information like the number of [pods](https://kubernetes.io/docs/user-guide/pods/#what-is-a-pod) in the job and environment variables. - -In a distributed training job, we would: - -1. prepare partitioned training data and configuration file on a distributed file system (in this tutorial we use Amazon Elastic File System), and -1. create and submit the Kubernetes job config to the Kubernetes cluster to start the training job. - -### Parameter Servers and Trainers - -There are two roles in a PaddlePaddle cluster: *parameter server (pserver)* and *trainer*. Each parameter server process maintains a shard of the global model. Each trainer has its local copy of the model, and uses its local data to update the model. During the training process, trainers send model updates to parameter servers, parameter servers are responsible for aggregating these updates, so that trainers can synchronize their local copy with the global model. - -

![Model is partitioned into two shards. Managed by two parameter servers respectively.](src/pserver_and_trainer.png)
- -In order to communicate with pserver, trainer needs to know the ip address of each pserver. In kubernetes it's better to use a service discovery mechanism (e.g., DNS hostname) rather than static ip address, since any pserver's pod may be killed and a new pod could be schduled onto another node of different ip address. However, now we are using static ip. This will be improved. - -Parameter server and trainer are packaged into a same docker image. They will run once pod is scheduled by kubernetes job. - -### Trainer ID - -Each trainer process requires a trainer ID, a zero-based index value, passed in as a command-line parameter. The trainer process thus reads the data partition indexed by this ID. - -### Training - -The entry-point of a container is a shell script. It can see some environment variables pre-defined by Kubernetes. This includes one that gives the job's identity, which can be used in a remote call to the Kubernetes apiserver that lists all pods in the job. - -We rank each pod by sorting them by their ips. The rank of each pod could be the "pod ID". Because we run one trainer and one parameter server in each pod, we can use this "pod ID" as the trainer ID. A detailed workflow of the entry-point script is as follows: - -1. Query the api server to get pod information, and assign the `trainer_id` by sorting the ip. -1. Copy the training data from EFS persistent volume into container. -1. Parse the `paddle pserver` and `paddle trainer` startup parameters from environment variables, and then start up the processes. -1. Trainer with `train_id` 0 will automatically write results onto EFS volume. - - -## PaddlePaddle on AWS with Kubernetes - -### Choose AWS Service Region -This tutorial requires several AWS services work in the same region. Before we create anything in AWS, please check the following link -https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/ -Choose a region which has the following services available: EC2, EFS, VPS, CloudFormation, KMS, VPC, S3. -In this tutorial, we use "Oregon(us-west-2)" as example. - -### Create AWS Account and IAM Account - -Under each AWS account, we can create multiple [IAM](http://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) users. This allows us to grant some privileges to each IAM user and to create/operate AWS clusters as an IAM user. - -To sign up an AWS account, please -follow -[this guide](http://docs.aws.amazon.com/lambda/latest/dg/setting-up.html). -To create IAM users and user groups under an AWS account, please -follow -[this guide](http://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html). - -Please be aware that this tutorial needs the following privileges for the user in IAM: - -- AmazonEC2FullAccess -- AmazonS3FullAccess -- AmazonRoute53FullAccess -- AmazonRoute53DomainsFullAccess -- AmazonElasticFileSystemFullAccess -- AmazonVPCFullAccess -- IAMUserSSHKeys -- IAMFullAccess -- NetworkAdministrator -- AWSKeyManagementServicePowerUser - - -### Download kube-aws and kubectl - -#### kube-aws - -[kube-aws](https://github.com/coreos/kube-aws) is a CLI tool to automate cluster deployment to AWS. -##### Verify kube-aws integrity -Note: if you are using a non-official release (e.g RC release) kube-aws, you can skip this setp. -Import the CoreOS Application Signing Public Key: - -``` -gpg2 --keyserver pgp.mit.edu --recv-key FC8A365E -``` - -Validate the key fingerprint: - -``` -gpg2 --fingerprint FC8A365E -``` -The correct key fingerprint is `18AD 5014 C99E F7E3 BA5F 6CE9 50BD D3E0 FC8A 365E` - -We can download `kube-aws` from its [release page](https://github.com/coreos/kube-aws/releases). In this tutorial, we use version 0.9.1 - -Validate the tarball's GPG signature: - -``` -PLATFORM=linux-amd64 - # Or -PLATFORM=darwin-amd64 - -gpg2 --verify kube-aws-${PLATFORM}.tar.gz.sig kube-aws-${PLATFORM}.tar.gz -``` -##### Install kube-aws -Extract the binary: - -``` -tar zxvf kube-aws-${PLATFORM}.tar.gz -``` - -Add kube-aws to your path: - -``` -mv ${PLATFORM}/kube-aws /usr/local/bin -``` - - -#### kubectl - -[kubectl](https://kubernetes.io/docs/user-guide/kubectl-overview/) is a command line interface for running commands against Kubernetes clusters. - -Download `kubectl` from the Kubernetes release artifact site with the `curl` tool. - -``` -# OS X -curl -O https://storage.googleapis.com/kubernetes-release/release/"$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)"/bin/darwin/amd64/kubectl - -# Linux -curl -O https://storage.googleapis.com/kubernetes-release/release/"$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)"/bin/linux/amd64/kubectl -``` - -Make the kubectl binary executable and move it to your PATH (e.g. `/usr/local/bin`): - -``` -chmod +x ./kubectl -sudo mv ./kubectl /usr/local/bin/kubectl -``` - -### Configure AWS Credentials - -First check out [this](http://docs.aws.amazon.com/cli/latest/userguide/installing.html) for installing the AWS command line interface. - -And then configure your AWS account information: - -``` -aws configure -``` - - -Fill in the required fields: - - -``` -AWS Access Key ID: YOUR_ACCESS_KEY_ID -AWS Secrete Access Key: YOUR_SECRETE_ACCESS_KEY -Default region name: us-west-2 -Default output format: json -``` - -`YOUR_ACCESS_KEY_ID`, and `YOUR_SECRETE_ACCESS_KEY` is the IAM key and secret from [Create AWS Account and IAM Account](#create-aws-account-and-iam-account) - -Verify that your credentials work by describing any instances you may already have running on your account: - -``` -aws ec2 describe-instances -``` - -### Define Cluster Parameters - -#### EC2 key pair - -The keypair that will authenticate SSH access to your EC2 instances. The public half of this key pair will be configured on each CoreOS node. - -Follow [EC2 Keypair User Guide](http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html) to create a EC2 key pair - -After creating a key pair, you will use the key pair name to configure the cluster. - -Key pairs are only available to EC2 instances in the same region. We are using us-west-2 in our tutorial, so make sure to creat key pairs in that region (Oregon). - -Your browser will download a `key-name.pem` file which is the key to access the EC2 instances. We will use it later. - - -#### KMS key - -Amazon KMS keys are used to encrypt and decrypt cluster TLS assets. If you already have a KMS Key that you would like to use, you can skip creating a new key and provide the Arn string for your existing key. - -You can create a KMS key with the aws command line tool: - -``` -aws kms --region=us-west-2 create-key --description="kube-aws assets" -{ - "KeyMetadata": { - "CreationDate": 1458235139.724, - "KeyState": "Enabled", - "Arn": "arn:aws:kms:us-west-2:aaaaaaaaaaaaa:key/xxxxxxxxxxxxxxxxxxx", - "AWSAccountId": "xxxxxxxxxxxxx", - "Enabled": true, - "KeyUsage": "ENCRYPT_DECRYPT", - "KeyId": "xxxxxxxxx", - "Description": "kube-aws assets" - } -} -``` - -We will need to use the value of `Arn` later. - -And then let's add several inline policies in your IAM user permission. - -Go to [IAM Console](https://console.aws.amazon.com/iam/home?region=us-west-2#/home). Click on button `Users`, click user that we just created, and then click on `Add inline policy` button, and select `Custom Policy`. - -Paste into following inline policies: - -``` - (Caution: node_0, node_1, node_2 directories represents PaddlePaddle node and train_id, not the Kubernetes node){ - "Version": "2012-10-17", - "Statement": [ - { - "Sid": "Stmt1482205552000", - "Effect": "Allow", - "Action": [ - "kms:Decrypt", - "kms:Encrypt" - ], - "Resource": [ - "arn:aws:kms:*:AWS_ACCOUNT_ID:key/*" - ] - }, - { - "Sid": "Stmt1482205746000", - "Effect": "Allow", - "Action": [ - "cloudformation:CreateStack", - "cloudformation:UpdateStack", - "cloudformation:DeleteStack", - "cloudformation:DescribeStacks", - "cloudformation:DescribeStackResource", - "cloudformation:GetTemplate", - "cloudformation:DescribeStackEvents" - ], - "Resource": [ - "arn:aws:cloudformation:us-west-2:AWS_ACCOUNT_ID:stack/MY_CLUSTER_NAME/*" - ] - } - ] -} -``` -`Version` : Its value has to be exactly "2012-10-17". -`AWS_ACCOUNT_ID`: You can get it from following command line: - -``` -aws sts get-caller-identity --output text --query Account -``` - -`MY_CLUSTER_NAME`: Pick a MY_CLUSTER_NAME that you like, you will use it later as well. -Please note, stack name must satisfy regular expression pattern: [a-zA-Z][-a-zA-Z0-9*]*, which means no "_" or "-" in stack name, or kube-aws will throw error in later steps. - -#### External DNS name - -When the cluster is created, the controller will expose the TLS-secured API on a DNS name. - -DNS name should have a CNAME points to cluster DNS name or an A record points to the cluster IP address. - -We will need to use DNS name later in tutorial. If you don't already own one, you can choose any DNS name (e.g., `paddle`) and modify `/etc/hosts` to associate cluster IP with that DNS name for your local machine. And add name service (route53) in aws to associate the IP to paddle for cluster. We will find the cluster IP in later steps. - -#### S3 bucket - -You need to create an S3 bucket before startup the Kubernetes cluster. - -There are some bugs in aws cli in creating S3 bucket, so let's use the [S3 Console](https://console.aws.amazon.com/s3/home?region=us-west-2). - -Click on `Create Bucket`, fill in a unique BUCKET_NAME, and make sure region is us-west-2 (Oregon). - - -#### Initialize Assets - -Create a directory on your local machine to hold the generated assets: - -``` -$ mkdir my-cluster -$ cd my-cluster -``` - -Initialize the cluster CloudFormation stack with the KMS Arn, key pair name, and DNS name from the previous step: - -``` -kube-aws init \ ---cluster-name=MY_CLUSTER_NAME \ ---external-dns-name=MY_EXTERNAL_DNS_NAME \ ---region=us-west-2 \ ---availability-zone=us-west-2a \ ---key-name=KEY_PAIR_NAME \ ---kms-key-arn="arn:aws:kms:us-west-2:xxxxxxxxxx:key/xxxxxxxxxxxxxxxxxxx" -``` - -`MY_CLUSTER_NAME`: the one you picked in [KMS key](#kms-key) - -`MY_EXTERNAL_DNS_NAME`: see [External DNS name](#external-dns-name) - -`KEY_PAIR_NAME`: see [EC2 key pair](#ec2-key-pair) - -`--kms-key-arn`: the "Arn" in [KMS key](#kms-key) - -Here `us-west-2a` is used for parameter `--availability-zone`, but supported availability zone varies among AWS accounts. - -Please check if `us-west-2a` is supported by `aws ec2 --region us-west-2 describe-availability-zones`, if not switch to other supported availability zone. (e.g., `us-west-2a`, or `us-west-2b`) - - -There will now be a cluster.yaml file in the asset directory. This is the main configuration file for your cluster. - -By default `kube-aws` will only create one worker node. Let's edit `cluster.yaml` and change `workerCount` from 1 to 3. - - -#### Render contents of the asset directory - -In the simplest case, you can have kube-aws generate both your TLS identities and certificate authority for you. - -``` -kube-aws render credentials --generate-ca -``` - -The next command generates the default set of cluster assets in your asset directory. - -``` -kube-aws render stack -``` -Assets (templates and credentials) that are used to create, update and interact with your Kubernetes cluster will be created under your current folder. - - -### Kubernetes Cluster Start Up - -#### Create the instances defined in the CloudFormation template - -Now let's create your cluster (choose any `PREFIX` for the command below): - -``` -kube-aws up --s3-uri s3://BUCKET_NAME/PREFIX -``` - -`BUCKET_NAME`: the bucket name that you used in [S3 bucket](#s3-bucket) - - -#### Configure DNS - -You can invoke `kube-aws status` to get the cluster API endpoint after cluster creation. - -``` -$ kube-aws status -Cluster Name: paddle-cluster -Controller DNS Name: paddle-cl-ElbAPISe-EEOI3EZPR86C-531251350.us-west-2.elb.amazonaws.com -``` - -If you own a DNS name, set the A record to any of the above ip. __Or__ you can set up CNAME point to `Controller DNS Name` (`paddle-cl-ElbAPISe-EEOI3EZPR86C-531251350.us-west-2.elb.amazonaws.com`) - -##### Find IP address - -Use command `dig` to check the load balancer hostname to get the ip address. - -``` -$ dig paddle-cl-ElbAPISe-EEOI3EZPR86C-531251350.us-west-2.elb.amazonaws.com - -;; QUESTION SECTION: -;paddle-cl-ElbAPISe-EEOI3EZPR86C-531251350.us-west-2.elb.amazonaws.com. IN A - -;; ANSWER SECTION: -paddle-cl-ElbAPISe-EEOI3EZPR86C-531251350.us-west-2.elb.amazonaws.com. 59 IN A 54.241.164.52 -paddle-cl-ElbAPISe-EEOI3EZPR86C-531251350.us-west-2.elb.amazonaws.com. 59 IN A 54.67.102.112 -``` - -In the above output, both ip `54.241.164.52`, `54.67.102.112` will work. - -*If you own a DNS name*, set the A record to any of the above ip. Then you can skip to the step "Access the cluster". - -*If you do not own a DNS name*: -##### Update local DNS association -Edit `/etc/hosts` to associate above ip with the DNS name. -##### Add Route53 private name service in VPC - - Open [Route53 Console](https://console.aws.amazon.com/route53/home) - - Create hosted zone with following config - - Domain name: "paddle" - - Type: "Private hosted zone for amazon VPC" - - VPC ID: `` - - ![route53 zone setting](src/route53_create_zone.png) - - Add A record - - Click on the zone "paddle" just created - - Click the button "Create record set" - - Name : leave blank - - type: "A" - - Value: `` - - ![route53 create recordset](src/route53_create_recordset.png) - - Verify name service - - Connect to any instance created by kube-aws via ssh - - Run command "host paddle", see if the ip returned is the private ip of kube-controller - -#### Access the cluster - -Once the API server is running, you should see: - -``` -$ kubectl --kubeconfig=kubeconfig get nodes -NAME STATUS AGE -ip-10-0-0-134.us-west-2.compute.internal Ready 6m -ip-10-0-0-238.us-west-2.compute.internal Ready 6m -ip-10-0-0-50.us-west-2.compute.internal Ready 6m -ip-10-0-0-55.us-west-2.compute.internal Ready 6m -``` - - -### Setup Elastic File System for Cluster - -Training data is usually served on a distributed filesystem, we use Elastic File System (EFS) on AWS. - -1. Create security group for EFS in [security group console](https://us-west-2.console.aws.amazon.com/ec2/v2/home?region=us-west-2#SecurityGroups:sort=groupId) - 1. Look up security group id for `paddle-cluster-sg-worker` (`sg-055ee37d` in the image below) -
![](src/worker_security_group.png)
- 2. Add security group `paddle-efs` with `ALL TCP` inbound rule and custom source as group id of `paddle-cluster-sg-worker`. And VPC of `paddle-cluster-vpc`. Make sure availability zone is same as the one you used in [Initialize Assets](#initialize-assets). -
![](src/add_security_group.png)
- -2. Create the Elastic File System in [EFS console](https://us-west-2.console.aws.amazon.com/efs/home?region=us-west-2#/wizard/1) with `paddle-cluster-vpc` VPC. Make sure subnet is `paddle-cluster-Subnet0` andd security group is `paddle-efs`. -
![](src/create_efs.png)
- - -### Start PaddlePaddle Training Demo on AWS - -#### Configure Kubernetes Volume that Points to EFS - -First we need to create a [PersistentVolume](https://kubernetes.io/docs/user-guide/persistent-volumes/) to provision EFS volumn. - -Save following snippet as `pv.yaml` -``` -apiVersion: v1 -kind: PersistentVolume -metadata: - name: efsvol -spec: - capacity: - storage: 100Gi - accessModes: - - ReadWriteMany - nfs: - server: EFS_DNS_NAME - path: "/" -``` - -`EFS_DNS_NAME`: DNS name as shown in description of `paddle-efs` that we created. Looks similar to `fs-2cbf7385.efs.us-west-2.amazonaws.com` - -Run following command to create a persistent volumn: -``` -kubectl --kubeconfig=kubeconfig create -f pv.yaml -``` - -Next let's create a [PersistentVolumeClaim](https://kubernetes.io/docs/user-guide/persistent-volumes/) to claim the persistent volume. - -Save following snippet as `pvc.yaml`. -``` -kind: PersistentVolumeClaim -apiVersion: v1 -metadata: - name: efsvol -spec: - accessModes: - - ReadWriteMany - resources: - requests: - storage: 50Gi -``` - -Run following command to create a persistent volumn claim: -``` -kubectl --kubeconfig=kubeconfig create -f pvc.yaml -``` - -#### Prepare Training Data - -We will now launch a kubernetes job that downloads, saves and evenly splits training data into 3 shards on the persistent volumn that we just created. - -save following snippet as `paddle-data-job.yaml` -``` -apiVersion: batch/v1 -kind: Job -metadata: - name: paddle-data -spec: - template: - metadata: - name: pi - spec: - containers: - - name: paddle-data - image: paddledev/paddle-tutorial:k8s_data - imagePullPolicy: Always - volumeMounts: - - mountPath: "/efs" - name: efs - env: - - name: OUT_DIR - value: /efs/paddle-cluster-job - - name: SPLIT_COUNT - value: "3" - volumes: - - name: efs - persistentVolumeClaim: - claimName: efsvol - restartPolicy: Never -``` - -Run following command to launch the job: -``` -kubectl --kubeconfig=kubeconfig create -f paddle-data-job.yaml -``` - -Job may take 7 min to finish, use following command to check job status. Do not proceed until `SUCCESSFUL` for `paddle-data` job is `1` -``` -$ kubectl --kubeconfig=kubeconfig get jobs -NAME DESIRED SUCCESSFUL AGE -paddle-data 1 1 6m -``` - -Data preparation is done by docker image `paddledev/paddle-tutorial:k8s_data`, see [here](src/k8s_data/README.md) for how to build this docker image and source code. - -#### Start Training - -Now we are ready to start paddle training job. Save following snippet as `paddle-cluster-job.yaml` -``` -apiVersion: batch/v1 -kind: Job -metadata: - name: paddle-cluster-job -spec: - parallelism: 3 - completions: 3 - template: - metadata: - name: paddle-cluster-job - spec: - volumes: - - name: efs - persistentVolumeClaim: - claimName: efsvol - containers: - - name: trainer - image: paddledev/paddle-tutorial:k8s_train - command: ["bin/bash", "-c", "/root/start.sh"] - env: - - name: JOB_NAME - value: paddle-cluster-job - - name: JOB_PATH - value: /home/jobpath - - name: JOB_NAMESPACE - value: default - - name: TRAIN_CONFIG_DIR - value: quick_start - - name: CONF_PADDLE_NIC - value: eth0 - - name: CONF_PADDLE_PORT - value: "7164" - - name: CONF_PADDLE_PORTS_NUM - value: "2" - - name: CONF_PADDLE_PORTS_NUM_SPARSE - value: "2" - - name: CONF_PADDLE_GRADIENT_NUM - value: "3" - - name: TRAINER_COUNT - value: "3" - volumeMounts: - - mountPath: "/home/jobpath" - name: efs - ports: - - name: jobport0 - hostPort: 7164 - containerPort: 7164 - - name: jobport1 - hostPort: 7165 - containerPort: 7165 - - name: jobport2 - hostPort: 7166 - containerPort: 7166 - - name: jobport3 - hostPort: 7167 - containerPort: 7167 - restartPolicy: Never -``` - -`parallelism: 3, completions: 3` means this job will simultaneously start 3 PaddlePaddle pods, and this job will be finished when there are 3 finished pods. - -`env` field represents container's environment variables, we specify PaddlePaddle parameters by environment variables. - -`ports` indicates that TCP port 7164 - 7167 are exposed for communication between `pserver` ans trainer. port starts continously from `CONF_PADDLE_PORT` (7164) to `CONF_PADDLE_PORT + CONF_PADDLE_PORTS_NUM + CONF_PADDLE_PORTS_NUM_SPARSE - 1` (7167). We use multiple ports for dense and sparse paramter updates to improve latency. - -Run following command to launch the job. -``` -kubectl --kubeconfig=kubeconfig create -f paddle-claster-job.yaml -``` - -Inspect individual pods - -``` -$ kubectl --kubeconfig=kubeconfig get pods -NAME READY STATUS RESTARTS AGE -paddle-cluster-job-cm469 1/1 Running 0 9m -paddle-cluster-job-fnt03 1/1 Running 0 9m -paddle-cluster-job-jx4xr 1/1 Running 0 9m -``` - -Inspect individual console output -``` -kubectl --kubeconfig=kubeconfig log -f POD_NAME -``` - -`POD_NAME`: name of any pod (e.g., `paddle-cluster-job-cm469`). - -Run `kubectl --kubeconfig=kubeconfig describe job paddle-cluster-job` to check training job status. It will complete in around 20 minutes. - -The details for start `pserver` and `trainer` are hidden inside docker image `paddledev/paddle-tutorial:k8s_train`, see [here](src/k8s_train/README.md) for how to build the docker image and source code. - -#### Inspect Training Output - -Training output (model snapshot and logs) will be saved in EFS. We can ssh into worker EC2 instance, mount EFS and check training output. - -1. ssh Into Worker EC2 instance -``` -chmod 400 key-name.pem -ssh -i key-name.pem core@INSTANCE_IP -``` - -`INSTANCE_IP`: public IP address of EC2 kubernetes worker node. Go to [EC2 console](https://us-west-2.console.aws.amazon.com/ec2/v2/home?region=us-west-2#Instances:sort=instanceId) and check `public IP` of any `paddle-cluster-kube-aws-worker` instance. - -2. Mount EFS -``` -mkdir efs -sudo mount -t nfs4 -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2 EFS_DNS_NAME:/ efs -``` - -`EFS_DNS_NAME`: DNS name as shown in description of `paddle-efs` that we created. Look similar to `fs-2cbf7385.efs.us-west-2.amazonaws.com`. - -Now folder `efs` will have structure similar to: -``` --- paddle-cluster-job - |-- ... - |-- output - | |-- node_0 - | | |-- server.log - | | `-- train.log - | |-- node_1 - | | |-- server.log - | | `-- train.log - | |-- node_2 - | | |-- server.log - | | `-- train.log - | |-- pass-00000 - | | |-- ___fc_layer_0__.w0 - | | |-- ___fc_layer_0__.wbias - | | |-- done - | | |-- path.txt - | | `-- trainer_config.lr.py - | |-- pass-00001... -``` -`server.log` contains log for `pserver`. `train.log` contains log for `trainer`. Model description and snapshot is stored in `pass-0000*`. - -### Kubernetes Cluster Tear Down - -#### Delete EFS - -Go to [EFS Console](https://us-west-2.console.aws.amazon.com/efs/home?region=us-west-2) and delete the EFS volumn that we created. - -#### Delete security group - -Go to [Security Group Console](https://us-west-2.console.aws.amazon.com/ec2/v2/home?region=us-west-2#SecurityGroups:sort=groupId) and delete security group `paddle-efs`. - - -#### Delete S3 Bucket - -Go to [S3 Console](https://console.aws.amazon.com/s3/home?region=us-west-2#) and delete the S3 bucket that we created. - -#### Destroy Cluster - -``` -kube-aws destroy -``` - -The command will return immediately, but it might take 5 min to tear down the whole cluster. - -You can go to [CludFormation Console](https://us-west-2.console.aws.amazon.com/cloudformation/home?region=us-west-2#/stacks?filter=active) to check destroy process. diff --git a/doc/howto/usage/k8s/k8s_cn.md b/doc/howto/usage/k8s/k8s_cn.md deleted file mode 100644 index ab07cb9cd5..0000000000 --- a/doc/howto/usage/k8s/k8s_cn.md +++ /dev/null @@ -1,205 +0,0 @@ -# Kubernetes单机训练 - -在这篇文档里,我们介绍如何在 Kubernetes 集群上启动一个单机使用CPU的Paddle训练作业。在下一篇中,我们将介绍如何启动分布式训练作业。 - -## 制作Docker镜像 - -在一个功能齐全的Kubernetes机群里,通常我们会安装Ceph等分布式文件系统来存储训练数据。这样的话,一个分布式Paddle训练任务中的每个进程都可以从Ceph读取数据。在这个例子里,我们只演示一个单机作业,所以可以简化对环境的要求,把训练数据直接放在 -Paddle的Docker image里。为此,我们需要制作一个包含训练数据的Paddle镜像。 - -Paddle 的 [Quick Start Tutorial](http://www.paddlepaddle.org/doc/demo/quick_start/index_en.html) -里介绍了用Paddle源码中的脚本下载训练数据的过程。 -而 `paddledev/paddle:cpu-demo-latest` 镜像里有 Paddle 源码与demo,( 请注意,默认的 -Paddle镜像 `paddledev/paddle:cpu-latest` 是不包括源码的, Paddle的各版本镜像可以参考 [Docker installation guide](http://www.paddlepaddle.org/doc/build/docker_install.html) ),所以我们使用这个镜像来下载训练数据到Docker container中,然后把这个包含了训练数据的container保存为一个新的镜像。 - -### 运行容器 - -``` -$ docker run --name quick_start_data -it paddledev/paddle:cpu-demo-latest -``` - -### 下载数据 - -进入容器`/root/paddle/demo/quick_start/data`目录,使用`get_data.sh`下载数据 - -``` -$ root@fbd1f2bb71f4:~/paddle/demo/quick_start/data# ./get_data.sh - -Downloading Amazon Electronics reviews data... ---2016-10-31 01:33:43-- http://snap.stanford.edu/data/amazon/productGraph/categoryFiles/reviews_Electronics_5.json.gz -Resolving snap.stanford.edu (snap.stanford.edu)... 171.64.75.80 -Connecting to snap.stanford.edu (snap.stanford.edu)|171.64.75.80|:80... connected. -HTTP request sent, awaiting response... 200 OK -Length: 495854086 (473M) [application/x-gzip] -Saving to: 'reviews_Electronics_5.json.gz' - - 10% [=======> ] 874,279 64.7KB/s eta 2h 13m - -``` - -### 修改启动脚本 - -下载完数据后,修改`/root/paddle/demo/quick_start/train.sh`文件,内容如下(增加了一条cd命令) -``` -set -e -cd /root/paddle/demo/quick_start -cfg=trainer_config.lr.py -#cfg=trainer_config.emb.py -#cfg=trainer_config.cnn.py -#cfg=trainer_config.lstm.py -#cfg=trainer_config.bidi-lstm.py -#cfg=trainer_config.db-lstm.py -paddle train \ - --config=$cfg \ - --save_dir=./output \ - --trainer_count=4 \ - --log_period=20 \ - --num_passes=15 \ - --use_gpu=false \ - --show_parameter_stats_period=100 \ - --test_all_data_in_one_period=1 \ - 2>&1 | tee 'train.log' -``` - -### 提交镜像 - -修改启动脚本后,退出容器,使用`docker commit`命令创建新镜像。 - -``` -$ docker commit quick_start_data mypaddle/paddle:quickstart -``` - -## 使用 Kubernetes 进行训练 - ->针对任务运行完成后容器自动退出的场景,Kubernetes有Job类型的资源来支持。下文就是用Job类型的资源来进行训练。 - -### 编写yaml文件 - -在训练时,输出结果可能会随着容器的消耗而被删除,需要在创建容器前挂载卷以便我们保存训练结果。使用我们之前构造的镜像,可以创建一个 [Kubernetes Job](http://kubernetes.io/docs/user-guide/jobs/#what-is-a-job),简单的yaml文件如下: - -``` -apiVersion: batch/v1 -kind: Job -metadata: - name: quickstart -spec: - parallelism: 1 - completions: 1 - template: - metadata: - name: quickstart - spec: - volumes: - - name: output - hostPath: - path: /home/work/paddle_output - containers: - - name: pi - image: mypaddle/paddle:quickstart - command: ["bin/bash", "-c", "/root/paddle/demo/quick_start/train.sh"] - volumeMounts: - - name: output - mountPath: /root/paddle/demo/quick_start/output - restartPolicy: Never -``` - -### 创建Paddle Job - -使用上文创建的yaml文件创建Kubernetes Job,命令为: - -``` -$ kubectl create -f paddle.yaml -``` - -查看job的详细情况: - -``` -$ kubectl get job -NAME DESIRED SUCCESSFUL AGE -quickstart 1 0 58s - -$ kubectl describe job quickstart -Name: quickstart -Namespace: default -Image(s): registry.baidu.com/public/paddle:cpu-demo-latest -Selector: controller-uid=f120da72-9f18-11e6-b363-448a5b355b84 -Parallelism: 1 -Completions: 1 -Start Time: Mon, 31 Oct 2016 11:20:16 +0800 -Labels: controller-uid=f120da72-9f18-11e6-b363-448a5b355b84,job-name=quickstart -Pods Statuses: 0 Running / 1 Succeeded / 0 Failed -Volumes: - output: - Type: HostPath (bare host directory volume) - Path: /home/work/paddle_output -Events: - FirstSeen LastSeen Count From SubobjectPath Type Reason Message - --------- -------- ----- ---- ------------- -------- ------ ------- - 1m 1m 1 {job-controller } Normal SuccessfulCreate Created pod: quickstart-fa0wx -``` - -### 查看训练结果 - -根据Job对应的Pod信息,可以查看此Pod运行的宿主机。 - -``` -kubectl describe pod quickstart-fa0wx -Name: quickstart-fa0wx -Namespace: default -Node: paddle-demo-let02/10.206.202.44 -Start Time: Mon, 31 Oct 2016 11:20:17 +0800 -Labels: controller-uid=f120da72-9f18-11e6-b363-448a5b355b84,job-name=quickstart -Status: Succeeded -IP: 10.0.0.9 -Controllers: Job/quickstart -Containers: - quickstart: - Container ID: docker://b8561f5c79193550d64fa47418a9e67ebdd71546186e840f88de5026b8097465 - Image: registry.baidu.com/public/paddle:cpu-demo-latest - Image ID: docker://18e457ce3d362ff5f3febf8e7f85ffec852f70f3b629add10aed84f930a68750 - Port: - Command: - bin/bash - -c - /root/paddle/demo/quick_start/train.sh - QoS Tier: - cpu: BestEffort - memory: BestEffort - State: Terminated - Reason: Completed - Exit Code: 0 - Started: Mon, 31 Oct 2016 11:20:20 +0800 - Finished: Mon, 31 Oct 2016 11:21:46 +0800 - Ready: False - Restart Count: 0 - Environment Variables: -Conditions: - Type Status - Ready False -Volumes: - output: - Type: HostPath (bare host directory volume) - Path: /home/work/paddle_output -``` - -我们还可以登录到宿主机上查看训练结果。 - -``` -[root@paddle-demo-let02 paddle_output]# ll -total 60 -drwxr-xr-x 2 root root 4096 Oct 31 11:20 pass-00000 -drwxr-xr-x 2 root root 4096 Oct 31 11:20 pass-00001 -drwxr-xr-x 2 root root 4096 Oct 31 11:21 pass-00002 -drwxr-xr-x 2 root root 4096 Oct 31 11:21 pass-00003 -drwxr-xr-x 2 root root 4096 Oct 31 11:21 pass-00004 -drwxr-xr-x 2 root root 4096 Oct 31 11:21 pass-00005 -drwxr-xr-x 2 root root 4096 Oct 31 11:21 pass-00006 -drwxr-xr-x 2 root root 4096 Oct 31 11:21 pass-00007 -drwxr-xr-x 2 root root 4096 Oct 31 11:21 pass-00008 -drwxr-xr-x 2 root root 4096 Oct 31 11:21 pass-00009 -drwxr-xr-x 2 root root 4096 Oct 31 11:21 pass-00010 -drwxr-xr-x 2 root root 4096 Oct 31 11:21 pass-00011 -drwxr-xr-x 2 root root 4096 Oct 31 11:21 pass-00012 -drwxr-xr-x 2 root root 4096 Oct 31 11:21 pass-00013 -drwxr-xr-x 2 root root 4096 Oct 31 11:21 pass-00014 -``` diff --git a/doc/howto/usage/k8s/k8s_distributed_cn.md b/doc/howto/usage/k8s/k8s_distributed_cn.md deleted file mode 100644 index a9bebf0955..0000000000 --- a/doc/howto/usage/k8s/k8s_distributed_cn.md +++ /dev/null @@ -1,315 +0,0 @@ -# Kubernetes分布式训练 - -前一篇文章介绍了如何在Kubernetes集群上启动一个单机PaddlePaddle训练作业 (Job)。在这篇文章里,我们介绍如何在Kubernetes集群上进行分布式PaddlePaddle训练作业。关于PaddlePaddle的分布式训练,文章 [Cluster Training](https://github.com/baidu/Paddle/blob/develop/doc/cluster/opensource/cluster_train.md)介绍了一种通过SSH远程分发任务,进行分布式训练的方法,与此不同的是,本文将介绍在Kubernetes容器管理平台上快速构建PaddlePaddle容器集群,进行分布式训练的方案。 - -有关Kubernetes相关概念以及如何搭建和配置Kubernetes集群,可以参考[k8s_basis](./k8s_basis_cn.md)。 - -## 整体方案 - -在训练之前,用户将配置与训练数据切分好放在分布式文件系统预先分配好的目录中(不同的分布式文件系统,需要使用其制定的方式挂载后并导入数据),训练时,程序从此目录拷贝文件到容器内进行训练,将结果保存到此目录里。整体的结构图如下: - -![paddle on kubernetes结构图](src/k8s-paddle-arch.png) - -上图描述了一个3节点的分布式训练场景,在每个Pod上都通过volume方式挂载分布式文件系统的一个目录用于保存训练数据和输出结果。Kubernetes为这次训练创建了3个pod并且调度到了3个node上运行,每个pod包含一个PaddlePaddle容器。在容器创建后,会启动pserver与trainer进程,读取volume中的数据进行这次分布式训练。 - -根据前文的描述,要在已有的Kubernetes集群上进行PaddlePaddle的分布式训练,按照下面步骤即可: - -1. [制作PaddlePaddle镜像](#制作镜像) -1. [将训练文件与切分好的数据上传到共享存储](#上传训练文件) -1. [编写本次训练的YAML文件,创建一个Kubernetes job](#创建Job) -1. [训练结束后查看输出结果](#查看输出) - -下面就根据这几个步骤分别介绍。 - -### 制作镜像 - -PaddlePaddle镜像需要提供`paddle pserver`与`paddle train`进程的运行环境,用这个镜像创建的容器需要有以下两个功能: - -- 拷贝训练文件到容器内 -- 生成`paddle pserver`与`paddle train`进程的启动参数,并且启动训练 - -因为官方镜像 `paddledev/paddle:cpu-latest` 内已经包含PaddlePaddle的执行程序但是还没上述功能,所以我们可以在这个基础上,添加启动脚本,制作新镜像来完成以上的工作。参考镜像的[*Dockerfile*](https://github.com/PaddlePaddle/Paddle/blob/develop/doc/howto/usage/cluster/k8s/src/k8s_train/Dockerfile)。 - -```bash -$ cd doc/howto/usage/k8s/src/k8s_train -$ docker build -t [YOUR_REPO]/paddle:mypaddle . -``` - -然后将构建成功的镜像上传到镜像仓库。 - -```bash -docker push [YOUR_REPO]/paddle:mypaddle -``` - -注意上述命令中`[YOUR_REPO]`表示读者所使用的Docker镜像仓库地址,读者需要替换成自己使用的仓库地址。下文使用`[YOUR_REPO]/paddle:mypaddle`这个地址来表示此步骤所构建出的镜像。 - -### 准备训练数据 - -这里我们通过在Kubernetes集群上启动一个Job来下载并切割数据,也可以通过修改[k8s_train](./src/k8s_train/README.md)的内容来定制image. - -在启动Job之前,需要根据不同的分布式存储来绑定一个[persistentVolumeClaim](https://kubernetes.io/docs/user-guide/persistent-volumes/),生成的数据将会存储在这个volume下. - -```yaml -apiVersion: batch/v1 -kind: Job -metadata: - name: paddle-data -spec: - template: - metadata: - name: pi - spec: - hostNetwork: true - containers: - - name: paddle-data - image: paddledev/paddle-tutorial:k8s_data - imagePullPolicy: Always - volumeMounts: - - mountPath: "/mnt" - name: nfs - env: - - name: OUT_DIR - value: /home/work/mfs/paddle-cluster-job - - name: SPLIT_COUNT - value: "3" - volumes: - - name: nfs - persistentVolumeClaim: - claimName: mfs - restartPolicy: Never -``` - -完成后volume中的文件内容大致如下: -```base -[root@paddle-kubernetes-node0 nfsdir]$ tree -d -. -`-- paddle-cluster-job - |-- 0 - | `-- data - |-- 1 - | `-- data - |-- 2 - | `-- data - |-- output - |-- quick_start -``` - -目录中paddle-cluster-job是本次训练对应的job name,本次训练要求有3个PaddlePaddle节点,在paddle-cluster-job/data目录中存放切分好的数据,文件夹0,1,2分别代表3个节点的trainer_id。recommendation文件夹内存放训练文件,output文件夹存放训练结果与日志。 - -### 创建Job - -Kubernetes可以通过YAML文件来创建相关对象,然后可以使用命令行工具创建job。 - -Job YAML文件描述了这次训练使用的Docker镜像,需要启动的节点个数以及 `paddle pserver`与 `paddle train`进程启动的必要参数,也描述了容器需要使用的存储卷挂载的情况。YAML文件中各个字段的具体含义,可以查看[Kubernetes Job API](http://kubernetes.io/docs/api-reference/batch/v1/definitions/#_v1_job)。例如,本次训练的YAML文件可以写成: - -```yaml -apiVersion: batch/v1 -kind: Job -metadata: - name: paddle-cluster-job -spec: - parallelism: 3 - completions: 3 - template: - metadata: - name: paddle-cluster-job - spec: - volumes: - - name: jobpath - hostPath: - path: /home/work/mfs - containers: - - name: trainer - image: [YOUR_REPO]/paddle:mypaddle - command: ["bin/bash", "-c", "/root/start.sh"] - env: - - name: JOB_NAME - value: paddle-cluster-job - - name: JOB_PATH - value: /home/jobpath - - name: JOB_NAMESPACE - value: default - - name: TRAIN_CONFIG_DIR - value: recommendation - - name: CONF_PADDLE_NIC - value: eth0 - - name: CONF_PADDLE_PORT - value: "7164" - - name: CONF_PADDLE_PORTS_NUM - value: "2" - - name: CONF_PADDLE_PORTS_NUM_SPARSE - value: "2" - - name: CONF_PADDLE_GRADIENT_NUM - value: "3" - volumeMounts: - - name: jobpath - mountPath: /home/jobpath - restartPolicy: Never -``` - -文件中,`metadata`下的`name`表示这个job的名字。`parallelism,completions`字段表示这个job会同时开启3个PaddlePaddle节点,成功训练且退出的pod数目为3时,这个job才算成功结束。然后申明一个存储卷`jobpath`,代表宿主机目录`/home/work/mfs`,在对容器的描述`containers`字段中,将此目录挂载为容器的`/home/jobpath`目录,这样容器的`/home/jobpath`目录就成为了共享存储,放在这个目录里的文件其实是保存到了MFS上。 - -`env`字段表示容器的环境变量,我们将`paddle`运行的一些参数通过这种方式传递到容器内。 - -环境变量 | 说明 ---- | --- -JOB_PATH | 共享存储挂在的路径 -JOB_NAME | Job的名字 -TRAIN_CONFIG_DIR | 本次训练文件所在目录,与JOB_PATH,JOB_NAME组合可以找到本次训练需要的文件路径 -CONF_PADDLE_NIC | `paddle pserver`进程需要的`--nics`参数,即网卡名 -CONF_PADDLE_PORT | `paddle paserver`的`--port`参数 -CONF_PADDLE_PORTS_NUM | 稠密更新的端口数量,即`--ports_num`参数 -CONF_PADDLE_PORTS_NUM_SPARSE | 稀疏更新的端口数量,即`--ports_num_for_sparse`参数 -CONF_PADDLE_GRADIENT_NUM | 训练节点数量,即`--num_gradient_servers参数` - -这些参数的具体描述,读者可以查看[这里](http://www.paddlepaddle.org/doc/ui/cmd_argument/detail_introduction.html#parameter-server-and-distributed-communication)。 - -编写完YAML文件后,可以使用Kubernetes的命令行工具创建job。 - -```bash -kubectl create -f job.yaml -``` - -创建成功后,Kubernetes就会创建3个pod作为PaddlePaddle节点然后拉取镜像,启动容器开始训练。 - - -### 查看输出 - -在训练过程中,可以在共享存储上查看输出的日志和模型,例如output目录下就存放了输出结果。注意node_0,node_1,node_2这几个目录表示PaddlePaddle节点与trainer_id,并不是Kubernetes中的node概念。 - -```bash -[root@paddle-kubernetes-node0 output]# tree -d -. -├── node_0 -│   ├── server.log -│   └── train.log -├── node_1 -│   ├── server.log -│   └── train.log -├── node_2 -...... -├── pass-00002 -│   ├── done -│   ├── ___embedding_0__.w0 -│   ├── ___embedding_1__.w0 -...... -``` - -我们可以通过日志查看容器训练的情况,例如: - -```bash -[root@paddle-kubernetes-node0 node_0]# cat train.log -I1116 09:10:17.123121 50 Util.cpp:155] commandline: - /usr/local/bin/../opt/paddle/bin/paddle_trainer - --nics=eth0 --port=7164 - --ports_num=2 --comment=paddle_process_by_paddle - --pservers=192.168.129.66,192.168.223.143,192.168.129.71 - --ports_num_for_sparse=2 --config=./trainer_config.py - --trainer_count=4 --num_passes=10 --use_gpu=0 - --log_period=50 --dot_period=10 --saving_period=1 - --local=0 --trainer_id=0 - --save_dir=/home/jobpath/paddle-cluster-job/output -I1116 09:10:17.123440 50 Util.cpp:130] Calling runInitFunctions -I1116 09:10:17.123764 50 Util.cpp:143] Call runInitFunctions done. -[WARNING 2016-11-16 09:10:17,227 default_decorators.py:40] please use keyword arguments in paddle config. -[INFO 2016-11-16 09:10:17,239 networks.py:1282] The input order is [movie_id, title, genres, user_id, gender, age, occupation, rating] -[INFO 2016-11-16 09:10:17,239 networks.py:1289] The output order is [__square_error_cost_0__] -I1116 09:10:17.392917 50 Trainer.cpp:170] trainer mode: Normal -I1116 09:10:17.613910 50 PyDataProvider2.cpp:257] loading dataprovider dataprovider::process -I1116 09:10:17.680917 50 PyDataProvider2.cpp:257] loading dataprovider dataprovider::process -I1116 09:10:17.681543 50 GradientMachine.cpp:134] Initing parameters.. -I1116 09:10:18.012390 50 GradientMachine.cpp:141] Init parameters done. -I1116 09:10:18.018641 50 ParameterClient2.cpp:122] pserver 0 192.168.129.66:7164 -I1116 09:10:18.018950 50 ParameterClient2.cpp:122] pserver 1 192.168.129.66:7165 -I1116 09:10:18.019069 50 ParameterClient2.cpp:122] pserver 2 192.168.223.143:7164 -I1116 09:10:18.019492 50 ParameterClient2.cpp:122] pserver 3 192.168.223.143:7165 -I1116 09:10:18.019716 50 ParameterClient2.cpp:122] pserver 4 192.168.129.71:7164 -I1116 09:10:18.019836 50 ParameterClient2.cpp:122] pserver 5 192.168.129.71:7165 -``` - - -## 一些细节的补充 - -### 使用环境变量 - -使用容器方式运行训练任务的Kubernetes Job,通常会使用环境变量配置Job的配置信息`start_paddle.py`提供了一个启动脚本,将环境变量转换成paddle的命令行参数: -``` -API = "/api/v1/namespaces/" -JOBSELECTOR = "labelSelector=job-name=" -JOB_PATH = os.getenv("JOB_PATH") + "/" + os.getenv("JOB_NAME") -JOB_PATH_OUTPUT = JOB_PATH + "/output" -JOBNAME = os.getenv("JOB_NAME") -NAMESPACE = os.getenv("JOB_NAMESPACE") -PADDLE_NIC = os.getenv("CONF_PADDLE_NIC") -PADDLE_PORT = os.getenv("CONF_PADDLE_PORT") -PADDLE_PORTS_NUM = os.getenv("CONF_PADDLE_PORTS_NUM") -PADDLE_PORTS_NUM_SPARSE = os.getenv("CONF_PADDLE_PORTS_NUM_SPARSE") -PADDLE_SERVER_NUM = os.getenv("CONF_PADDLE_GRADIENT_NUM") -``` - -### Pod间通信 -`start_paddle.py`脚本开始时,会先进行参数的初始化与解析。 - -```python -parser = argparse.ArgumentParser(prog="start_paddle.py", - description='simple tool for k8s') - args, train_args_list = parser.parse_known_args() - train_args = refine_unknown_args(train_args_list) - train_args_dict = dict(zip(train_args[:-1:2], train_args[1::2])) - podlist = getPodList() -``` - -然后通过函数`getPodList()`访问Kubernetes的接口来查询此job对应的所有pod信息。当所有pod都处于running状态(容器运行都运行)时,再通过函数`getIdMap(podlist)`获取trainer_id。 - -```python - podlist = getPodList() - # need to wait until all pods are running - while not isPodAllRunning(podlist): - time.sleep(10) - podlist = getPodList() - idMap = getIdMap(podlist) -``` -* *注意*: `getPodList()`会获取当前namespace下的所有pod,如果已经有pod运行,可能会导致出错。这种集群节点管理方式会在将来使用[statfulsets](https://kubernetes.io/docs/concepts/abstractions/controllers/statefulsets/)代替。 - -在函数`getIdMap(podlist)`内部,我们通过读取`podlist`中每个pod的IP地址,将IP排序生成的序号作为trainer_id。 - -```python -def getIdMap(podlist): - ''' - generate tainer_id by ip - ''' - ips = [] - for pod in podlist["items"]: - ips.append(pod["status"]["podIP"]) - ips.sort() - idMap = {} - for i in range(len(ips)): - idMap[ips[i]] = i - return idMap -``` - -在得到`idMap`后,通过函数`startPaddle(idMap, train_args_dict)`构造`paddle pserver`与`paddle train`的启动参数并执行进程。 - -### 启动任务 - -在函数`startPaddle`中,最主要的工作就是解析出`paddle pserver`与`paddle train`的启动参数。例如`paddle train`参数的解析,解析环境变量得到`PADDLE_NIC`,`PADDLE_PORT`,`PADDLE_PORTS_NUM`等参数,然后通过自身的IP地址在`idMap`中获取`trainerId`。 - -```python - program = 'paddle train' - args = " --nics=" + PADDLE_NIC - args += " --port=" + str(PADDLE_PORT) - args += " --ports_num=" + str(PADDLE_PORTS_NUM) - args += " --comment=" + "paddle_process_by_paddle" - ip_string = "" - for ip in idMap.keys(): - ip_string += (ip + ",") - ip_string = ip_string.rstrip(",") - args += " --pservers=" + ip_string - args_ext = "" - for key, value in train_args_dict.items(): - args_ext += (' --' + key + '=' + value) - localIP = socket.gethostbyname(socket.gethostname()) - trainerId = idMap[localIP] - args += " " + args_ext + " --trainer_id=" + \ - str(trainerId) + " --save_dir=" + JOB_PATH_OUTPUT -``` diff --git a/doc/howto/usage/k8s/k8s_en.md b/doc/howto/usage/k8s/k8s_en.md deleted file mode 100644 index 0c3ab05b70..0000000000 --- a/doc/howto/usage/k8s/k8s_en.md +++ /dev/null @@ -1,201 +0,0 @@ -# Paddle On Kubernetes - ->In this article, we will introduce how to run Paddle training job on single CPU machine using Kubernetes. In next article, we will introduce how to run Paddle training job on distributed cluster. - -## Build Docker Image - -In distributed Kubernetes cluster, we will use Ceph or other shared storage system for storing training related data so that all processes in Paddle training can retrieve data from Ceph. In this example, we will only demo training job on single machine. In order to simplify the requirement of the environment, we will directly put training data into Paddle's Docker Image, so we need to create a Paddle Docker image that already includes the training data. - -Paddle's [Quick Start Tutorial](http://www.paddlepaddle.org/doc/demo/quick_start/index_en.html) introduces how to download and train data by using script from Paddle's source code. -And `paddledev/paddle:cpu-demo-latest` image has the Paddle source code and demo. (Caution: Default Paddle image `paddledev/paddle:cpu-latest` doesn't include the source code, Paddle's different versions of image can be referred here: [Docker installation guide](http://www.paddlepaddle.org/doc/build/docker_install.html)), so we run this container and download the training data, and then commit the whole container to be a new Docker image. - -### Run Docker Container - -``` -$ docker run --name quick_start_data -it paddledev/paddle:cpu-demo-latest -``` - -### Download Training Data - -Getting into `/root/paddle/demo/quick_start/data` Directory,using `get_data.sh` to download training data. -Then getting into `/root/paddle/demo/quick_start` Directory, using `preprocess.sh` to pre-process training data. - -``` -$ root@fbd1f2bb71f4:~/paddle/demo/quick_start/data# ./get_data.sh - -Downloading Amazon Electronics reviews data... ---2016-10-31 01:33:43-- http://snap.stanford.edu/data/amazon/productGraph/categoryFiles/reviews_Electronics_5.json.gz -Resolving snap.stanford.edu (snap.stanford.edu)... 171.64.75.80 -Connecting to snap.stanford.edu (snap.stanford.edu)|171.64.75.80|:80... connected. -HTTP request sent, awaiting response... 200 OK -Length: 495854086 (473M) [application/x-gzip] -Saving to: 'reviews_Electronics_5.json.gz' - - 10% [=======> ] 874,279 64.7KB/s eta 2h 13m - -``` - -### Modify Startup Script - -After downloading the data,modify `/root/paddle/demo/quick_start/train.sh` file contents are as follows (one more cd cmd): -``` -set -e -cd /root/paddle/demo/quick_start -cfg=trainer_config.lr.py -#cfg=trainer_config.emb.py -#cfg=trainer_config.cnn.py -#cfg=trainer_config.lstm.py -#cfg=trainer_config.bidi-lstm.py -#cfg=trainer_config.db-lstm.py -paddle train \ - --config=$cfg \ - --save_dir=./output \ - --trainer_count=4 \ - --log_period=20 \ - --num_passes=15 \ - --use_gpu=false \ - --show_parameter_stats_period=100 \ - --test_all_data_in_one_period=1 \ - 2>&1 | tee 'train.log' -``` - -### Commit Docker Image - -``` -$ docker commit quick_start_data mypaddle/paddle:quickstart -``` - -## Use Kubernetes For Training - ->We will use Kubernetes job for training process, following steps shows how to do the training with Kubernetes. - -### Create Yaml Files - -The output result in container will be demolished when job finished (container stopped running), so we need to mount the volume out to the local disk when creating the container to store the training result. Using our previously created image, we can create a [Kubernetes Job](http://kubernetes.io/docs/user-guide/jobs/#what-is-a-job), the yaml contents are as follows: - -``` -apiVersion: batch/v1 -kind: Job -metadata: - name: quickstart -spec: - parallelism: 1 - completions: 1 - template: - metadata: - name: quickstart - spec: - volumes: - - name: output - hostPath: - path: /home/work/paddle_output - containers: - - name: pi - image: mypaddle/paddle:quickstart - command: ["bin/bash", "-c", "/root/paddle/demo/quick_start/train.sh"] - volumeMounts: - - name: output - mountPath: /root/paddle/demo/quick_start/output - restartPolicy: Never -``` - -### Start Paddle Job - -Using the above yaml file to start the Kubernetes job. - -``` -$ kubectl create -f paddle.yaml -``` - -Get the detailed status of the job: - -``` -$ kubectl get job -NAME DESIRED SUCCESSFUL AGE -quickstart 1 0 58s - -$ kubectl describe job quickstart -Name: quickstart -Namespace: default -Image(s): registry.baidu.com/public/paddle:cpu-demo-latest -Selector: controller-uid=f120da72-9f18-11e6-b363-448a5b355b84 -Parallelism: 1 -Completions: 1 -Start Time: Mon, 31 Oct 2016 11:20:16 +0800 -Labels: controller-uid=f120da72-9f18-11e6-b363-448a5b355b84,job-name=quickstart -Pods Statuses: 0 Running / 1 Succeeded / 0 Failed -Volumes: - output: - Type: HostPath (bare host directory volume) - Path: /home/work/paddle_output -Events: - FirstSeen LastSeen Count From SubobjectPath Type Reason Message - --------- -------- ----- ---- ------------- -------- ------ ------- - 1m 1m 1 {job-controller } Normal SuccessfulCreate Created pod: quickstart-fa0wx -``` - -### Get Training Result - -We can use kubectl command to take a look at the status of related pod. - -``` -$ kubectl describe pod quickstart-fa0wx -Name: quickstart-fa0wx -Namespace: default -Node: paddle-demo-let02/10.206.202.44 -Start Time: Mon, 31 Oct 2016 11:20:17 +0800 -Labels: controller-uid=f120da72-9f18-11e6-b363-448a5b355b84,job-name=quickstart -Status: Succeeded -IP: 10.0.0.9 -Controllers: Job/quickstart -Containers: - quickstart: - Container ID: docker://b8561f5c79193550d64fa47418a9e67ebdd71546186e840f88de5026b8097465 - Image: registry.baidu.com/public/paddle:cpu-demo-latest - Image ID: docker://18e457ce3d362ff5f3febf8e7f85ffec852f70f3b629add10aed84f930a68750 - Port: - Command: - bin/bash - -c - /root/paddle/demo/quick_start/train.sh - QoS Tier: - cpu: BestEffort - memory: BestEffort - State: Terminated - Reason: Completed - Exit Code: 0 - Started: Mon, 31 Oct 2016 11:20:20 +0800 - Finished: Mon, 31 Oct 2016 11:21:46 +0800 - Ready: False - Restart Count: 0 - Environment Variables: -Conditions: - Type Status - Ready False -Volumes: - output: - Type: HostPath (bare host directory volume) - Path: /home/work/paddle_output -``` - -We can also ssh to Kubernetes node to take a look at the training result. - -``` -[root@paddle-demo-let02 paddle_output]# ll -total 60 -drwxr-xr-x 2 root root 4096 Oct 31 11:20 pass-00000 -drwxr-xr-x 2 root root 4096 Oct 31 11:20 pass-00001 -drwxr-xr-x 2 root root 4096 Oct 31 11:21 pass-00002 -drwxr-xr-x 2 root root 4096 Oct 31 11:21 pass-00003 -drwxr-xr-x 2 root root 4096 Oct 31 11:21 pass-00004 -drwxr-xr-x 2 root root 4096 Oct 31 11:21 pass-00005 -drwxr-xr-x 2 root root 4096 Oct 31 11:21 pass-00006 -drwxr-xr-x 2 root root 4096 Oct 31 11:21 pass-00007 -drwxr-xr-x 2 root root 4096 Oct 31 11:21 pass-00008 -drwxr-xr-x 2 root root 4096 Oct 31 11:21 pass-00009 -drwxr-xr-x 2 root root 4096 Oct 31 11:21 pass-00010 -drwxr-xr-x 2 root root 4096 Oct 31 11:21 pass-00011 -drwxr-xr-x 2 root root 4096 Oct 31 11:21 pass-00012 -drwxr-xr-x 2 root root 4096 Oct 31 11:21 pass-00013 -drwxr-xr-x 2 root root 4096 Oct 31 11:21 pass-00014 -``` diff --git a/doc/howto/usage/k8s/src/Dockerfile b/doc/howto/usage/k8s/src/Dockerfile deleted file mode 100644 index 3a73606c61..0000000000 --- a/doc/howto/usage/k8s/src/Dockerfile +++ /dev/null @@ -1,7 +0,0 @@ -FROM paddledev/paddle:cpu-latest - -MAINTAINER zjsxzong89@gmail.com - -COPY start.sh /root/ -COPY start_paddle.py /root/ -CMD ["bash"," -c","/root/start.sh"] \ No newline at end of file diff --git a/doc/howto/usage/k8s/src/add_security_group.png b/doc/howto/usage/k8s/src/add_security_group.png deleted file mode 100644 index bd34f46c9b0ada7027fd53e553e7d033255d25fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 118948 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
h+n|c$CYJ=vXBNGSD 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 diff --git a/doc/howto/usage/k8s/src/efs_mount.png b/doc/howto/usage/k8s/src/efs_mount.png deleted file mode 100644 index 0f9e3cab98445707e5e9baa18ddabe15cdf04576..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 230609 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
)>Gs+^~o~fr(AlBct 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

NAYRpF+djrl{|qS*tfI?EFo>bI`xnvJ^u0P8SL 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ⅅgVsMhu0jxm2H&>c_{yY&|HP=wM zv{W}%xjodg(kzly+|;Z_?#4=j<0;nMdeHoTgA~B`o5fHN*>vikD$z41gU|!|N?{jx zLi~m+=?f0%l-5koi5<-?jB5$jHZ=qwmSepiwT&d?$lNAqW1p*{ppC3P+^!t76+i1G zfKgB(!h>RM2vY;ZZ(8C6IkRSGOfAx!XKU&@mnH*OXs>Z1EGo5dQznlV02;tplv){V z8QTY-Xwr1&fZhPR|5J~T4{Fc5@3G_K(c`Dac?b55qX!R+Yc9QDTzBDtaau2`dipo{KU9SS=J`r|fpDVpJH+!|O62=+b44%rb_s4dc(eN>45hoRcRj%_|Mg9s1%W97CT` zWK}Cm#bNh?0Fh&_UU=U7;A7*~`;U#wFFk);bL3o}Nz2J&D{m^4$mPalocqM{i3c7U zfBUAp<-U9TXD_^byx@`p<2V~$=_M|;NQ)e)7kv)p>{`+*nd^AN9A&f>Hg2(Wa1s}d zjLb8CY$W3%*uDm+pHU@C<9hzER;1%*HA=H}hzrctI-9xk;5V)r!n(;#HjY$ij#2YB zZ?d>cbD|r!yJmtAvdkY{FAKX`MIqz^?E{>8=`Whw9}o6LGrg^~u$MV-Ag5|)M|an8 zPO6r75Qyy341xzye*>=UA;gZSbUH`i%ZSwyCoazeji&6m#OoZesqGt_whpj5wXFCc z35*sGe+0@h$(8J2Gk?{W$Mtb=$I&VMBs1H>O}9&BiS(^Wjn-@d@FW_xthu(p3s2?I zGgUMu720CAO3YAG8+aY3cGU!*ZH_74m`t}%PZ)0f*gfN?-hA8mC+~f*JgdvW!{Z0P z?m6R6ecq+xi1t{vpQ5Zr_ZDtjtc%vlt}eZ;YmNfht~0CVWA{8f?s)jrxb})ejKmF4946EAtjxaxwvev&uesBqTORHL$X zYT5bDpxMdmga$%-X4=;_^V(S7&q{l1uJk5JHNx<8_c@}b7B9RdGvxEWFc3>uGXwUx z6++Z978I%1R08e3&w(p0GjyATYhF4TscChxT!Rur(+K%GHH~eW0qP)a-@l2BX4rOJ zb8tJ3lWBAzf`<-lj8|RPPHpdO#L0-;51$G|ECKTPpL|AQE?&GnUe6ct9hRnJ!xOH# zDCI|tLv-T0_Dx>Hq}R#7r`{MGZH=T=&maQA$5^Ak`pyDZ^5QjSSIvoE>ne-hT%x6e z{2F|!s583o>4DPZaw|}|qKg4F32hjJb6mzLqbxZ>sWT0|5Zrgpsqv1R?;Jnz=8uk_ z{qUoOS}qqo^V0D{U-|6u_0Kyx_DhiGN5O<|vMPhV)@zO=9)plOt+_BnS$K&*Ic~k{ z(Q)tbF`j$n1>>T9dNYi?fPGK{n04q4vYNJ~p@H)T+TPPA#@jx4`}kMy{nQw@9UOn+ z#TSnwe8R(T-bVStsn#S?Q(fm^9rOUmr@rk3P7yfT5OXYOE|9pHmFxwwNh1+C>57Sy zjie+FTaP<=u>ol-nx{lLh}u@?FgwnExJ*wNf%;b_g_C6S{_BgvvF!JC?kH$+pj zkvnMyH^+<)F)L4}qOq<8@MLJsAhGPAd8hd^R->5-VARp1)#SH`ti$up=oP^KyRO4M z;>}S+9z)vHW7!`fcWoHa8d^y}L4Iw!#^eBW#n zq6VeixM{F;3>sDpiL3l_pc6ljoLZau-ITNWjGGREDlAQ(v*tQj{sb)uxiD>AbDd)g zy%pl~twCH_Qi~-I3Az?on{Ox0U~?pXt=V{=7VcWU8!-st8_t4H$vWSL-5tII=?I`M zOOE)KzSoeAvZ;uKEwo_^WBkbLKQvx){YB%8F5Wxz zfr(UD3&m5yNeA-1=d2S{d)8T+P|Qmr2P=ksfS=5u2a>&dKl@F;`=Rl}Z@zE**kAgh z@wHbU(CayUHexPJjSH~yvel5Dv5}h>f*!t3C-hD1#;dOwfAve%zUZQH$-%uE69LQm zg2r6tF_EigdJBTBwbfO9Z*g%gc^&RZ$8Z8-8rl(R{NiIQMTD^qOzZW9c|CudS@0Ie z4w|QL1q*j#qHm=^hS-*X^`3#XYew6L!ihQCeXfH#E3?L|?7GjHd#S-T&GOskQ&`uU zxB8sFG`AM6&0F8XJO_(?$+1kC-~O_Lti*es+zFdEY88y0*L`K_8fL|kMTbKaOuUbH z!y60jxSgb63(i*afUEDh8@yp?UqQn&&*AnyCtG83e}{KMO_%(!En0fbc6`UA8p<(; zu;?___ljB++O^ZJVTVq{aDcJVjx@c|6rgbi=frsS3-j&|+%f*}zx<$$&wch~<2zsW zjB&X>4RQR*C-o-M1LN<$^%LWJfBU@g@@E|xH=MU;JULTnY~qEQ`PyG@`tgg`S*3!FBUCjOQPe6fCzmCl=PExvkKNCA*BEik zL*&#s-<2}2WO&;9oCu*^l#ro%a!9@XPHmuk?kupg-{;^K=c-tfH?Dck-khq$NV{}x zinSY`%_7{?ynvmnDb#5`+nc)-#6~9pJ8NFJfe{0)dAqVk`5r4a1FMW)B%NnjuU={* z-Q*I^!gTT#<`tQ3&DE}G)ceuX+bkeaoNHf%Cxq1f1Pnmj@ywoQUP#p9GD?y)s4N>9 zSG=@=fzKMyRGoNo{K8Ei%8S9nN5?<>rWcH_x&Fw|o65! zYQ$m9d;F0r-qGO&qDcJ&hmTzGBShO$Mc>T47;;YK=i{J!4C^F1W#>idsS~Gsqw_mG ze2ie9FdSU>slQkJjLIJ^ke!cvL3rG+uv9Dg!ST)KIJ=eHT%U3A;qmQXed9Q#JaUf{ zd={(PXcmcdD@x|$`FXy0q(N%>g|CZ79uXXn){}ZwY3-P#L(ebGi$3O)pTdYj%swTr zwDMwfpK@FBoD3Nqr;88bX{;8q`X$v;+!g}Oj%FBjEY0wmDuhO4>S`{UH?rm5Y0WLn z=H{fa^jN3YiK54%fEnx2sjZGMu>H_A5G83+P#>j5th_Lt+2K01E#SKj9rgEwAx#rWZGc<%VZ zs}A}}6J*DZT|U0_x{JooeDGoIgW({WIvh}+eSv!!LhkeZ+Vf6%&qEKY#3Fm=C63?M zVLxJv;dgf6IquJeg5~4!*-we(_ZivC@<%AL=P}xI^+bogIWp_XXc}B_263cZIb^6F5CfoN&oL0NwG|`I0CnkFn8Cy$n~`d)+aXh68DYx7 zs975voRf`IE>VhQZ(>8d^F9{_&iKtFxYtIp)7jYPI*-sEMubGC+c9vS;{iK0$2!Bv zr~81z<#K~|BJiw7J4ppL9)QPO8R5f(O#&H<-NnnL5AN-U?$-;xdNKIgS6nxK;H$11 zFS&Sso>z(Mu@_uEzUaE6;}<`9TE9yeZb*54!^hkBRF!T+%j$iQ=Rw$_JkNRDla{?g zvd=kA`vlMVc=|}6V=vDWwXfv&7WaA|<9XjHJ*YSP8|C8pUD>d0?)y?2Kvdht4as zxOmQaO8T?+h8wNKGgdYIJdgp9ThyME@S*^O4&nPg!Q!^Aem++aU>vjS$@R)LXS~&{ z`JcSP<~~qP`I6shCub^92~-bjYar%K6O=i&X_hkCz!@`z%0>hyCQOZt&nP_M-m2LO zLb8))2NG)nop#k+HL7&|e8_T4k{l7Q^WrGYQ?}7v2=+h6R7E&%*EByMJ7#&%nRr>LcSCeSn+|WUur- z`skD6?H{>sJb2D|<2BbF9haTQ)22P+&buEPH|h5!pZA<+jO)%lJ>GNs{o@^XJ~~dG zvv)k_%A?~|&pN7i*EL>kEG!0Yc%IFD^zKK-`#%1u@u3Hvl;fOn^`(c$%da^)t~q)@ zKT)lB>oq^O-u~ct*L}yvD{j1GocrkG<5zFKcieky&v?aiFB`A9>U=*zWQ{TJnLqf` zv#Czg!u(-t1AVO%8%>n??sa3>OrYM(MGRQ8+1|VzYZ(}c*WquJOV<*76VNIe1MAch z@y#KD1CEpSZklIMSemOhIH!OYGJWl=S>v-WX^06=i|BrP%pys3&ls!`A{L%m=fq)# zi5_`oE$LSZysIWOI)qd}mDQH;xH&Zk8C!YQozjJ7goq&`QVX(9eS{URY|*jMg#%R7 z`V7boxH=+N&!5ACU*~FMVrMUC*OC~HRjm1IKf_!QqPxyPmxJ(`R5pEi44BhRNRXSHAk$<4g2n@PuykCn{#I_J9{$f5rH3pLy9hN6&_M z(}_2UP73qkPd+@}d*{RB!w(+w6THjx`_(UC&$~>&V=Zp5yx4mDu_wk&H{Ul-U3hrB z>gq$|-cLTHJ@27$-xDXt#TQ;MUZoeD&%NZ_u}4oZ?h@xM_kC)-N59v@@ow!!2OocY zJbCQoc;*#H$MY{bS6k1iapwb%jgQ>>=(zcw$Hs$CoEQhrJ$Kxo+%LKE@VG+Bd9uY5 zulpW+B>U&VL)!C>jKlkRa&mfnNaKF@{l~QjT{mqh3V5 z`sxeDp?X5qHRg%YBig@i(LVp4yB?PQQ{(WV^TrFWIx=3Yk9i%|_YmG>BkyDSeazp! z<-W03Z^FIo@`K~%+wL8|_3=l>MHd|zU!^w{uQ{ZjgE9}y-oL@3`jjrqZeLu3PRN zzY6Tg(eanQ?Ar0Niw=w@^gGkX>Sf;k1N+CTUU1EL$qo8FYCT)!?=0-oW_j$1W8)S* zAA7gQ-2JKXyV7{! z#Ye|0uR7#6+)kc2G2V0AedG3Hd&jG9xOnV+?2++S?RmF7aBLhpbnbZZvo0Dhzw(ft zcjiSM0bm{L)y=ykEIv8<7- zp74s)%fhF2D^JDOqMThxVD-U3p3bu9t`6o4 z^a0w(32ZQH%>g6`c#Z_lKKFWc6032l4=X3TIPq9%vL7S!r?s6UIvgW_G3xXjEqN;1 zzzU5iK^lzzs0^-5Y=Kr6KT*U_nqp4kFmax(G;HBrC%>~`fFe2peZ-b1zM1;nC?LX6 zoPDRb;q*jB&~eq3u-wJ-3f<{@D+?zxDJ- zzT~;%fBcGT#+B#l&eDsfNA=|BpZ(N($1mk5Kf4ptHYa?jy_*>up`Qvpj zym)-%w!6kRz5X_PuQ;@4{N%6crzkJvDx-Y(VJnPX1 z$3K2&UVt{`%U=E5@z4IyHRE!P;RNr!Ys_!{y^oC7{d}}FF4rUD$N%C>##dZ($RD%i z$=h$d?f1uDfA{0#8^7r4@yL7c7{8>Cw{x8P`2O*ZE6yK>^|9C!OpsT)>Z*n3siN$d zWumW(8?>>xPrK%s#pneIE-M~yY!y(@@Pd|r^W_$LS1!7**c?2 z&uQK!oHb51(m0jwlUZlknl3Wvsij!bx33~MEJg~K8YgVx-Jp6jN@Ll=iUt`<2*`Cd z@|zd4+k}#Aj{sxlMd2Mzs&yDTmNL1ck zCrNN6Zt2TFe$SZ*tltt7L)dA(P}_6j*!casA27{zFS~xc`pSd4_wp`r|77=+_6MFw z@s~#V1O#t{@y-8DZ@YDT_b=U10yZyy`5QiOeAg?VF^(vw;C@l|?LYhbW9ZGU|N8nv zzyAM|K)G;dyIR=rTVDWkG|pk6Z>u7@CD=VeDQ&C z)BEojf9$97aj)sD##g@PIpc49)pg_QbM=!r<-X&t`^TUAHy=>$YsYVWi=H^?E&nI< zQP|&j>-)wJzxT=UU%dAEaq=U#kAHoeHulx=y03f5_^YqEd>qog$s1vO8scvKI>A4E z<2%QXec;#%ndUct+4INueZ@1!m3qOc*U;m>2Ob{Z!I+>WS;JD;2}mweZk zj_VKWMXR3wNun2*=Sbz9v#bVf)(-Q<(f2khh)2NFJ8{OY?rnIQ#d*|YojvuQQQQj3 zdRAY&=F2VaMDEwqT_YC)&VafA!HAmU5``lVH1IXP? zLcNjUwA!QC=Sm+Q+Qe}yVD5oiXWTZkCwO#dwmk@J3Cx)>^WfuvbI%Z@YtfCwLDUC4 zj?_67hjQ=HT%LOJv2l~$Sm*f0FSusBRIj9X zv!48O&(rrWK1Frj0e#v*`yoF~d*tCq$Itxw2gVP*?LNnDp7xFZ_1j)L{-mC>>Ce#k z4fBuQao_l^*MD%_@Y1Ws*I#gQ{OE7-w;NW+HCK&a{?;4E^AC;j%fI+LG9KUk;`QwmYEI#(=@$oZ1@$T_26!;gv`ug#~-?(l3ntoq#ef;1zzjA!% zi}h&=je(DZ^2rT;xBPGa>vxVf?C`7Q-~UHHZ+yqgFB_NW2Of7l^7!~$|N6b-9hV&% zf95%d$4~sHPfY5)M~{vd=vNR<=z9q-nlgW^oj|x`{%G)($!7j%kG10iFZT4;&tb5( zeR2~=hp%Pfn8O&;6t@iPeGWF34_>%=OkVm;jRTawio+%%IZAU4vSn=4BCzC<=BKqc zN7;`1+=gcE0gti9BOy^Hof>GXO=Fp#Ee?-}6B-?(B=h@;>?@`yTXPd2?h3~$01MsIA4F7{2sk?&GD_e zDK5X@fPU0|a{ic|VLFj6JW1l%uO|t=f6JZqVsOv+j@LeSeB+BQ@s0V;TRt)V&M$mq z{QI}uGA=xP{`hNO_>6HrnxyZt!wP=<$?^B~V(?PE`~Hvhg7K7Ymp;?}$?-bz^AXk)`jf(kFFLHhbgFmw_0H2x688OH zf8+SlYcKMPyxZ@3VEnUR`QUidt)Cb__kkMk@zY%5F-t6Wox?cz#t6(k1I0Ok;$5Y|B-zM0&?mRgwBvCgEH z?2d&@4ae6Ao614maoXq*YpRj3uFqOC`dTwD_Mpn6TkxhHPNQ#{mM5!$TsaKWY05~= zjj1u`KVlEuTosrXaO%wQi3VK+>k6e^>i6_hySUL$-ex4OWXSH+8F;u#i`QPYA@3Zs zVa^_629+4ZM3Y6S8;xiv{91D+&r7y72Pd74hr@|GpSq&7cy{=D%M*E}|U{aqg&KmOi_$M=21 z3&*SUiHXPb6T&O?*PZow`f<~TcyV=j{O~tkr=K_;9v2_jGv0UGC&%Caxm(7sY7hO5 z8!jDx`UOY4PxI5dYlQxo_99*&QYQ*^@Q}F1ljEm;?KWM{9Y69-FCJfT>HcxkdpPdxtE_`iPT9eOc%VtnC?t{LC^rB~~xmHWrdAH8S% z!~gsJEY$QxB#?0)3#3Ab7n`xwau?<`uVXQ&;rQtAU0G-iovK@{1F8`_jR9GAJoa1SaA0dS;WfX`!5(q$3N=C!Lx+b?6^m=_6r&gF6h$L z5rn%VE?rAzZ1QZfrW zU;dmU{+Om;^ufW{L*Oev!RI6Fr;Z;Vzx3Ak>&4*x&F*gef~J6PYe9Q z@7_Ls^mp$YfAy!|GcNtESB|fH7W;~x=IFWMRl0uYU3ZQj)%Bac{JG`5QkxzUumm$5-fYTJQ${ z{&Vwu?xp$!nCqwFP?Dq9O2|jY_%S{29G6@&e)K=TZanw=)A}{3508KFdk>BudBcat ztFC#;c-e*eKA`6S58VII_$RN=i@`tj#W##U`vsSetMn$_+dp{M_**}J>-f9>?!Dvc z3tu(9<%LJRYMv$fcii*D_z8Vd?PV{%LVNI~^oz!D(l&>by zwtx!g07g=CX%bGNfkJkhIQRUOCF=qpU#^DZj0dZunW<4*Ol6;<&)Gye^ZA^46sfQEbI>yQ9&}Zz7T7!A$^=Vvq6x0) zRNKyuq5}YY*?8`-?NA=`)SE-b8qcW$)CAPsdG*IEWY!MLyFC7eX5oPI;>`J=0m}r+ zpJftGkQ}RVSa%!vEcFwQ=bhgp`U#-^E1KTX7dl^$=qY(8*jK!KS|Xl_>S9Q89(sNFB;$Z(o4oc z-lo}eX#9n*+BY74RbqBD44vm+cFoeN?4Hz4XMg9Od+xbXYP@Y2$9c>F zm?xdhnOun7^V&)@g>^OUYdBZD$$TXjErm0Nr{|0bfmw1l%a)TQI7F^GC)4f-3e~kED>2f}VuM&mjTd5a z!7)pH!YBi}M_)KmshnEm;2lMK2?YSgL{u`fTbfGdv>F>*7sJTC4VKdSd+GAKyEE{V(qxuhko%XX(U-{&|(wCt~0E$}7h|e))yt61^$f zvgyomhSuxf{KZe|cB;eU_J^Ms*PegYc!u8i-Ek*Z)DMlTbvx8CJQdPMx9Gk1)mk32N~yLaC^?$V>=A021v6G|ED{}ITluXCOybWgSB z?muVzZ*RGByjpiO=tITvEIn%ej(Z*)Kl|xpUAi6r8@0|~xra|vwagM%L9cnE{9qZLBBs8WKjUW~?Nxfsus9BxbCXStA`td4r5aHH5H_|C zatl386wt>ICMurGu9$*1JvS___|#W%6=dQwbH>JflDV-bn>Cy*52QmduJ}v`7i}@| zc&~B}4~+f4jtx597)4bQlJ^jA`RyX1r-vZUpPT&7(Zm+L3+P$-eat zU${l1!GcRJnpbsd&U58J6wF+mfqV0(b3i*r1@}cZtR>8xigxmmPRo}+4LnjeK<&|* zN1lAXsy!ZF`@mEoHs@ux>CS*3cpqOS+B$yZTb?uCqKjudWN`BV-70#nE*KrVe*Bxi zI5OV#+55+}7wjGv==wM7T~^l3;|Jb!_4s?&92n;cZ1aVC^#=3U_|R|MGTwUY;qecz zK6hMk@&0k)c{|3RT}KACjB74Ccf3ds{p0p?IGjAWeSF`yT|2&i@2+vNK55efQvLO# z3-@f*1--k+kALK`ao3T@6>qmL{EIiiRq_EKqhI-RGRL?^KS%MSZ@PTE;M^VVA3w!& z!}T8??|t;)@yUCS=@!~Ox{dF|_{6REjbGNaw-@UUu^)KNrQ@>Q`pSS3^oDCM)%n}; z@!h|E>v+#?509_8Lg$6blh2;zci@=^$B(`4O0ALgsi5NK`4$-)kDkX|BsEyja_%85 z`EvZC(H48fX1t=GoifI?mEN;Qw$)uw3#PF3w<;jPqdu*3O$HxA)*jBu!4F)vOca$Px}}KwooAlZJ6a<0-I#}URp*vFcx3U8@lATX?*Sc+M|I-z zgwC{1Xz{q_%7f$Ud1I+tQE${6JUWi|Cci7&HNNvJE*j6*mzlXg{Bhk|ey+Yx^X*r` zMBhWv_DS{ixE3BBoIqiL;6Vp|kb^`gMDm=o_KfH2(d_za;W(_T=nwOII=a97Y~9;V zc}(|?^JbUDkWQLCeW6Y9!H_<^=Bq9pZ_t~*-HLluoHlLWt}90SZPxdvKlH$n@#$MR z#nKZ8&)+#t9D8EiuiFvsKYVnY(7pGU9oT34TON4a-(4h3--_|=uYS(>wkvpyGdaqM zuP0e?VV4Xc?dbe|HzZU?a;Rfl{>^-xYjg5TX6#qw2&= z^^G~lo)|W8rDZc`{)jDEhBJ049ru)+i&s3@h7I2FjRf2&lFTN~jvq~qL)E3E+j-*_ z9ucZ8MMq#y#3e4s$ekoKZeY_4t40zRdR**T+-Qe{YhD5xD`*%B+_3VbN~}eH;>mW& zc_M_dHU3o6R!D;DsemiRE|Q~SW05eO3j!l(+-f7jzQjQ;fg!>fEaNV1soS5=kUG1n z(LogWXPK%-^6Xxsi*t=10!sRdGM`RLZk3Gr_)Fz6ttH$V3UvC3PyCY?$)&vSo=3)q z4#{ZCf$@4>*x4hSV|tf%Ol!|pegE!dS6?{JlltSIKQiuk=n1`vR71trtoNQbzT=wn z$7N@19*=85Ii`3QoqOi^ZkDP?^_@SBA8Q@!9N+V!JR$7kT2CX(0~RjS8uMH|`I$xf z(PPKQ!}_H2arvF=TQ77X#`^0wTmsNQWc3W52ZlV5CzUt9{L=9nZf{piaU2wLoXQ4I5H3q!m8_u*U zip11reKbKyjF?uPpcFM1%x!`NGD4cF4YM(xClfVUIy@ltYFR+IUcIKsp=4n9yhJ!* zOO6S;q|R&-%4h_gvOQxMH@)d~ZUuMA1nlCRoCOh7&?(-tsoY!k6r6Et&cvn=X2}P! zVXaHec~-UGYy-q|2&&13zh&&h{{-l%gDA@XHTUVqlU zGsYWVtb12EYt^|QcXS+m?1^#f9d{Yw8!p~E&eD~)dk;N69?);pKB@)vJl&yofwaGU z|KsC`o@v3|XTjewe)N@Js=F=tNwciu$!m?D5#gv3YN}Mem5jCHXFFT;NJf%Y`bytu zCypvKJb@~XG?e8!XA{Xhp?4O+?}iM6ANED z-samCScGfn)xXVS*Dg+-ko1=R(4y2{BVmzaogBB{cUWKgJv6S<172>{7mh`196g#( z6-hpC$h33#AavfrMic37-8#BezWRj<#d@B;Nh8Qm`NdVYp5YIj5duM4rOJ|vcu2rkuPmhU&Vz;K?^yY9mv6i zfzo`?&2ug`bN?}p^@hG$kSYzTi5~0Lv;vDPQCx+d2i;Vf-~@vd&?V`0UMrH#x{qMQu)Vb%C9# z`($iDTq>A|`k#M?L2I5)F1V#q=Rd~oV}nNWg0+r%{qg6m(KEk%zwU+reL#Z0sNZ2N z&a9r>wrv~F)BfGMJngrdMGjbgA$h0r!Zp3*QeP-nd-qvtYaOMJ{zvYrl*BCZJD#{ECKWIkb64DM&NLz}e&82JcS?05BDQ5=E$YDtH%IF=0~>>f zQ??ROv6GZeT+K)1%sKsoFHMf&5YS%po$vkHec2gcq{bAydCfpj{9R2Cf?W1?!msQC zg0)I`u+KS(&BEVy#U+u$OWPbXVpMrFH|!_u_LIoUCFk@cTYQ=`d;*b?O5007#Rm*O ziaDejnG~Vy?E;r}ah652;@3cu%&5VDv;WrnP~NOh_VYwzuT8`*l=fq&fO}YPjwsJO zf8RJqcO&p!xC|rx->mN%?id$Je+LMmrPh=Bl8nl(ZT{3wOSiehZ@WHB;O&>eiCOE_ z+;{pF&X_Tmo;a>^tGf@4Pw3$;*Xsd*cRhMsOUe`Do(Fr)o9zkZGF2cYy*s*95BySF zg!q?pH+^5SZZl#X|6=^yyMw{GBq#6>Yt8i~vd`*#Q*U6;0Fog3 z&Dsm}bt|4s&x6Up&vDb^5uD_>qv0sI_%>x&V1spJRimNgcxQ#=xGJ&J_)(7-U=`WR z);?;j;9`iv{@SSxUt<-n1C*b3gsT!?+$qgDtw>xaxH*H3bt5b|iv(26#ZKW&HDYX0 z2g`O7u51t&Zu*xPwl_xSvvL8AvhSdXEcT}K&Wi+7o-!Y8i`W>h$e9>1buK*cFhDw& zwd-6xRHk|_kd;C+Ge|IoO`;@b!XZiL=fFtm3Od&zMzSUzlKX!Pq^~v}d=j@!2gzCc zI7|JbOrx@m-q3`V{TMl8^KBojm^qpkYLD<`Xb23O-&X ztI+0%iF#v>R8@>G9$XRXHhZU-zEGE6Ub*TG=bQEA<$wN**N=Dmz9`)e@XWKvGjsx? z>(ur!uF%8XB5zE=a!ygw;;MXKK~BEl)qKiET(V4@99Qc~`UU#!9v(j&h)v@)x_5w+ zqOW|WuB0g^oM6V2MMhWdF_nNWbuLmDEy+5^Zb(#9%(c{Igw&u|t1bXb8`u`wNM}Uj zF0s+2;D=css8btx;g&(BrQ@Qrf%dRU93+(R1hnfFyV^5n)h5nhP}mFcG@Nb5#{9}p z4$f!i!odS#i@>^{SWcYX4})n_Sah!BL4{{*;^!VDp5&UgGRH?-=YzjDOAPe!p_Z)h zBtJ6-SOt5{S>ZJc+X<&HTHqNwwr~m-cFs9mO5Vuu>N@SUdgA%RBm31 zxYtVh1&Xc&>58{GL>ksP`5-Gu;pc9mr1Vn*s=Y-Yv3&H?caHD*rB4pNNysV3OP;mg zKLhl{le`7xY)?r1FQ2T0$%1cPmb~FP@o|pgBFa3f9bAI9GPHg4Ldr#kDlP@gd3PvOm`OmnhVz>Wn2+L0ww$b>h^lZ!Cd*13xXet4!I z!QyZTVqphbRux6!r@hYMB>RkO05Z2`(C{QybB>eqDJGVhvuesKV3EcSR!_+pQ%DFc z<5>vCO5_HC37kp7I$U%v!NM;55rPdzVdJkk=a7sUkF=@}N?mLPnM?{2WL8u*%=Dd|JtR2GU`p1-QfX*o}2Q^F{76HXO@ zd7KZQ>U=@xbMyh6WeFc`?aC*FiDbmC+5rP*9DA2V`XtK)N3on@v5d5-u`ensNi1sK z1*848>Pv%X?aLQ}-}`|($4$Dm>B0;2h;yAJ;iWe@J9RK{GIW*>%vVbEdw+3g z9C{tsnEAepjw~5+&~4Sp%T}&_-<{v_qu-7Sj+2mfv64uf7b_h-sA+*iZWUD)`DA4i z2c)h{zgthsvJMO!G{L#;REN|zDR=5tWx(7oIa@z6d zJv^{X{)t^_^pmG@6Y06*e|Yt?#^w6X4JVQw8*mMx+oi-0_Qoh+`osI?ev@chn@C6i zCm0vnG(nh`Xba&Y9d6pWA00cLLQns!wN2w1&tjN>5tOtfph!VfYh2fc1~2bu_oztN ziHYMX=jw+Y<<=3w3TH$C4qc3r^LfsRjl~;tF4fc@aC@vfjuFjS@Hn7wSd6i!86IVT zQFO{bx@e0-nezUv$k`ke|8bLk;$iU07ee}596HZ&ws4`R4PLa)fve(R6`WM5ST*q` zdlZ%00Ib;-EbifBoJf%w+dhjJZi6cs|7TM6XrQ1-Lh2o&II`yHO%KQJd3r=S_b|L)k5GT~D4UH~-?Nrdz^#eEbHNxW*0g#2I-t9JP-V%5oOUwzf3KfX z0cmD{S-{ykwfPVCTAQ)3aN5n|I^!0wjF+6(u5&$RK_Gh29ipP31GjDAMH{vg=gKiU zbF;nF)sM-y)Og#j>}75&WE-z@7^L{L2L}ep14>nOVq&70R;jhxpNbjg2J`T`Cd#x4nc9TH=VdY?X8TZR9>BZ^9$#6#2NSHDuSW?Rwx9=Xr<6Z{Be4_$ECO z^E`c0c#I1-6##TT<>!Js=PJ)QlZWDs@mKoEhohVJ>nk;VVGA;Onz4R}Oz$ysrvbKb zc68xP>4Qj>)Ht^+JL%FZup?v5TmCfhryW zs1pyqo&yMJ)5LrIIjG4>1Fro|p1LLWJ>5FTz{dsq9(%x4658nSwIybH(O$pKNrAo` z(*+A8CrTApi?c+=4q*JzyT9#F7?XRjfGnuVk2WvgN!WV)Iv>;*Wu~RMhCCfrKqGtO zI_X~)x9p8g?6N>AO;WD6mW|EO#Agm(*4kz4qu-Gsa;+!8wO9oOA=R9BPohAg(Ll$2A#wpuRf3uJ@*geaob~hu!8FX>b_4pJ;CMynDBh{uyWxp1L=}n zWRgXw@+1qRZVIOeq zO9p4oF$1hI2~*PEOG(x9kw{S|s2iu?T()qd>ZX9^Tp$7r{~5P)!D+5TNrijonJfjY z`YJ2yy_Je0vc4jVg3_E-ov^5 zS?Pasnb7P^E0s(Ia3xupb7f-OfZMhP?I}5fSGn_?pW;qT(s6($?(Gp9(m2Oy#_+;H zFA)MeC)bQRvQkmCvn+dG$|tvOAJ<%b?)VbI+l^gCK_v^`aJ9QGm4-a!;X}gZ^ z6M6{32S0cJxZ|;t<19VMz~5TA`R?(F2abDPt({B}G$Im|SWAqQ|J1lqe(cpm#$G2U5zAs4a z(RUa3iswmvpP9m#r>lwUl=C;8CW;&cn5GEdUg%SeTy~gpr^6Y0^FXk_&{OjsII&q5 z1GV1ivGlyo(5?1+weIdx4h*dr4i%L2&m>CVUB^@mkC)n$jl5M4mW`I3G>4R11DRpB8Z*WiHS47HBRLgXSQTkML7IhJx;SQN&QmTBwZHTsIOSs9I){O6u&rp*+(>BWTRK9ltaGJa?#LehTdyn2d`Q#d#WUlx3eBsp&Sj)Y$~VTk6G` zw$(P27@ck7V9pp-2~+}GsecYWzJgpgigCsd)ule7k(p<7Y+XpKImb3h97kWPZrVW@UO zEw`WsqsIi9>$4nNa)f8nUdyg~r9(>y2(&Gn*?jQBc3nW4=TjbOHz+jnJH)Br>hXN69_!BN64MW4t z;@rncOaPNvh3NQeITPNI8keAUJO$?hv>6-x;R-+1BLWQnf|9gzVY$R@yTW;q3-baK zQ{%E0sN!5$ylzw0ku$iBXI235f5D~kQDJ|If`(W9=~vA_SgW!qw0I@i3|#c?K$%+P zx;7Ov3rC!ts64$zYUq|+wlU{vrCrz4lXUgtfF4%xt*_&5aD7+g1D_rL@(*tsAG%8? z0D5T3gSu_tX8oMQfB551k2k#ay73X+R(iI6i2cP^TwyM>?A zt(pH=In2K)m>`4f<%Zr)^pGEb8E3Tl3EPHu3caHE1*L6y{{65bekk+v;p2&V0Zt zp5a(F1jWW1RhFD5m>7BP*|vS)LRrkY)=OH~NI*_x`0}z1QeGX~)rcGjA9AstvyTTb z?5<7Y7Fr<%85?X7*2W?wCF3Gz^wyQkwi%BZ8#@gB-&HScg==?=Nw!}oR8SaP@~URc z+{7crxKk@~`Psc4z?Ft=VA)3I5HzcJw7cDV>B`zxMmJcbfVye^IME9I)Z8p7itvcE zuqzhWO*^1sguP+a2gRt~8OZn@1RLYvAYAu5Q4q)MRC7+BWa*=~4wPtWc>G(Ih!4{E)AT(Lj+sXNC{{b6D|7xD!He4o~cvayRm zzURjg8M$^UcxXI0_*878i-nu?M(;~6Ixwz~?2kTl^Z1V+xodo0KTLh-sMb8a9@3Lq zKm6Hy#~<8uNK;yf9=y6@-X}~`XDgojmyso=T`W@&?KfKIvL3(;4C45|Ge$>y&4@H$ zj?lO`;)AWd$hGRo&{62R+idhgS@za@6QkxVi}H#4(_ZJ~_LQ6fS0Ey0{MK`x);ag0 z_?okv=AOCUoSU!@8Nh{}yig}3(ekeZScEU6?T8_PY8)q-5$rbEsYNPR+BBhyyo#x~ z-g6@gl0FCd!3 z?$G*xo~ZuQznh1ze67B&bN&w9$)$IMu<@#z!&JGLxl{9n`l-uQ^hslxeCE!abKd*# z(ebdpezQlv^XD~8-lkZDxKE&!i*QH+Ft>DB+k>e-N z4`aTRW$D>v&6B4Zoab%bxqUq65*`mW#@pU?fiT? zyT+gC>GS+fBN*p9yX819#k2VpdB>F3>&vx8PH z2$Ayv3nnULsb+=e%Dm3ePqTG0%YnK|`ylo4t4>BEA3Mdy#?^M+zEzW<-;>Y`?!r>l zZZU;;6GH$8b|efEH1BE`0l|~n-NJTy+X*595GmlQjWPdG5l3~N4EpL9e(CseEet>O z{(Hu6{^?DA4P8ke`Vr@;?Aq_grVqWd`??oBQ@;oEk@4F%-#5PN-`zJ}_2v5M30>uR z`^S0OjLI_(j(_|W2mRyg+Wqv>UDHjj*8AsC?>k=K<&jW)xLtz6^I+yN!9xpZ=^oU{qt1<#*KOl<*IYW@|LOb3 zZ-3^_@fQ6i;n!Vr!8lI~-{Hght*%e;rO6%RxBkhC$0d9TQ$9!CC+z_+5yXJ0sjV&Jl zr^CiZ?|ylYCj#$S=;O|PcOR*tb?fSTp2ZC zDioHn3q;!5Vs9Jj#!-v^)EP@xFqfS=xkV2|c+0DvqYF$Q8~^r`kBzs!`;&S}ty`-` z{R|J*o1S~I9-FQ!$2)h8?|SW3<6S?0!}#F!w~cSO{*Ljc7hW*79DZc{+NXK^sD9t; zh0h#szWQuEO&BiuPM%L&?#s{RxPRiqT?*v+=!0_7#Vl^R=O1g#)#q^vbnkfQdp30@?>7!?j*I%foJL_Q&pU{ste^~cSealO)8ZXl=Xn^ot$vXhKKR=hj+#m$Jyp_Op zHsm6VJtmf8Z&Pi{#((pA{1)pRW9qzNPjM_jjX-k|8v|KeShmy&g3vDI2S-S|Xzw-+ z>ikC+n^=JhhFbh@Tr~5TyUxX0Zt|;DK%vE} zv56_8IR%GH=u#Q4$Wo|e85j&+b^lf z^Axwt@M6w8h2*L1HH}>N@j&k+#~-zAnM1B1SeCFI+c%TMth8 ziC_DR@e?xDZBAN;@?#M+U-#8#`XP8{>bt=|_?FAYx4q-W@vHCu?D*9`xqW>5wfo0I zx8FT}?@r&4KK{Y$t{Sh_&xD=SiQ5)kJ!jpy7Z5#!3wDr9AGK9tSn_m26uJ0r+qPqT z#l`!^&*{R_zy8&ajt_op@A%Uj4~?Jxo|la`TyW-iiQZlQKllCB__m)pG=AW<2gm)l z-!*>WlRV)*g>x&Skc4CPps@RO&ek&a`MC|9cUmY`3+3_S^ji{5Ol+Y@KW z+y=05wXfKbhWWdzyh@3RIKoB@IXXJXD5Wt5Gm^O*_?S zsMB$83!07*2Dx5*0UR^c=?s=8;jFTXc*T_zTUp|aRQ2w7dH6doTXe$n9r{hd%k?9m zzo*~Q`mCPX$&VtB&AZ2$yLXLio_+p!ojxJEOrQAi81eHC?jQf`yI(wBaNTYCgz%AZ z=dE{-oAoB{#h08lUi|C}#heeL{rEVl-{;!KAgSv+^aQ|bFVWLc^}V5;JoG_@ z9G<;z*SK2E=jaDS$rky{Ytz`F+X7yubDS&C$>xOkoO9ru@h`sXE5?gIdi!{fZmYOS zSJeJef7#B`Ewr!yvJ1wm^tyycBnN@5paEB1UKf~A6s z8LV<%JLjH?Gn7(-L%TU!V!>?V8nG)sJ(n8CbenVKr@ftMv8L}nZoF3(dyh^f^FfFW zip!#5_(`2Cpyv2A0tSIHUP&!-J{s5BZ2YGkdG)Kur{gvT);Z>z9)awLO4agcqnaD6 z1EHiXT-{iem1*GwH!$(^9GGwk6*(DjhpXSG;yl^Qjy%L0&Iw7y(u6Lt8WpFldi*$< z1!T?*w&bU9s2e`~e4MDw`m#rl9seJ{0J$H}R2Hg?x z+=DvVIom&|&Ks!9EFStS{Vo&Hdv~;Bz(mJ;pUv}k}jDPjo zW8)WfWqQ-2kB$rV(>l*STTemWwR3#OYp)rb&$xB`-c1jU-};lA$L+^9kMH}s=ZqJh zvw6Jzou3%z>CG%xt2rL_=t}n+brZ*-gWHAQqmeaf>^wFO^4McajV0OH&55CIn>|;3 zaLxpDa`V>lRnNa{{KnqB<3C<^=eY4c-BNbLBV&&qs32ev@@8CuZvN zPTfZO3f*k7jtr}HM2&@uvEk`vfg|*zeLKG^ErRDrtL#OZqkD%C<-Xt zwQ&AH{r>3pzGS@qllP22(CzT|=`OG%TCaBKuCD{<>>IDq539fYqBF<2TlsmM&ErMS zy>$G}-`h3b{?R*qXTk?=xJy4dv3V8d%=a{Yp>Wp_Umo{u=%8KkJg~C*Dr8A zabTxDsq0TK!)2S+!{>adW|DrinkDZ^t-(B)>ZLEdZ2V99`JMOZ=PQor=e@q{+2@Y) zb(h6%t-;^_U%hA?_`uEM&+j@k-uj-K#-TmC#*cpM^Twr{9~(dO&d-gr^)(%@p32i% zXY3p=(z157z7Nh_U;M4&XVNax?@Nz6HjOj&wVvr5hQugGd-bMw?B722>73MKr3Gut z&K=`hUVfD>hW*ue`^WAXcj}3z@4MsV*n7sdaglyI@r_p;9Ity8Z-Vu=LhJu?uh=?1 zwq=iQD+OPHDZHX=FEwM_zI+p##!`+YzUO`5(tiMmElLDST%5Q6VVL~H& z-biuQ{?%Q~bJHSS&KJ1acEf$z6)a39w1 z(j3yQs#|m-!y7XmvhbK5_r#lCIQLLLu0AnIh)p3jS9kawMEb$K>*Tp7C0}fQT&tXQ zb;3rzIMJhD?lV`x)aJWKe5Z!*T!PGR_%N>6J+4l1PrOWAoO6+^m zgPHM*W!v|dVp4c(aHWwadG2^fkS$y+Nvzqn{ES=mP%ZDqE$4}2aM)tecySGnmSN)h z8qVu&6T@g6N%o73eoc6es2G)t$=;?xjct5;i^j*Ik2fxsY#%q=@~-jWt^aEL$-bA2 zeJ38P?>N{{;T2U*ef)0Lg^r`T1bOdmH;n)KEnhqK?L9-s9mj9R5qo;dd}MlXYx9r& z)*a*b|LF_HmAbvq4-N5@tWk14@SxzUt@;$6YA?pRk1f9`l7;(+KL2s7=mHV0xd$n@ z2FExY!J8It$LzLAOno-5iHBPRFmkt+>s)oiyf`)D_`Xkn_`l(Q`M~%uUvY5k-?u|K zlLi`e(P-L8#G1q!^N!#6{qfkg^T+;kFVqE>C%jJS`Ih=g;uGW5_x$v@=HTbYGxneF z{PG8je1WtwM+EFF)SP4e*y1x2t_d$i8*JrO@FMQcIu^nOWW1=qu@ zd0HQ|LX9(Y!DkOYT_Y|C%Hxaur6uuP)yc5E_^+v^_R0Oo%4Y1wecwHw}Ni>JygjB z>-RCm<-0PhW#j-2tfFJh(^`fjQjzlC1?BW{{hd0bHSef$wO#XmmoBdD6gP6hJnk9B zZ-Y^1EiaT{RU~5Zw<0q>EjagBAqk_UOcv9ebEaTtTsGZ{NnjayRz+ZK*)itWieaO| zXv6YY;-+5XWPMn+oY-Aw?-n}~C?XSX1k%d$Z*iULxoLi$Q~X`lgNbf>_xRwx zUlRwbdmOwT)tJCxTIVW{UZ==ZoS7JvZ4yXq@SI6f z>ef6FnassKta(~n=nZ+}&V`3{*TzwOyt+$k-kFNcdEpVx&sfLkunOm0KA+Rt z#hj!tr?^1JGMsZui@hNi{B7Y=P5RH@XJ<;Bi3`8SbZ&Y0sGdYE1?x2Dd93BY`#e}k zJY0}la#?3tHo>K&f89?c9u@CnGjBT=Si#wrYsL>mH?Uqr!+- zmJ59Ynt#@C&mre`1H6i1#On7(a}GA}Vc*4Qe~atf%CT*pL?%A(9rRo3nol3S_4DKX z=l<()%a(J-ZvB)APk&!qB4N$jHg3K3Q{$?Go5$C_=Bsj!HzCeFV~+38#f8u6L$X`+ zwUU4T!!H}#HD@?3+R9@iVE%Hyi1hO`8gOiXHY=g2G zP}{OWH97ic6!7FkVXv+h^I&#LI->(i2Rej2yxQ}4UQQPF>Z;Jb-MZCEGV{~H%0b3~ z4>{%`Jn}}611Zy$KQw(Z%K^DV<~pWr8!&En(t{0zzjs%#NH`OnlNaFkD(=2LswgnF zKDhP9F)`I=$>G5lqAAH=a=|^|`ku07p8igvxXFkEo0CF51}7)Pr0^JaPH6dZ^IpB+ z8BB1%l{LgffRoKL3ZMR?jdAqgxu4qh_-)cBzYWnbu}Q|Vh01gVga-clmztZ}V4K1o zN{&q(-Kw#@y%0$;dnTR_avVsiOPnK;40&~XW-)U%isM(%keT=tsCK1S?R175c-&Ub`eASR>fA(6{gmz29kLZlaXR5Ok1&%^O8ven7ofyZ z>NXBb+41uiSaV`QFU*~wx|ndLo@xp{Yf3J_MpapjNYHm#xO=!7gi6gGiWbWSxF z_lxxx-iXV{UTVczxN^decIyh6wlh+kGsYP9=;G4_SxS8DWPvkk{I-Qn`s6iZ@+@2@ zPY%rcLSWbHoR0@_Ru_%aHqFXR96mvNE|C97;z2*U5DC0a=906;sLUA?N#JIB&3TDL zJ=n{?t&z&!f!fBAX{_`mofF2C3mY`7?Ylw0DB1RYmZb(~87VgZQZ!Pu%Q5|LAZ(;S zXTOEK9Z)xv_ES}SoM{BInQ$jO^w^`!o}A9>oRliqOrX>yF{C+LJ7cG5s{#*p%ROFU zm~nLA8D4hHpiLcrYg5j zk{7t?0+=*gwN{<8edjm_EB@=n8(p6g`jfyg<)JdWIgyhA$A8Z`ReesiOY0OIIP`N2 z21{Sa)0^8qZ$k!N&ht1=J7=$+FA5>nBE?0=??=m0ZP4{*Y;itkHl8HBQPa64TzKhU z=Ry^~0S;Yhq;h5zhYv2`xl!Eb*-kA3682 zP5fDJHk=dPgnV3S=tt$mFnZ53Z7t(NTQ|;R_G&t$>e73lV*&0U`E`U^(KvlKM zN_VcB-eFNO+@3pV?+HT(7?wKlf{9O|``jit3@C*#$K}DiZ!;@ID$%lM>jk3BX!nGo zpU#OKf|_kwT)74@XqKS{Um^}%Mzpo01@2}qJ4|z+sxqNFx*@rsk9=i@hBuCJnB8U{5b5?w6a|%yAv4Vj(96Wwj?IP@E-a8yZVB zbCp-+A~*}qG4^(qn_`)Na_Vh@$97pKjDaOw$a|ocBAk7)qdoG~j3Cp+28~ zM1Ra6^UWs#0!TlbYjKCOZM7+EFeu4q`jXg+p(Y+kZ6!hH*f?G`Yer*R{j{wc#GU6x zwHz;q!A3wV&qF&~B2TQsITE&!vNPulg85Bo!pO;x0n8bL(5qbh4XktFJmVG#b4;xC zvN@YMJj59ml{q@)VrDY(T$Bx6Tj8u$x+{eW_I(T^U(UHX7uY5ieEpK7|KjzU0iO9A zr{h-c-O;GwgVcY2%LP~aO3AQ?^Fj!w4Q#0foMM+6t+_^>7&c4CWSo51YVt1|+$pD! zcaDq!ZmcULu~O#okVHnSoY(TjC%(2b2w80}3GzSS2CRHa;%=dtDl`<7&=52po2g-8 z=0>TFsk(iHZJ&5x;r>WQR4%~hKxmD$tThC(e_~_DcbzFjwvwGlc}%QRT_!#!LnT>Q z&K~}ofVcb{qqewv{WWQTQ|vF<>e?LNej}Kc02)KC$jFyO>AxyrTEMnRZcbFL@xdc( zvvrJ4;N&Wu)#(9!T9$YsOGJ;`+$vM7Iu_*AuDKk8IXg@AS!%#_$97N?*`05Jqk&uq zU&uP=PS0$BrbMFF6pI;=5*u2Hi_N?qmCUA<3z?pBorAM&gNpZ*!4=#&vkOv5G5De8 zd?RG|QvlI_2Z=CM)n#P1vvF*3lo4Y5IGnPs#6P%ew#1YzcTJ{9kjYnVM@=0t4i-cq zhFmQn#HEtYoEu>>lHZgII21N^89DTT1$X8w z8TP1L%4Q0VGCWZ??!?*0m#}?g%RuIV%GQuYVAIkf+>`}Bt%^vOyuar zQhNHz9~$Uj4m_OUYt9WIAH&&BwSZYWSHUf8X^d_AfFu{ftvQKbI^oE{jA`}1!xWn$ zX}%L@p*klUa2A$refC&H98~ehFJZm3E=VG>jrP{35eBFb@axi*JoYzd6C0v1-Hu|=c3s})LIBsC zwUfMaZL^MTFYGF&z*Wtw;-D#s_SE$KKfCp|iC??g^ux`c<$7q+iz-)2` z7XdQr8*q+d#?3KkkmM|Y013h%>XU)ja29)sTQ%XXn{$Q|YGSP9xpP4*sf(`b+?MF5 zNq#`UC@Se>@h)xb=k8ORaHV9P;1MsJ=!06)c^y!tnnuj{)!gW~&DkJ;8m8<+kGxIm z9M~(kWB{katyU6A5b2C<$O$)LvCmAZ8L@0c}+q$xp>ssTv{bT-rso~0g`=8u)^4Ir)l2RGcXXSt3$8Y4t$KYK?i zBmUVRvkBL*@ks|2&xzi6b8(VS;B1hA5ei4;27dLo6WbKxo;RAk^6^>9|Dq_Ic~Df-}G z;FxnWLyKACF6Kr!S}9jzmcOe4XN1>g1nA=lQw?ndfZ+9w;?Z^YSSy5wAabHoWp!6qJPgeRS(D(Pc& zMG7$tIjmf_9avS#$uqu~Bh+h(6*HvCbE&L1fCLHNaXj7}0sOZed)c0rGY1_rU?jtza$H66X|v+do1viI&~`Y(0}@w6C?x2$X2mji<>~1Q?mtev8?#r=jLpX z=vFx+D<31YzZ$d`khDF{lG)0eg+a%}5H6@(*4WJ9j2CU@XwRp4Vif||^81@u=h7)~ z0VIQk?VV(6=UnN_Lte=``;FGQBnRliEj#;H-=BKTFpWT&X0YJg^UccQ3|>KtlY~po z_(y`b8a}ez{b*G6z^b*DvwTaXJ-#5#1zjW?jh{3oHFNf{S`fw)6eg$VjDCWeIaKg@ z{K5f1hc!0A+F4Z<;v${Kj|PPx3){}~>YR&l^4RtzQ_$1`wIOGiDTgy>ctChDent^e zcf#DjmZfDm_R~mT+O}FDA_)87PXV$Cs+qVkMeX*=Vj3yi(;r-MVSz4O^N>;8Q{V#ONUZoPQNx|WlMW?UL1Ey3aymnIUY`lW0umKOD7Ti zo{9kxPLfm%SK7;wR|`}}hSYMk zCe|HQwFKxk895@!`M$Kp<)im(@bo< zY5S#(^(Kr)Wx_S$6vG&&;G9n~m$=~;Ja4lBdpRhe>%a5p05LNssu~05OH~jTCgvGy zl!@1q*328Xy(|=@<=Nv8reB4z5(CXz&H~7Rf)0cf;61L)8*FG7=L&7CGIt&MG9Obe z+DHbrF;;ScD)FgEwo0R7V4DLFChjvpvR~mW*~~dAS<56_VlD0GJX>RK6K6VHg-{gZ zR3rJ2OqEbsI3Oe@L{-?js>*_i$EW(vVaw2 zt#9!+f;O$A5?T8sMnh&lSr>K##F>bG(Pz6$KD#(qr=D{aX<<(?f$7v4(jgbPYFlo1 z*;fM?zqCQr;}OtYJIk|=O~oqC3)H|PmlN)O0bmSpCkEEd{EHhzUN7Lg-Kj@bfh2!J6=B1GLBBer z+O{E_{&nAoV-s!AhjC#S-=1e=&)iUN#2NVtXUxJ4RRXzYf5r{G@JeNcvrNN@${ZWS z<_y}LZ#NJLH?zXn+5}f#nJ}@@7Mv*;)o#v?VawXkmog5nwiEVjh;AOgaBa@$;TaggxJJWdze>Q*n@5JMLyyuqqdVl z`x>VjJ?Ef+=v3oJ)a9IOyBd9yG7CWT>UGZgqJa-@xQW%gY+fAOr*#uy(5r7$C%ygj z;3Eqc8$eyE61#4&m!yqU^#mywC&vy9P`VdWy2s;HQext*1e)Ng!ZBAABq~)~I62)Y z4BHf-clgW3W*!j(#@gU(aBYiC1C}WQ?D>zbOp zVfBO{u4Bq+UlF)r#a;|P9A&u<-U`FhUdA31f zCW&PeR_i$XNWqu?5U^|eOCVv6GwRVBs$(N_J%VYh)a*hGp4W>ZSmlz6jTXjJTVrbv z@{E5uPI^@)k$W-a-X=J!1VfP(c04Px%06AH|c`3cxhv(HFs47FY!F3yn%@St8$v-gb211iop?7p(BOm7??C> z=}vo`oC0?m2jMv-4(*M{nnC*;U+21W>Q4=WI;lXE>bG~N;OvgC%|-e8*cOy?A^-mS zvku##(ob|mC#G*pv_DeGtWcIRkpP_X6fcZyTDCN2+-R^d88?BPOe9|6j7l*au5d9= zwd4p?Obv|zwZq7vy_q>nh>nzP__tNMr_I^6it}{l93&OHQ|D$RAtOFZ&gnBmWkli~ zqpnpGw_;~Z)TZzKgT4lLFYFIQzie-P2`fY_f(x1pVewQjWvxx5n)TqKFh$oakf=4m zFn#<=Zl5){pyFlpGF^`gez4h@Sv#UZCMPUx#m0czSBYGl)o!(AZJ<3myJ^#QR9t7% zg?hEYXdLI+n-bcwwX=_1wMm{OUlu1VKHh4BC_dU|634@JRjr(M60FX-pp`FL?7_`O z_yOp=1~y)6vD-%ob16Io_5xcnqgH<$(;ge(+7_o7GBpVxqvCCwU~gQ>YqI=x*Ez=$ z-oy)RVNJPE+|E-)pZH~*X*Qv-^|t!EmNQ}}#WA%}S-Z~7-CsX`KGyA2oElAEoX;_SC`fm^A(r3r+qGPKF6lmeKobGZR2nz+fSZBanc$WJE^=D-#h=k-tJg#=xIHD}5nLc_)|drt+|ng~lcFk;nvj~sF%UY51&{{d zE;TQx7te~mu!&{1;U8iRC5$4vvH)d3n!nC5pB)RR#4~osPM`uWTv`H~D3X{sB^dfj zR@{@nuA`2$yFx&EPa=dfc{>rB?=) z7+*&rkZY@(jX7^P=RgL6aD`>;#-%ZZC|rU)jXCF&+;TT(VR0cjqX`H>*^7g9Y7kE^ z+c*~`LyWCnrZ&}+3*3@(Y6XLhn~7)_VV!u{1p~(_3-zW^OrxF`*KuU?q0yCQ?<5vI^i9f9RN3oQxxh zW%H3z;}V6p>0qkao`N&DOU~vZq2p=?fho3?)o$#W^YS?HF-*suPXmN=20_kG&3Ugux-4^MRzJesz0IA#|hAQ`24o)pc9^| z^hIiT%MOzag#`#Bb1fU=sY)vG@Xt=z6<`b75G%cO>C~|imy-uf#wKPXl$5e`hl>Qb z*72)W)XJvLo#HN;?C=PO*p#K@)_BXNwU*njEgdKZ$Su|ecRS8@T|?D9>{}mfE@{TT zEoGPwSO8NAE*!9kPjjP<#6y_@!^LgM{eOYWs8#Ztvj+@_Qo3g10s>Z2fHna^;$*}Y60E}yuu7TYC%^4Ze zaBfS97F8PdlW|TWq?E(FynumB60V@T#Kyi3j9fnKY~oECAyL?N##AK=N1|GOU0s;S z670srR-9#E<`RRkuGIK@VJqLZGPb>g(c@%XfWWr#JU5VKB}}~FR_wA5u4Jm%d_f92 zy|&Vqd7UE=J>a0Kc+S7Y6*IpbiWS)AA&gMeb`h`pVx1wvge`WF6DLmVa@WUpz|#>s zHezE$)&5U8=Y&hn;9=&j%UiJSljV@aCRS`6nmv7|;r}xicSucRTbvwGU7rgB2_pXC z3~tG5&Qx<{ZH9Bk73=t8*R>_*&PBA%c|r|YcN~sEY1H+cqhSltVy@dd5TfCvlB z)m#vSB6J5#%UkA!%5*%HzoF<0I&bammLarh?S|vmj^No)o5`^e8zZW(1h6rq8N1atjIoIh!yIjj#6%^3}&d(f71&GQUoRd4W-~@wxqcyfg z76%vWOqT_A8zpJ;xJ+o()hU+Ho10*qLj{j0d<-ePzMH}vi>Ucm%y6awAGj5-QcU`m z+p@W*Pvnf$L^}IBoc$!re_3IO-)!A|DNnJmr?+g{GIFsj-+*aLaM?vHYwC7v#Ky2n znnGM07-TKY*{8=FC?gau78XT{5^uLG*QO#wu6D%s7bb}ELXClBeF#(hs!UbsTP*;n z>+Hp@vSi^yJaK&>+9{scbq(x{Gkt~$8okzHOXLYMamEJA=7)j*13z(YiBu{Z zaZYDfI1@vpOaUMJW@EmRz|?rtURE1&#x@wvW5U_DTqk_%Cp;=dZqD6iAIo)|B{v25 zV^*bc*KuCqTOQhhiw_d}#!;<>%@W&s?5SX*m$5M_pVmy=VuO!OOWxKqXC&Pp?QI+x z=q_ru9F4g%sc5W;j|7&dpL1Brv;4hNJGofo#a6_|m(uch{yCG-y zD>&v)G?7exlq2J!2Rr);x&}M^ijEg0vlB@X{LC> zc3vvauE&xsal@O|f;0XT#)6Mz_#kP{(JpL&QfYl~iGqz@#>HaQ2hNeihDbIod07Wn z-o}?l`^B)Z#d4AM0gfmE_=}lpxqakYv?I;z@(Aad9Khj%W{THeTo2TYT{^ z-bg9lTVB{iFT2h~Vxf;u5tbR=MwmFaB+}T2^K55hHNg)j*%8(to%ywOK9-WVh4=xexfK^#)=bCv! zQ7!Wn_7r%sUX4GYY{XeeU{CRaz0q+(7-E?-4RLVJyoV1A`;}_rBAq#_VY{-Ssbalr z&VXx=Q`NIYHnjGHk|+fKmbWZK~%9UYwc!v=Xo(Na8+5sb~5Jivv%SfdmQXj-0Y%_ zIUBGzqnN=}jXWq)6t4X-^@2s_5&$*7s|!R-sZks(RjeIHd#m-^p3&HQGD=0Am$AX5 zHep9EKz0QJjiibIsbSjYRV#_4{KvO&V@NwX<4TuFmn{)&=UJ<&euQ~!;)jn-B0H~& z29-|si{e(BD|obQ@z36zqL@69(WeyovGA$c+*$(+iz{t104mtj`;Wr}W1ZDFrD7Tr znl0QC=kN+vTy1Q>^_(l-6s&FGmHHIL&9$6kXIz3!#);fxvNIZt&ZP%&PBrc>8PN(kBr}joUK*>JXSg5NimjwboyA2LoosOf$5K}akg+!dExI0_^b*IWu`YRCaQAG1(f z0CWudpWSHgjqiBrL*urJz0FrRH$W48nw*1V zexNo=Vy@+!xEpac)2G83^0LeMZAT+cWv1z4=aL*vc_v>T-`0ndTlQUY4w!Sl4p)AX zO}LED)Lw6#`9`d+#m235=1b0iik&zw&AR8ASK&POM3yIxPI+3cbF0yXYj~j*V4n|6 z0z#9V4oDRuDo^?oVkv448e2RW8*p*K)Q1o)#7i9PmTin}pYOqG$|8Krr`xFQg05`6TWKs6#S=gIG-sQaPtD)N!e)uR5iT;>P$X&fV0 z+-O8L`OCt`y7$?3{(Ee&V6u8becP?nKqA4`4f8 zV3lm8o55t>K^G3MH%4f;h zB5j&;w}G+?y2fSiKe|i7qAo-HPnldgNs7b0OEo-pX>bc!i~r>5&9+R5e^-#puzbS-EY zbB{Nme<98AKTbhaOXQmAeAkI+)niyda(r@@}Pd zPq_Hp&alBIXC5wGtS`;eqB^J@xbpF7j$~DGp;J-ip;*~ zXs{_8j~_CMWTz{}#X$bl**C7m1}~ZTRv1)I54#-TWS8Qz(w6QE;w(VJYSWy%-LX7& zj$E4!*177o`-8v7auP1E4PI^4pOW(eqsPxVhKl?*e9vFLH^?#17`_I=0FT5#C6q|ItA!=V1leEyL_DV%cdOh{o z%C!iyhcy5$Xw2F*HL%skDZc$?Y-+8WrNLx8m|?qQo`n4YpcMJ`tT^gWd=+s30Gd-r(a_CFj??mSNibf3`+NE58D zBr(t748z1{i$3khTFW6{3hbq{H5DyU1@h*_RuF}~yYPZQVvT{)kE0xJ+j@M~7&Sd1u>;xap znN6BU`@Z2FI>$akpEzqRb*BMdEsHQ#6xym$x1^+hORjEAAb3xWMJ)hNiLDM!HilZo zYTYdT0&wlJL~x)0X=_c1I^LvQTam$k?sX1IPn$D**Nq5sVP0EKiY(rQh0~7?<^G%T|3j_~>}_Pk&y2n;+AB-I@z0a`wD4NOg1q zskU{R*^*~HQl-|p%8)EL3aeO6D_10XPG?0@H0kv}MP^yQRFT5+323(S8irE3>1QV< zpmr!!e;N^6J3!nAwe70A2pmu(%P)-7kc0mi5P(tu)4`3nV^UR}E8>0fWtTRm9rzOJ~tiRZEW$E4qTevcn!6%bhuk91F!(2&AxZoFFC8OL^u~^hXpRM>&yJ|IeGtYb6r4!vL*CtANDJa+Hca^@?w=DlI^ z`(ovb8Th-JfhSKKA4fj)%j3x>9??gI`Ws!}--GYk^En@FE60Q+J}z@)%s!a6do zT>Z0@bx(3P2OH}BEi1bQc~a#91~TdJlQ zcv5hvdcgia+TH`+lB&uY-<>lwIY?@PB*_^hBa$Quh&Td*2>}r>4kJl05(NZdM8E(# zexD8wCNLoiC?kvkaa2T+j39K=Is8}H`&8Z6uYvh}^FQ6U>YTmTUVEK=s_NCf@80`l zUGk=f9{}|e7k2_A3bsCEAoisO2$Z%SFS$nYV%oD64eGLJA)j=^r?_$q-S-9gAZu*Z z=|hHwzvy_VW)h_sE$WK~zlgJV2`P~YPx==LehF7iws`-yH4o*@DeySP+nYnb#fFV( zb#`aPN*2{?jyAL(%CPaATd0$QAhbL#gvqo#Z}@NUKx}6o&MELFRv7W(+~M01rOCW? z$Vmk^im5ojzgMf)Zc{t5x2errIJ6+7M#UgvTSEk;0DWdfON3T-g(;i)v?(#%nYOs z`~QaK(o2!qSH7N@I^cPXj^K+I-8n0i@SbEH|Dxi7Z?nnrM98zv5NzA|E`RB%P@tO$ zWYA(cyFs#wby3UE)SB;8OHYF@eT^BiK0_+u+DiYht1s~?x=3VMV zM=(3dMG8`KuZCVhuxBj{?_y-5xeLO`Z_QPG04Sd!8A~p{E`~jBSGqg^vjTo_i-wI; zbBiH%xx5-%lo2*C3O_e-3@uv7cSGy!@RMCEWU~3Z^=y`jD4T3}j8T z7)g}<;WVSR!{6sE^v~v699J=w4Aq?G|8>or3q=3F@TRm@gBthCQ?~!np4t%5PIijS z0{_2i9+tPGUtA`Rb=>1Em^~B6Xz3`ti#P0bu1>0|1&Pasx$qyOeT^Cbc}Zx}T%A+D zrB;{co|`$qAQ{FjwibjUKoE5GXD7NLMU<#D^eNcqh<(XUlUYE zxDG2cXj}k}3S|mx1;&O40PYz^!~$>{#hVB}AxxOfIJbdkzj)D?D^L2OR8~3qHzTY< z>7e%HRww6Eys)K|OpsWm=f?9=idG?y8gCAz8CTau3+BZ$&psP-=Hpv`Fu#$ojTt{F zCQX_UqekIES#xWNi>c!+3-{y|bTQ4=*RX}d+*zNO)ZFGsNv>a$w1hej*0sw*4QyOu zwk56~m1Pn}vlbo>Y97o37_n@`b7lxaSM9|$5AtS&ci4(zNt!EbOW=guYJOCrSXgAl z0HUantI7a19VYcGMx_%z{3LoHu*QEJ)(0y)|Rn5FO#M*EK^-r5-jB)9DCdMavCv-X%+c zd)PEtv+?r6&LjBwXP%CkbLQi1)|el3jvY5Prc9aaYo35ghTbsTj2K!AA`6;(Flg;G zq-J7h>-98Di=0Z!O{clzH3PS#5F-e?V=f&_(7eR;6IrK>#dXe?t2q_CY|Wlqo7a$f zXnvdu+DmEnZ{VmMQK|`p80oPGJ~M1JJ7>n8p{XaYV~SOE6O+8mrP}1d$Fs(4WX5v} z)=mFBmIPim@bDEf(WU_sEzceG6~<&W@?I*?O(^!(OE#am?vYSfQCLfQfRs@gYD1qJ zv1m*{Zg!KIado}yU*{^bctv8ZCQ55+t~@N;B3|bR(f|hJ^cT&*%KAAu5Y|-Jw#r90 zA441I3PS|dXe&E5+@r3_?EwQCQZ?u2Mpb+6>2xhf#-T{yC`$F@uvd^Cx5rM+zUG&B z>y;$Ka^i#B&ed`Y+2s;8hdxh$myyYaXvP!XXP^Fi%vrD~M)8GXT-V1<7#~w6PvqBR zpz+9Ybv)u0Fs=!6R4r&zP9$=tt4D7RmemtOGPK1t!#4DOj;LYk+}CF&XEAefW8hja zS*{gr!)ngCMX(Whb*~_Fp zMlDl$WGBXJ$S_?8*m1?h)$RwHXwHYPwRC7sL)SURalV`bg`$>qbnyO;fmY=K-|fWf zl78Z=ub@g#5Lz*?kLMfK-OTZZQu3%2h(PSdjJb7HmBDlOtj~;kaoTSsjd}zj21liCe z0~`J?mymR_2_^kDONCQ#z6Js1USG3bNdV@_Km9t+ICPKr^$J_WUw-tXn7ihBvDqu} z*ly1_=J=yyi?x=AxcpoOMe~0akl8Jtz0}N}Ud_Ws^|p8_uv!8<@~a#?9GeGDG=`*R z4YF8{;w+fW{|KkM>L@+Ts~BS3sz*QLz3u9(%F*W}@H>Lo;%LWQ8U=L$gt2BjxwTOB zoKs!1wKRk|M47ZkCMJX0KrN8TjMUW~bDVOulmy<)f}K)u$QW$1r0UaZWCA$`iSj0| z{Y08eIdo;92epC#a4hitaB)D;Y$n0u9-X{9ONEWvyA5IXRsx?sSY^#xmKOnmdZ4Az)#tHaF@ff zTM-=MATRzG7D08axSp&n06J(4;`-G&^TGj#FJ0Ep}ZB7+z!obp7;E}KM)t6{riBxGLfy6QhB?irNLr2`4qiwZP{S3@n+{0>StXOfkP#ujiA05{|POYND5~4gR8nR%|u_+MC zP6eSWZjG^lv$%<&nQ$`brx*sTtJZ@2`VVdxiRGi3YXJbjl9JBF&l5*jGvP0_e)da5 zF0$(^29fo9RMoV=3q@|~3?3T|*Vhaqp_IQEFPY>ttG3)w7vpShdy{beJWq!EZT0N+ zYnYlzUL=GFQ}g%O$1)SSz~rVVTWqt8!q`WQ{u3g=U@dHeL&fz@%+O<2hE*>qlp=X8 z1KSQm6PuoD5%4oB3nh9su;%aUKbtYfYVc#`mo1Bq4$J?4zmA>^T%k z0eZ$_>&Kv9Iqhb74A7V}<>d4f)+zLa1}5V8U|#K2yecj&%*`h@1i6uui@?1z0jFxx zFC(@t3~vkw)U*F|n+mopnhpqI1Rdl>22vDn_An%Ga??1_$ZamhF%7j6&z&^W<{8I= z`Lp8}zkMzqm^3Xu`sJ_2r_VSkUa{!+ap`%d$CmqlAb#^G-lxo)c)gth(fA2D665-C zIJx;CuWn+HoEZKl)qB4Uv1&mPJQ!RuvwF3DO4-%f5{lF7N6lJ@q5yBz!>c0F z+>pBg6-G|oh)7;?3&ao^D}aWkld2WljKIpx81|W6>QpO^Nmr8;7cNlB^}%+%*Kf8`fh;yW8dlq5~aElmRmr7CWEq|dL- zd5{z@?>Yx1Od=lcq1h9ajXFIBX&rM*ss(szO2ydD6Y&n#Lp4wYxvjwaoKw}JcvBH~ zTouY`dC+mKLs5iZ6fZtk`O$dGYy6&yL-B2v1Awqe&I6ny`Z*kLC{nSh)DwGs~N6ED3Tzo8Zh&b%%7988QellQ8Up}a(9$qRq z2rvb3&>{zUZI=^aOI|+*BNB;uK&VDj}ir4t_Psik?y#m03&OdFC=jdf?=D%tBsh2S1m6@GuwMjN^7-{Wzvi zk5c75>#Qj4GoD60l9!Oy%x&pId20xI(NdcG>&FsthIU&6 z$Hop{XXH=>PzYp&x;nEq)Ivw{kh?Y3LN3MmxS$?zDWwR(hrL?rAX;gXSKLKvHB`c= zrbn~T$b6}ZAXQy|aWQ_ZK5p8yE}ScX&x^$jiO?Kv?t&&&Nb zS=w{pV<_v(dBRsU8C*ZcFc9A4wjl@94DEFea7bW({b(@@vG8VSvl-B6nZK{6glY8| zPXj<&ngW7Dy3K<8bfDf^TGnRqMw_cfPV^y+l~{z6PZx)ZVj}hXEYx6gD-GjS3)suDcC}Sz+0^q! zK}wlM1`nwPFbdE{LBmOpdWoESH0GTtULKc0Vn2EGw< zTuhoUF6PadjSnS&7uP?jE4{$I@B*)26TyXAmgsvg4FhF<3uTR#;s>&y8ghFfuzW-+<;To8t6 z{m8G?NkEP{a(Zm_-@Ha8=>WI0N=pC0ra7CsBxM}_WdsJ$N}CPvCrBs<>$*iVqUt*A zk^Lggt~6w)hua0_1_Q z)iiAqh2;7-?j z0cDF*R~sGo&XzeD<@$E(XO+Z?)5Kl_EJ&6=r-CsU)PS$+2r*8`ZMS~HC4n)r2wUSi z=9tjjK6BdfoP5d*k;H3W1QS$o=<-cn#z6zWjK+kO)N|5EN38t>k)}v1CXWZgks_P1 z94v`DtE+W%5Qt1r%#0R=68nT@7({`UdAl1sOow9zWVj|M#l(RJ6RpN!lDiPt>KQ$) z`Aa2Dy%t6Bj?(-WjS)j_9R`bJEj>-FRM zKv~@N-7m)8hnyPsKKKL^#f-l{9ACfg@_6%pyDHD#Z+J(1{_Ee5r)GAa_nh2&{wJOzY1SsI!ky->nfPSFxYkc~=9qE4kg9X7U(cO& zE?#^3>u0Vc6E`*(di{t;%k?8RkzJ1l`gP1+s)U4WZ z58jcelWfZ47~j-oym$zvGEXX}rZH`Go#S1Yxar~gGKTS4D8Xdo;dw;c4-%k6#lHJ&$V_uys59(B1zLZ#n!;@y+}GDxL*1o{S&ed_$aa)FH~V z)ob4n7hn5-<8Mz-*ONWQKKsXC#0O7&cYNbpcf>7UybPL`iNj95Bp!W%Uks!baE)`V zwfv|>ohPaui^!IR~ebZ;-Z3n%!-RE6(<9Fie>9bKDzd-i*ecz80-}S-x z-uHhNU;FI&u?((7=X~ z$ukr8a5rCnc^tFf?#i>z8&8POeeL`4kD0!oB*9;P{>^y%iD$(Re|%?r`LeT==R=qL zTRcx%H2n;0eRO*3*DoZi)@rHsP`zpHly7jALi9ZhnfnUpj!O-<%C?7@TENOVD zW3GYSakgY)PW@9-04fu^#6Ss;Lp+#<8y{IqxXwvAaJuhfK-C9PRUgi`CQ84!dHi#L zob)-A;hHm*xYxf6lvS$at{_`Ln0`%|eLa}G;}^uy8J?LTgi|Hb7z^aHTRmv4;M$W% z+>GReF{Dq>`kRIxmjaz|LOVvU1QZ|kj@JxC-grTpN@35YxU_1QoJ5K%iMdlZdEq9K zTUy*J($pY?fWmbVM6-F%w|9y=Pw1I*d`mO}FX{06+y3*`>tmOLj*H)p-z+Y^_|vi5 zE1rzEobYe)>`Y!}aG{y`WL$gZo8onEepfuP@{V!MzkW8hTl&E`;f?#nSyy}|p7lLR z%%3$Y9{KT?;*)^X@@r^LJs_l;{l_nFvm;T>`Op?k$AKL77AJ*PDnzlHqk zzuy=qyy-Qu%YjG7V{7jk(;mA&o|`>e+<8`Hbr95Q3pe^c1{YsHI-MdDkxgroW9_){ z8k$RhUXC0mR>wy2CJR}6ys+Z`OC56#sx;28W0~PhDRLh%9ifkR#VU>cglhJTD*SV!l|%2iXo1cWI!)lpO+>8^cFmIIY37kI?-~>opL9yhy}9r6E(bQiHvYg|s6`wd)-ls)cmac~TqzGf6ekcf9nqIuj>s28hpk zhP%!gOTU2HabwF6&CH*)+V>8|IWzF~c(i$Q#{{l4@#j1LBevY_pt$T0lj7r-Tpq`5 zyL`O&ysPk{62EmCB=cv)cfR-$T*r=zE1q6HK7I9P8Uz*aKkbWcZ@IAjz)9?>&JQFpPPBRG4=Oy2*!<> z>1pf70p}|r6=WPojv^>qK`M80J3<2k$=R@|G8Ur#wJJ1!kGpI|g*d%%qPozTj>0jt zr$INWX)?NqsK@<&wPYFgnDdcAa{gnek1Qsvh78h?Ik+3Leyz^L39F4Xlh>@JsCZ#b zSOQf)_S?V3G}o~#3B6QBv@qt(cvcA(Ef}MhY47>QXJZe%kpJ5$Tg1gzToF4>`enT3 zhHu5Ayd}d8*`gVb#q}2+7yG^OUGd23JH}O4UlH3c^~*T%sD0z4%WjV6=J?6x%)dVs zH+Hhv1@ zm@)V@;*7t>mFFBB2OayKn7z?!kms`4aQ+wKZHMm_ANt&PV`kn@zVOuJantpmiamDQ zF^+!kr((;E*NJEG3xip@ZO?gPH+Y`7Vw`xlez{(>Da`Aj<xvg>kHW zGBAx>pBEM%dTsTP7l5P|FZ;0B)UhcajqN^#^ze%iUUY@#o&&s7tHp?ucBZmQdaKdi zj!zoN5SEc~rfJdY_|-ZeRKjY~bfLf$3#051YCk3= z5!i5#0=R@Siqjj9dGTkQ#5ZofRf;*yp;v5N8Rv8+(YS={cIx#knT4lDyL98%5OOiU zwJ9xz!V-^W&4V^2Z}YJ)(>RC>{4d!`g6U&VZVx+Nr_WktcyEW-WEjSmh~km|{zZK4 zyEn?a>1r#0Y)1V4-v5K~A#wF5J`p>-a+#Pn`lHytmre(i_?j!7NN zZN;kxgOHk|1~BA&H8G%k(x}FyqAu-ap_}K4&lNcZX~7DocAc-{HkKSjQ5ycYR`a9^ zaT7GOF+le0^mYYZa-CbS@{-2$VI+KVbHfG}3IfQl&dMT>5U^WDX6x6PVXBQmHLpxS zLi36(dCVpWvWryS0>jvp(M!l)6^uzdRj(lL>#f=W$ZB5Ifxj#R;Fek zTT=`ib9l@xd5LXDWrNa!mCmuS;wg1zC52k@X0^MFC4mvg}Bkua$Z(`rw){807KjSYC#82ukfm^SGYv|}$WmV8U z8gapwZi{ywzH=;?IWxvh=1Y22BNvQYHkM1r2nSh9cgg`HK#QFx3`EmznDrx9cb;G{ zz%4@anr3kQcwCjew|=Bx<29tyOr+8B!=XJ*%2`YpHk(uFmtJO8Hz{mpf;|6d$gr*!5&=gOMSVbN zZr+=56WkxHCpKp5oDp%F62;O#g={O)t&EeG!y+pfNBj2=BMR!7{!v31<|{cGZoT{px#)n>;eJ==f-b#hf) zSLRUDx^(N$W5+cGT6Gp6S2JV0Fm$V_&V-}*Wa47#5EQ^!7hk`MrY=Q^tN(LKys#2k zeRmvddT#OHPN`(|uxxM{fUPw4_~fGkw47J<9iAkOtIm;%AvKP29eBy>6E~T;LvTBP zF_g~4!j&KAQ(A*9hmiwKry*fTKs{=ixEWOWa&oT#>=;oGFSt08&npImxQiXQ5}xwP z!@p5eu9EB06e9O6&N_6#NqN5TQKDuheUxt=Y9WUS2Dm%3n5a3I!)OTusLh!yU?4Z@ z<%?2}w@ri|>*f#oWx@X4AAC11`S^u#-iJ?*)i&HIF1+EMIQpFHV!y4|rN9_Hc^Xh( zkK1njUOa@iU5**QRIE8|jhHx=FY(Ne-`)9N(zxT!o5Z;JFT|5iK8?=?j*oS=I{@~( z8{eK=Z}Zq^e`TwvEm?+SD*)tsG?@ZPP|O>pXxE zFKvwN*9rZ$fN~G;ibr#?Z*ZFmOq)3|?KW?g0GO;rW_OLDPda6d*owmI&cIR3!x z1e=ggq;9+Ad-1D3KZ(1U39B42^)`-oY#nj&r9X>D zADyAN-~Iaj_~OrT({$=CvC^bbc!BPRvhTIoCNXu~+<4-NC-F{*i7{>3#x4vP|n1sJ0xzy5AV;ugp27hj-Dp?Enhq=z>`c>^RN=xvPKc{ql zc>TDb-Fd=nc!*n)H70!MvFqct!>HFZql2KqW3I4PY(8r6n1x}VF}8V6J2h$#Y4*t| zdpk{XPKo9Y4OIbDHOw)01LKZLSizjM>lTJp5TC0(aGmSL_?qExZB>g#0s&Nj$FS!K zJ@gyTI(h66^Jxpc#0)t$#7lF{a!_-B_FeCd&aWH6K@r|fE#F4ehwh-;dq z2M%Z@g^ru14Ysy`N@k3^IX}iAQjh!sDDhiTm0kK(X9iOULn_WQm96w*@RH{V1JHDx zt3)zrCY>(WI6Gz?xL$HBkJK^J&GH-}&Ge^c?0Gr+*{xrXOD?(~&O771vDQXA#D(99 zIR5K%g%iv5ch{cfHpZM{V+OI9eD)^-mb1 z8BDrd3MNQ)b&H#95}N2{$5{9Z;$a3S|BI^Z5TvTXZ3N=z!^IC7EV0=R}p;?NN<-)jkEs}@#Yh!#j^O)2!2cILVhm9#r2w?ulnUN!R5%sYBjcL zu+EGsyE}-|S^|f?x=NHV;fJoDSHVo&R&1`QNXUzh-6Eq`F-WAGCBQ^^9+1vL3R{|! zHlsW*YiCT7FqA;H0bb|y`D^_KVT%BVaGSm4=+1W@ZzFIkJ=i=W&%Y+?I%aag+0Xp$ zcIS4jAM>%F{uT{wSvBcoU(nP^de;C}I?#wQs+r6ypAnp~b2wpXmQ6BjXIaaZi9z7G zC>=Kfw4G&;qXjZ&zd61RIPs7~9VpM5Fv9fk!R9`VT|&naM+|+mq*Vb~J;oOp2)1PL zpjYSNuXBI_qk4eHbx}gaiyJxW)G2PNP6err@Mal^tqIb**!l@+&Cc;q-2bb4^j7p8 zPkCRwZOa|vb^Grdt1mZB$ZhvIB+h@=-Eqd5C&krgUKH;+#rW8aXoqV zQ9MaRJNLAGNuU^rO`s*gQYS*F@%d6rTNG zwN~JHWXq#k(23fzK3+m>)6~d%>&JC!739JI%huM2JdD@B^a+&f#}LJE70AUlKvE;` zL0pHVkz{5F?BHq*MovSMP~Y6$jgE5=!d{KIw{~>WN)F}B1e!5K6U(B1N zSvim5WfC5LM3E*1C|EU6I5rr#q^$}}A-s59Fofe>SbVPc$U|}8y|@`4Juyys-x;yh zj(f!Zuh})0)qURR*!$>{;<($t6=%Qm$T<6ByTm!~J~oax;=ovcwdG<2K1TG9M|g#a zc*`MM#WB9@Xk44w^YS_<(Ggp2vPSS~x(L@xN*;+X5Zq?#t%6SWT{nTSX(1I67O7$0K#j+oeIrpdt{&;BwZ%5qLEm5F^ISF!jsLI zgfU3RKrW@m1WF_J#2K5)NF+mAYh3$Yj1)3m9#p!{5r@Vnp=9tqD2+*weqp%Dd6U8! zX)3$`i*0y#aJ{l&q)a(PVupLm9{TY6*)Alj;zsZUU{AmP7O*FR;}V^|&SD-3R&E~# zE}^W1f{Z0nCnq;})HftG16X`zm*&Pnf93%|%AvnM9nA;$if2dp$(=^-$g86w{j|w0 zsXkz6piROMuf^s#oA9ZbIXLDwLp_82k%zrGF8RPaVj0|kjKa5h@_vGi-x|eNj#k-l z+c@_N55@ua{48#|?4RPi_udxgef{lm?@brR=BtfHE`N^YoJ+qJuUd7vSTuh=Y$NbT zQ1JwC!Khe!gSExSNiD*WFmE1iibTy1mSa89AGP!=V)H#Oin!*q`1L~%#hQzz$Hl*k zIP4=w#(K-+iiIbYBk+x(Y@fK{8?pZKOXCC5czOX&d=VeMsW~TUC}G&^6rhi-3aNf^V6QmOJLU8=bIwj6t&G*Ur%=hsV;#jo zXbRPiLqh47W&wNaC#Ol0GBqoLQ3y-CMl{qq0FyB7K+wHH*u^Uh!)~qEr$2e6fqm3N zpr!;6*N7Z~0aJT*L~du*g7#vN4TDlcJ0C7DtXc;eI){$A9M<~Doji;$HR8%q^_3q1 zy18Ot%MR@hZUP513)@5E?c|I2@xHx}jZa;6TC9P)A$|k#SYAZf5X_K?D{T~~ee~+s z?V!8jTQ`0t&OiV3xa9o*gKu8`TI{{~N|585lJ}hb`8aUf)$mQE{$d#ZvHSUR=f%qF zY^)!8{N4mTKbtqtijm)$crBX}JMGL@y|0e%-~B-Byuups?K6KI+rIsyvB3r_;oEO! z;x~*&zyD)5;%)aU#T?vpfdZGfk;t48DeDQIwKJ}rKVX&I1 z{G?|ymL2#BrhyIn(xowTR4}<=WDT31o(9_uSo}Jd_7tX^Fg2~PGhPjQ`jtzDoH;Q$ z*1iC_w+{dW_j!xSnh3Twrw4K8QdnK)(^$OJh06+jqL_t)C6*iJ<%3d!n zYt|9FavYPYp?e{Pl}U?H>rOoXF%SC`uTHOa95Y9@tcB{4M(%3;2<+?7^kCCk)SgrV zVM80o+Q3Y^d>KRE5Y03(U^;H}wtL^Z;;J*>fVW_d#9PeA>i&%0y3bo-y`AEsuiO`J zyz8fN<7KDBS*ITtXI=Hy_|=a;9h%I_wJon&u;lF=EXzae_R{ECv1$Ybh$lz}P zcZo}`JuS9ab8^haZ5}Rpxb7j(f)TOqdiW?4o7Nlmj|==VvsQ;SVolK6{QzuPCY6pQ zlFB8mpQW;FYJ=;?;{loSARpj0++om`Y0?U0@xsEIB!%pydFc9?B_|{%9(kH+@?s`D z<^;i>yy;;tr>Gn{Uec$pb%B#u*FzOSJm=TTK+OQ0qNegWPxL*5^qP<))=7 zVTknK5ZNoQe`B;dpes9P^-H zGLaUbAsa6R<&i-S-qwu6+n6SdAB7u=3F7fv0?kz`Hg(l$vG;+~;?+Cv75jef!*Rs> zu8uqZ>r^};+#psQ&$mEDtiH)kvBxGWt3T|fv|(Re;zo?%p)@i!-E8yN3%wg|`BBW9 z@-SU-!R^ZF4Y z7%|DF^%Il%7-|ykf!3G+^zD?5W~U!KHd+k;@cI!)G%_X~J!;y~NH88emJ+T*k)VV+ z7Y*cMV;n0%cWXP7nR4vW97@;X4%9lE6qyqU;gZ%_& zPrK@4ub3q3?-t=t+>F7WvcZ=a@OoE&Q;<*BsvP5&UO9H$`{3AN*WF_Gy{?PB{^``X z^S8gj6T($ug;iG++iKG`j9qub`#zV{@WhNiMf}Ag1=0*Oc*SNr#c|8v?Ob2GDQ=nY z%D55M^LE=cR^i*U5V_nde3P}-dYi;9yZLRR3S4aCJhe7*vka^l(skE4A0;eIsSu2q z;;eO+r5x$ifhAg!f}T9AbMgu{$n8jCq=uV3hWh6Txk`Wl;_i+)`pjF$GM@n0;?Du< zrDECuAeDWLEhUV5uvm-93Zm>az`kZ_5zc70kQO68g7IitI$r735PxG3`>`V@#DuZq zV=P`d@->f6gz^=pY)h{^E%rKiTI{mtp0WECpNuzu=#sea&!@*GtE>|%t~L#*FUAI& zY!f?gzj}o%w(t0ow=a483h~;*kBYOuc5Zz2E8mWhKR7>P&y!-S&DIgmDE!HYO83VP3EUVYM4iX=Rn1Bu}>n9gCax1`TGe_l4#U#o{@`1Nzu6c+mqbfg- zA@;?r4tf<;cJ7TJSfOd~xl|m2<;GlP;qhjj=GJEjN#<9v3x>V)VUzKG@`ljH=MJ~} z1LOpR1xt;*^Cj)=uVIoWFFM#}sac<@@FFrlT5Vs}~9oe{XaXeK9`B6O%1x>Ab zCJjSLr&9SDnG@iSHZq&nBXh&SR=nzig$daJb(eLvsb$D<2PPbETLO%~wb8SC{6^3V zY$Ey>yzq~>^Lw|%f8PI>m<#fWQ^v(TpRNy5@jG7%y`-R?LQj6B)2e(ZOmInYBe))P9Ufg5#5Z<1n8 zGXRCLpHw>L0B|@XIPi#DHFOlA^+P`FDM>>B7?X^xSCXmjMbDE=(b96bXZ+bia`7v(_;+7hV;+nv7wcg!(R_HzDaoGZ?mX#Gj>9XnXG$319avd#_E73v7(QjHm*$Txy*ByI4 zAk>^NXJ<**IYu&8FlF^vW^7mwdx=P1Ix$pi*23pWhb%@xa{~QZ4Az;bCN+7Hfd846 z4Z-fVRm0foYe%p#!)fk3d?}rO?Ua9fo=scur%e3u`e))tw|y^u`Fq^w;j%b(60Ujt z!+~gH^nyM9mf;$^X?)@J{~G`KC)|I5OZRyX{w{vTB$d&i(i6fzJ`YC|gTBJHY|Cm7m4t72ojJDOo;jVK_I!{y# z&~U|ygWR2Fuc@+NBNR2Gb(u*(8!Y~h9T*I2z|!2z657Sdo}>+5ffwrax+jT z5clcI8EA+ko;Vi=|M2VU))G(k_A#D4G>T0v9J_Sv721Ab70sY*)I(iO5bfZViE$ot z+hJfwb4y<}oE|%G?pLoj-1%VqeZe2aThBc+w!G=OIOY9E#+aE;#RZpN z1CCwdr+@hlzCdOSZkX`p3;z{y^S09izxj7lX)qV=M=ck-?Y&FHmEVlN!F&3_+s7&^ z;M@D~9`wK;y5Ds7!{d_Ez8mkk=>4(rHD8I-KJ;4rX^KbVk}IzR`pCHVvFl?6Ji}dt zw-7M?$!GCLO|kdnlqd&Cj^WVtBh<}noFJGgmfl=*1L0bH{e(aYpL6&17P$a&{vg7l`#HwQvjs{$`U6==&hiF~l`slZmnX+fFnzcplmG;X!-l zw*aprxixpjq6wNn_J?b(3_#FZnA!`^cp0*z9k8_N;4#|X0%H%Msvq1&bo`}*{;tuF z7~*9%S8WxoLV2!aU;O-IrjE1L&&LC&s0^7BUO?+bT4GoW<)a2XRO?Qldc^c|&`1ky zRZC$+By)Pn2@HtoBDt;$d8zY7ULN5~h_q*&RU3FyB}rON3bu~gn}$4|M+(ADb<;FB zAg&la1M)IR?C|#)D+i;<-A6<)qZ__`PP;3&|f27`Hr{5#w+7h zGobl4&}p0P8vl0jX>s_e7sams=QHunQ$83=jeI`7eeq}F*FgR3w||S3mz}H|v%4|g zW!7B3xL4UUeN;{*z(5@U)p~WV8ok{0Q#?rdU*`i2-TKKP4Y_{oXKqSylPGw~BC%dK z>X5sOV~p7{TygZ{g-n4FV+tQ@{t;$ytuQLEDR~`jA5iJPJd?{=ruBTJfESpc#%3cUbA-G)|u+1n3doh`sYcdR~!e#)E3;u z=Y5TcW2Tz$%G8(h#@1I|8}EMaF)?P&<8k3-pM!s^`0d|rjpgtQgZZ;x z5dJxQzPadW$kegoO6$gPKO|C~(D$n&b%)rdzO`ZZCY`|L!yRUFxJwO{0zBa43;^p1=q({z?_ool(M z2mCs}6o-xW(3F(Ky1tZR5@c>C#w6)e7SaMdV?4_l65hxB4h@6BPXsQ)f z`X)_XF|IiKUt*bUx5k@AGsXdmC)b!|SB~Sp{li%8`*+8~k3AmqR@)&ixZ>E@Xa56Y zLp=N9I*gjQQXKQXOJl7q_K*Mk^&jK0r=N)tORpNAy7a2pa@$wOmahxM%ACE3vHul?X8{rn>ZkZ?f=qank31?m#>u>+PxbOZy z#S?#jF2*jmR$O%1HL=wWJI6*V`8StiCNC3jxcKatzwT!GT#ajyxmag(s}@xsdTFPQ zs!xI1`Xz=XtvYi(9qIKWpG-8XlOvF8?PYHW9xZ}N6MYiFSYpb$WX*y|Ovh;&jC&?A zVIx*w*>cblVoWs|){AA1LYW&|o_~d5egX2F^yOV9!(Qbr&wC9*TbZNy7S?#jD#yz%Xq#h>*cxilKv+ZN+jn)wDxMfy}D?fH-EVn8CG(;t; zG`U|59RGg(C2{XVvtrkSUlUWt(SbSP9E&ki;?R@Mil1z-L)>}q1MwL0EEqF2j=t!! z*kH?@Vv}|J4vLBR{NWYneK^)wZ}rTRCtBuE>Z~WL^`h4~0J`bz3L$ zcClU?CR=>{Xcf4(eoU&ojTn$&HERZ9u!=5#9!jO9meT{r_9CT@0jI2{H?H z)rs$Ltq;477QI3=ufigXy#0BRy3Z{-;QRLj%-UiAsIrh&QZyr?z)b?>!Je(a?8CRD z^(zXpsL#D(P1x2?0Qv;r#=Ho!W&_48y+&OA$#Y}Uh8yFv(uOfe_r-vSb^Pja?iYU) zJN@v^co^T9Ja3Kd;-b&ICHC5Pzu0hUm2TjyK78aajM9dT5bKf;HNtGG4j;L2=*j|BU;*XJg{BYsJNvUmaU)zgw(^7r@w-nYL+s z>@579!xi}g8X9Y)DQn}><@(uNcJK9b1YM4#OB}3*I^FsiKEO@#oRafajDvID7>Ev= z-ujVHF-zRvLsNGIdv;~0-L6RQZFkQ@=lI5(X$ z8qs3zba|J&eNQT&h=k@Ij=HvtuHrTDQ1S$efx zCMQa(UpZh0k>YVsQfgr7uz(l8vN9mI%4dKq;$$xgv@=5IcJEim~Ux|AYs={{>&5FbaQ*rlvpzoW_`?SBlr4c!u*S z2f7K$>BW@g){Wy%{a|9uO})|&lCgNAxzFKvLW+2PISuo0sj5-SxaC%hquz5?nsP26 zC_S7N8#OVn8V1sUO{=M#0M+^>UX@3jdHU<;9D}@I=emlVG43M^^e~tGl%blJ9*N3% ztM85A?6SiM>2Q!t9IHcj<{(sd;uV0sLHgl_Zk;D85(yY9TJ{m2Uv8lv)Utc7;w6x@ z*wdxoKp{pj##Te0Z&@)fQ>Yri5eaA3S?6j*#i9P-hAGI+kd$md1rs1r60>i& zyXKXN7`BA5%VSG>5Nj^IYhb#HP9?X^=Sikfd~I5tMax<+9l2pZ-)bm;gUpR!VvLm< zLe+?1zwy$VTnrd`{(1cvWA3W6!nk1`Y?WSP=5`K;P_ubQEwx6x;cf3vR9^$;PqAps zzsh=B#<6(d?FRfls~C+hi%BPldE)|3e6D%BJrB}j9qoyCTTdamem%_! zV~%Y6*#u=7RB%t!~mz>;rDq0_D6A&Bu z5T7w5A~Yi_41BB|j{$2`xCZDkIr^fKki<3?@>N|GnIqVX*Jf`;ga~jkjx{V@v}pY# znDHtYP|U&RJnVUly~Am0jo-FPUU9=pj2k*E9vV%Wj)vy7M{WZK;!-nhnN;q?P&@TW zEGaa^SXd5R!-V_t#f0#y7O9z`9E%{Ya~zS_l;+{sb|9A9r7kT@a2HG7L6X=zt00ZFe`1mW1NnMnsjvYV>Y}C5((Jii6NtO z0HwF}BB#dK>-v=#PJmqWAxg&vdcFYBLLUu`_rBjZ3oUeFM7qMMIP@Vl`{n?M#A>V( z0{ou}{FYJqldOkT8ppLPAop*DOwL<=7hJefLoWT}B;}D(bs0!H?KmZK7mk*)*~1Jy zo4E6*0;vI_x2qTd87UtyiV?~IG_aR`=Hqc#VdN^Gq2vRq0T?Vxt(}6&N~AZP-(kpK za|fg}I|ifV)`7=j$k7-TA!-PvRf|j*67q(Juc_1K2#JFXjA?_B-vl)pPtw@33W*-I-H1F8XGy| zz{|PNX2J40ma5@zVdg5ICNITYKM^RF0pw#GTh-qqrYXPYFHCOC?L5Y#Z*uI@Ld~2% z>@_p*&6{bPPiurw&c&L|<6N|H%#Hi9XHN1Kp9nd?!|RW}-inI18Oxq}x`_kOqetJg z9c$I1>YNe~khBemuBj! zI-~Dkad5*t1DexMS~qxUYj*Q;%SLr|foH$!EM9UWPUm{Y8{=s4ii4VMD_&~S`ZICX ztW8vzNr_S zhK}-BA`*c}s**Oj$x9D6Xm!lx0N9*uugoiCcy1|E zdu|76llDy4&L7eB;x#t6=fs-vegKU+lUCFe;Lz-Fu1o+keQL=~8(&0)t?Jxj=_4<_ zss&?uwIC1uSwnI#fOxTMqloT2p#b8W&tt|ivN_008%<E!5mSuoduyLSH?+bCl`;0!pJ}) zZB-;<0N~n+SK}6~k|_jU)vL&|&d!k}R3LwXvW}`DAOqJqrR6-3H@V0nG46m3?C>#% zW?z~SQ+bJwg38AICurN%_?8b{WVBS-r^K03HzNp8mJ%eMgIb#Tm!T#L*^Iz=s} zxvp2t%eQDJO8IrHAvZDoJiedgvFwL9G7;nXXbl6OC(M9WI@C9cncMnF0C}s9HG`q+ zXMcbF%x2;`PqcoSOZm}P3aa4(tD!Gl>BMf}nCn+1LyC*x;v)suj-y;J`Z$zd+jPlK ztNliJ%Tv>HLJh*1eJ(OS{Q>`$qMm2$TVOd-KvYJjbohY5T*aJ(CSdI)6yCS^yrlm z{Dcy(5U`2Zal$8Goy1y3vVw!0;-y~VG`Gycn%QXZl{>!2`QOYOY z{JB`?GVk_%eF7G-#Bd(wLa->TSw1nQUB{~v3_a%b^OvsFqwf^0pUJfGm}5Tfl8$>m z*veLQ*6d)EE^NE=M6)s;e8Qz>dx%WlBu%%;dUbB=#|Y(etnoB}QENd<#U$)f`1 z@k*+iZ^A?|&{qcY^vQ^U%O-Ap4p}E}OS8d6h6>eQwI~2T4d)yMq$Hcr(SI|L8%IQA zGgr+v`C6Uj1=`#k*IejVWL*wH}D#a-^9$DDtQf;G#@ z3C9fsY2(4x6n1%wxAp)jE5FIQ<TAeQe=Aa|C6 zk&Y!;q8#UQnW0? z12rE;(5Ku26)yvrn;F5uSj7R~KQ?F+0XD$D*!qc{8}jvdN#GpVn+Aw%ReTIJ_d1Bm z51@JZOPP%7@8~2a@d9GU0eCwqJxwH{7~m#IK*bp=1-4TcjLJz~HDyU|$L6)RApomB z_ju%x)T(zHSa3enQVWNC=zxMdHr=tyCGM;9esdEj*Za7n4RzX9O{JIjaw<+G@rkGNzlA^D~Kfl4L-0FJq$9LKf!j zG;=Jgv{;a~h7xT&fy`-0+DdKmRxOB2ULvTo(UAvDR*-297#FXc@Di`>FzZK*d`RMB zZje1C0%dk{n^Px4o>as&tSB;XGcpq}MPC6qZkl`k%;GdX9zy8T50e4AYcsHZJ%1&y zcxUx|)aOgBeNu<6 zQ?ZjgxtCT$J72DR|5zrjF6Ij50{OoL(LoXKjIz(G(vB-7AxC8?UOJqs#p*mkCB>^i^D;kdM%!L&1DbnrrCDg@ z&Z9>du2%7BsbMx(hc z{aU~L87T4U3v6yp2xI=&M9go5^Y+kQR~lRh3ABc)9jYTgV|y%lVI8<;5Fv_AQ_5<#aKL*A`ROU=l- z#3eL0)SHhaEo#rZ)9g}X#snmYT+~ckr^39-L+<*QeR?~z7)00A+4SO59w*bbC86df z!zs{3BV?vdfk{gGrBN~_x44*%}Pi`W)Zy-jxnb2cR zkBQUmpBFqtNMTYjvoAi5a3t$$3>5Yf)#E0t_!y(UjMyaDWfe2fd?k*sViY;l_vqq|gY&9^FnFs4E0$PiS zK*CI7vrQB*%=!^BY%QRyt)CdIP3xx^Y-%AvGIaeM;@Q^RQy9SR5!33Cnv0TisNb3= zOCN1|Y^~oeYG5t=icWEpNL6kz_T(zkhdAfJoK+{B1vss!g$d}RS-CLsTs@+<&+cP9 z;{@Sx0Yt%jD%2G(ojn!}9mBkAT`i;rXfy~BEjEP{))^&SenRO`^YO?)#c+>@=0vcB z7TUSGV@`nNb-$1jLXw0qRcTgQYNB6>7=>5y)VG&$=HhpYkp}Z0C>ptm08m(?X-jJn z7*fVIIhtXtSlaR5lSwWPnWNTzXe|&kpjl+O24*6G>dAR_;Y{Qlp0bp{RI#~F89atH zD~u(vMWa(b$|s(CJj6?Imy`oJ2Q|~od;+H`bBM%d5nE+yQQnHho(;KjCgP)JUo+%v z+-+3c5dNZ?5umv-u-b675TEN@_&VlT8n8eEdKEj|`oUSTj_GQlaZfYoTAh7tvW{$y zES?H+UXO}f0bHyCVb5BymdVobk-9V!lTB+40_B6f#lg_>2&)yTFz*>mkofS1P#!PL zk+I^GpE&z65JNh8Eg`hnML!-0Bd=1}LI^Ol^fYRSG4_tn;|T_%swP?Ih7%ntAY5No zU!gdhQVCdR)lRl@n2Xy!kF1_bb+y-|`s>Fy21+v_r8(jF%@f_6yFTS$vvB?fQYxmF z+6wG6tR)}*uQ~}Ry94y4@C?t%F+vJps~UP@^vIcZ4s7Eu6I__oz~jLO89`|FGYwlZ zDP_gkLqu{W$SYUpNuttM>&K9x+%7=x*Z_bsiRJN<8xx9PsAgiA*Fl-mi3ZlsD(I+s z39DGs_m7Jg)y$OAq7EpLAL&)f;WSg7oX#V0y}V1-Y_+xZ-e{&_>uaW;%F0%}#(LI< zz(NpqFHf_1Ys$=9+~(`8A2pHN|2b-C_E@OFT6A3W*F*f^X?YlnQU3_z@gY1w{)HB~ zZIi|%ng`{0LrbuI_nFjMN zQFFy)v@)>fDjfG_AgpN?tB{HoH0Ncdm6PA(>%Ptta^!=oVxXZ>u~Qy(5rCN^G3Q@r zr#-NVyGG<@5x~n`g{xBuN>^2y$*aMKVOMAK6^~DH@Furz>K5ZRm+GOe=g2I6lxB|H zUR*OV)|_zdN_}^1fFD}O+MzMxI>OSfMIOpVBDvY&tR;}qj7Yt#d)9cd>s;a#SG?S} zMy}+Q&9xwVt8;QIKQPR#_2W(h*u=@$UVP@US_Zjk3gp*=d{rs>9YkLC2G`I2Oxbc1 z`TtS&B>cDfU%mb%X2M^z^PfB;s>VH*$62p z%{H|<7e{G!9!9uF|JLtwgt=w|>xWR^=g8qXlczAWvGp~RM>^%PkKI-a;uYpt^D<^| z&CA>N9OFoYh7@QR@r_k()2KanyxS4 zNN+2-{i5rdQK7vzdc26~YGD*(IxhCA(e5f0Z`I7G%#Hzj{p%z>;w4)*70-n6&TH-c ztm?C7$;V)|uSOqOomELNMcSraF%CC9_!22e_`0 zy3a8rH;6(N&QNq1%Y$ZJ4%*aQ3wGO{6PYaHQao%*p@Dg2Fe|{+#F&)su0{;0Ityn- ziEvQWSy-8pjJ*0nWacJEdBWtUajTlCt7>7qnMzf04l%EkIZsKKn~9rTc#2y;8rJ|A;(9~TK}##S$Y51Pb@^2?iPdif*pvPw!bzGr zJ!Lywnffe{y?OHbn#N%ES@n$br-G1FjU=E`934r=yADn^75HL+$Qk|TLNBA=q= z=luDlS*teS2VOUDAp9GtoR9*mJ_y2x1hqy;^6Hd*`!ikzhXupZ%sH3W1Q|#TNxrr9 z8@uO-=TyljPOT+L;8C3o(1Q?KSzEf%+WM72Mjnz-JCwVZ9ezZFSzDg zITFs9s?Hc|PSQ)s$VUthh@nrRTnF0O*w=>3I?|;NRkEAhTwhH?F&uCnwDIUV%W9YW zq*W7l_IW}GU2Xkj%RnW{KyWvTBI6oVA5KwcsEEmhW>wjjP=LfuCwQfsI%@r3Qym}O((*nlf%c3H)$ zq^Au41#rH=lm>dgF|W-D_oDhua;#0>X3)F_?wk~Vprxf$u$s^-D!iYpSlrCTmYT_= z_2W79$Xk^_F73IDBd0Wz0}UZI(a)Z3vSvMGolx`mJy#SiXi9=HOXD*KV>Hu5#i<}Q zH!&7vA)RLN(l}8q7*bh*Xmz$`c@R4GKBtUu(k~2jde1ly{p6JtbUWVc3kJV}2~a?i z@zn7&d8`HX(a?-l3)tXmc^FQNc-eQ?-&>i>O?kL}sxxejw;$>p2_r~(#^2{q1LY+* zIdR1M+?6Bmb9C#g;mW`mHn3_95RCu)VtjUUOq`h{x2KsNH`ju3`hk=kYhqxwURM?n zX+iXBNZDu$zo-w%M9Kx{!c53Z+gT%D!{~+S4rFS|rjaXB`W)|mK$hH=>RLD& z4#ptVLF^?s&teyEPjkjt8*bCA1OD?O;8$rj8^8~unOOZ<0%-sZ;388ndHtpJlZOr= za3okjn$XZsZ9X%%QGzB!HiZ%I)uN7a+fv+R?PcN|ioYX0aIJiSZud((VR^D{cCcA0K#r@7#LSq&xFX=={0{ri;Kg7W1a0QB= zOc>#-c?j$h$xH-V*45fF5`KFLG?TFGmrt%k&XUSrH?PD0}Ni1Z@s40vWhe zt}{XG!!U0BdLhCCNIo{5K}>GeKsj8CJ~Pb|YL>ltSm&fHe(@EEN`22$S)fz*Jh;be zcC{1^T=D9jSNoO5T0g3T`1TJz#SRpXiELGoDoIs0MK z3|#FSF#@cKIC-s{_YZ?>UhY?YoESAw7;E7O$6M*(>Lub>9ow<{j zpTNwLutIvA=LmTnn%N<`@zRl+^=YB}VMJ1KK$7mC)f+4TBhiR+h|fK4@ft#3`|Tun zq3|Kx=bV$-m}IIFBr{)b53+pCzJN~oE&z07Q}b0{V*(^ z#DRGjg%Gkgd+<@jOl7`gi=+2MW2tiE!D}L7(HKtsk-m{%lVXG)jUU#`6@4 zWXrAMfsSwphyV)Dra7R`2_}s^M06n>B4<<4dOg~0b5>ql zzUc_;1BB^;v5E^*Pjk)K(He=p2^Jr6J3WJ2!NsE@r478D%IdX1Ejr0nC-Qcr=B2Y| zT83_ZpCt5$UiI#jBsBnka@?dqQX3mvb z8HlmsaU?IlqzPvZgkhI^4!p|RG`p^Z(mq}@?T%q@qDEde9hpxf@U}h~N+bFN(3wq= zxYYdTV0nxXID_oZ-+496zj+`4jgyeO)q-8tLIz}EpJ~*fRDFR=0)f)f>P#y7 zt+^t3ZgZ~nW1#qwLvacer`AK{ism7;sp}k!C&q;n-=EuaD1r%`N(9!dN@(1Jcs`6^ znDp{w4t*nLZhoOqnn{}|gV-EYF%{kFTz)1+EdRCJsR=}3?lR!)#XxlN+t+xj&Mia? z#!F-BWjMxWK^HwuHTfCd_JHO|1kk;D6th!t#C?M^^AP8Q?HDT;&zZE-44ZP8iE*T0 z(-{HcO~d$m9`N`(t)oN!TZD{JimC++{6}8j`7l@M(2HkmR}3+pBYRy-I}Dv>RwE}O zpfflg{iYeQNk+W7I8>~4W+pmIbD9|JC7~_`di_*Gj0Y7kyt5e7Y4-O6WKIYbTa&pv z%}CB%*@SAE9izm8G_uqJR$(3N9N8zd@iLfs`M;_m3ukN}J@Pxgeh6t35Y9fwFpiDu zOKyI$LF%(ZHYH`9iD_;ysE-3QvKCA(MvM!_p66Eh;Hn#88@nq!zZ~rL%nL>E@#es}c^>e2DU_(yb?{b*U$4% zMRGprk!0&uq%@mOnsFG={9x6ppO$;cv? zlmcTexqFPdpCQB-u!Z+EJ0TNQ9@diVz%tGU9AQ_u^XQ0!^AVSgYXLOB&lyPu5g9-u zgIWNLKy$w%2?q6v{Osb3G5mhS0rM(?4w<_6uICsd5(OvKP>*s7%zh6wX3z0$NNAca z&Y7{pn~+s47x|LV6U`%y#K}pJXj?pol*X2>Mk&!0mW^tR@llIPAGiq{`|wDSS_pG< z+}RW$J{tLKn5fie&wiasn4)2q+vkju$95cH)N~0EZ=n=uF#ySG7vjyA>>AOf3tC}7 zc#;!pb{+r`q_yO{^@WFwnS*EM8D76Ke*Db~;+vQKI93cJX7dAa(HB1zXPx_ckvR@?=!L_D_KpDv7+@+T^>YhmVzo#0?h4L>M(cj&BTctsD%WZTbfC) zv|_NV6e%;D3hBjla0heVEY!gI(U!o{X@LUEHSRh=h?4c!4{-6*H?ZdjwA6G!&ylB?pfG|I|rTcHY5vcy4^hvsIyi-b7-{-l^G)_JI2 zAqcFQ2t}hdAvn}`Oi`3{^7xA&Gt5B;}XjHR#Odg~GxLYQ8#_Yux&Qj*R4P zdyZfS!f4*A8NmbhCm8sowkpCojI53Sz2cJi{Dt3-+m~$u(Z=}sMgJZj{nQuZhWj^Y zn#z|4KWIVq@C|vA{xk*qL$PM*lK9=9ZVB8aVYh!EuWZILt+e+wBXiTN$p8x*1@O%D zJeLh!86^wGRtuYfr%@>LW3+d<5&>qK7IWG13(Mskc^y4sv&6^mT@g`h$cTa$#X zT~~A!Dfm<}@`{@d^6`{s_Tj7$byA1=y8g+^e*RSO(9hM;k1DZ4q z`qv3P1~-nxH;Powu^xERpPH3Ud(B07pv0NS+M3=Q;6t&Q znvup0a#%Byr5zyRn7myl0?|q%o#f?#JvrGChdVqzwDoH=;&PoUM`>n;%0pPqK$^9g zIw?)FLPTmOrMG0(%%k`?_xh48JuK$>`{O5iCPXoH1D4a;td4P!f(6F{_%>}yfXIKo_{e~#HcAj zY+Pqn!S!r4WW2mQbB`q{&a$`lqaTQ@b6Y>aU1#{%mnaa@*s{Ul|8!`dpd&objd+qD+cc*33;% zd89eDR*mYLxvxiNbna2=YK?RB@1#02aJhapPi0a*t{djUwLyUO&}+Nv!!dcSziw=R zbnA!wjBz8ewaFr0dccyR#$DUwCPNcFvF5Ss=X`YphyUYD#T-fjj+%jholXwnR~?L& zMs_ofJ@zG!`q*A_ zJ0B9ydE(yqrid(j#KZ57@crlu&yBbI?(K2M^N!Fx@7iy^G5&eWN8|>fsn7JX zH1YL2Q)2i8vu96#G6Ds&e!5VQ#x5KYXwc-TgO7c2P;tv*Trq-BoU%Hf0iLTf8$qHgpS<1&Jq_^5OFVk?z?A5;DA@BLz`W-6+AskAUY$u|8t6~Li8Uv0hepq~ z@D~?j002M$NkllubIyG)T{Tp%O41OO6Z#$wlygu$*wlYRAp^f;Z!IGP9j4OZs(>VRzABk1- zPlzjiaAI8l{qM(3t2f5v(ajmn(hS8^d@mZEb3pvv@h^#;XU~uhtux)Kg|l%k%sQ~= z$e?ShRYnB zlb8J5RM~7tHi);ieAb}c;_mFcPMCp+dRm5iiMD+7)!1w1ispeuY9}k!q#4aT@SC^v z@P~YftYli>})cpZLo8 zanbvp8yoNVLwxRy?}?k%Z4(dQd#_lqU|}rSbzv;tdr^$u^Q-um^L`MUCgD-jKue)W zlqIO*0R>CeL$x4)jkQ2n4P}y0^kghfdO94fj;Zyd!F#9d#R`3Dy9PKY-h&g9FoI|E847LZ|j#naFOo8 z){p)!r4x{G;QAAttU?!_I@I!-VxQf#W{2pi1w83=ECzNnQZB_8tV=X-pW_2O7F<-S zF*A>8xo0z-bcwE)ue30-;aaaWyB4G~2FHOq*Pa`bKdajDItjZ*A=HUb;&v|OR{)JD7U8ln~5;1H3qvC}J z9uRZ3;SYpj>dr%J;_GLf6uT~15WDZWPdxFdhsPP0T^BDn^Gk8@MgJNzhnL1@PJC1R z?5+*5`{Kp1`@&st-&+uSF4`w%58WOgd+)bn^*VEUi*&Q4)wRKK%yj}6q*$~uvOpc8 zTA+FDDXyLyj`sZo{4I=GTb*g`)~~-VW->c9C>uJ~(;d4R5!BfonQ;|dMxJHEnIW~8 zIZ!RS`<(A90#$NGXL#?26!3`>8hG{>jwWca+zV;~C$JfMwP-*%ivz6Ht#A?#+~)`v zAC6gP4H2s!fVx1N^Ee=j14`FFoV9+v)oJU;U~4Ar;B``ox)sXhF)MO7O?E_uKJ(I% zEngrguz!G~BkKe#_jM^?m}t$J=6nl^!lo8Jq6j z`n9yg;mbFbSa!=z@#bTWk0-t2o$;$1@6R>xyI}c*{H$j#juQ_#Aht#P=Fy?p;qZvZ z<8j$^JkI0iKe%O{P4~tJU*r4OUW@m`URWzYc z!u&AldZVDsNmT#(qg}cQXBq)=K&OOvdzn~PO;6+`uV8uTsqo(+bRCKyBXk0kd6dI; z5$CKcqChkcHW(C720C3F!^n*u9*3$B8K`Gq(XY+mn=>*o$af}mrY71aUgUC@wGE_P zsq026&G0({lJJK6V9>btW{-cGcQpbcr`pDj?v?!%Yg3I){o&y zrVc|iC+wB}`ZYV9eO?S*U@1ndqG|2bT|=)Qg2~G)eX4GdwcfjgJg_xi>K zUi$El%vy6A6ze#W&{Dr$lUFH{S6D@~1L?`hR(N(Ohu@5Ky&+j$ZvqMni?rF|TAGIz zO@~DM51jZ6^|5cDU!j~AJH(qo;MQ#&kV2byJ?BQ*Um z8#g=T5+M6E%sCEVg-?qor~zx~d8#L!C^H2;gZ;Zm(1(^ zG+YJKiz|j^$McRmJs$nse~J0?w~H^m{-~IB;)(Hw7e8I`F?>s$jovFyd~Lkyu>EYy z5tfZ2i zhdwXEv{2MSUZH5s^`x~Q;&mol-`+GAIh=jXM&l?U7NFZ0=I*@Ug}GFCEA)i&c`1H# zfuLxEc_ES5+g`g9fOM?Z6#TuBxLQHQQ%gKqE9PH)2D8^or41k|=TxTB6K{dN?9^D}Y1Rb)aD^ zJB(Ur`a4_g2ZsD5_c?xFYnhg>IgfSLz~wGITZ z&Kh@QG82X`YJ*#v3RiYmJ5bJo*oSKx)U&qlOm=@bj9gZ^| z_1JjsDQ}9G9`ta+WA(jP>ipW*ofJ>mbGG_*xc9Ns;@!93s?VV)8_(21er3oy<_zRX zxBK*`)9W{|dPUaa#Ld0Y<7K$)JctVi^jT*B(IGQ=X>fBqtqu{En$?W=n_26HF&s{j@7_(x2a;RU-Ha$ALI45&N_umS1d1r3m$T zz!!1V*e#sS5Ud3jAHe`5UMB@Of^$>PL-z}tHs(=RVBa)7w*&yM5FW~uMe_q{Iyg5t z(@)NV+r(`HH#cSvN1tkwbJ7?<#Sn_$?D4%X4}bg-aqg9u#$iu*PW8K5v0&dgaGwSGn|3iYHTK-+ z;Mfx}_?2HQeAu=zGD2l;oB2j%@NU|~_vUnSV1NCFjj?_hH=Yhovs#v}hFuvn>1MV) z=gLKP%`{u{@TeHu_~1~NUP2lYn7$0zQv@sB>Rf!J^%cuSP!fG3%RXU!?rxCwahgTJ zuz|*X+dlCLo}%~a7Zf9D$*F3-Mo5#AryBVf$9;)A494PwTW8vd!I$RESdRNmRJ4!r z5hov9=ogHk>L*W16{GFQloRu9F-d?>$N=xy^@Edy_&*V^?95O80+bGoG05CrKgsH} zv8ViZ}k32uKOEV3o7xjH>l>W-BJVxE0Pp z@h}~SJm#Ds&v~dJN6mv{*~hJ4L$iuq;n)Rs!uwpp z2xlwat*sw1zPGTrUSqC9Pktx!K{X@1){mrU((G=I(*jY&&pp*O*4}egDje#`BF;pQ z4H8`UJyxN+&mlnJur*p5I3O8=d0>niHFI67<<(Y0@g${e>YGB_wScxmza~~|BdZ|2 z)E>9>BgV53A%|U9cCA)v$)7diBowVN2M*-itG-MoD}&j34%<_6-GGcjOxB2TrbR7s zP(Mr1QM`3#e8oUlXLjHBye=%Mf$J(Si3qgK3^ir4@Jna}Pq^ol-^^RRPRL)$Yl>Mo zu~S3=q=oZhLQc@yIIjB~Z9O^;q0u(k!Ogwlxg`$(^l2{T=Q!;}*yru$O_h^luY;Zw z-}>K6V~+!$6aVnpN5#ipdKh0(9aC1_7 zXslkoJZA5@I1bo*57dxclVTBm2wa5xv1M&6#B=+6i&3@V&Av+7J&!fXX$-H&n-sHe zJXL0F6(Naa&AIaXnAb0{z!0uOg##YepH#t8()!S^=rZsw4NJW&kMRKU%lWl=Z|h0$VQ zPzH8;jdiYa&@64ls7^)F1z4Sc{tcn{WbH9mR})fd2(_^#V+>3U$_2^+&%zVqr)E=u zgDOT`1oMAss06SR#|yD;P^#aMf4C$e=V(R@0Or_abh2N(h0E;=ZexiygZ1j@z&ui( zxhOLGJ?@H@iM))XQ1l8;W1ojA=xdA4KAVD_hJ6mnC^HGvVXQr)d?tKoaxB6Rg+IOa zni!t8AwK!$m&T{QwHxHIlwa#L)F_aUxb{XneQJUKRQ+=RS0$G@L< zZruHwIk9&AuykxQYij)N`(KFf-t!2&7Y8>JzD}VU>(SSoW6fRm0=hmEtsfEG5}xtc zTDZc#gsYE$9(UD!U}e)^yjB5Y*4VEP@9M1Frl%Uv!>36gmAEiye(N1Ha0CEKqYIY( z+UJ?pd#2{8G@>M}n)Xx|<~dTM6H|w<;4N*A!%-SdV?IYQpgs8NVY-V00NJw^Al7^< zmnn5rPGLzpCMWE4xpM3jFGD?tyktBFnvF#s1W?-IbZ_uNpx~Gz( zgBGvvEn}|}LP3UHstqRLtYXwbGMcvJ&HUtMx1}Qwqk8u_I@=zU)Ah^g4Q?sI3nTpPn0c{O(Wj*C)R(zIyil@i4r)eF)!6mM>d|`_`10HDi6; zdC&c^apjs=v34!qpS><753R$?;3GbM_PMe8+5=*A(+1UG^7L(E)s5eY8!rcLbN#UB z>bNplA8PK+QFG{u=n17?KJ+>4*Fx8uvgUQt`T+K0lXqZc(_iby9NHP<)(=41crpk_ zs~B9rmV_v^;#M3jZT;Ns7eHKjAEPwI;NaMva*&djUs(`fh=O`))B)pOD}0*zxfs{i z$!ngxd6h^go?Atu1`@dz>h@BwYhLv*z!~srbuV${U?o_719i-pj>pk8?$I^w(oUcB zF$4kL8-tovGf`$DLlX-d&DB7NR~TjG;u)kPtAXCgNQ~m`IJ-aQnel&rye>AZSs53-|M79! z#Syb-&5Pyh@LR;wUmsulz?9g$?TnZ-e_kv*{jKqn3wMm0uD&7O^vMh24E#Vii?l<- zao@do+3B=xVs!1Dv1D1q;uR}mB{(;&-y9p(Z6qo_ea^qdb$iW=O~d>|LcA_-+RV89 zXK#%7q`~V+;p@&PCSw3`u-;b0g8e8JWB_1JFnfEAN8g-&4pvlq2>!k z80$?EV(`SV=i2i#)?4Y%K(8LUE=5aR{#SYI4 zZqA4W@iPid66_6_o5^faI8a5}N#xr2X2;az&HOlNs=Yc>lQLu)^U|0x1b{>JZ&J{a zn+K-!8$~t1Gf0ac`Dk>v#0Ss6CO$lEIzDXbj`*kD_KCgDy*U2ihy!EGx1>z@1cz)yO(%4gs~k8`dC{vCVn8^3tQvt$41>*6O@+z|V&|3LimGq=XqFWW7? z`nBWZlrNtXH{FSsWNpCvIFX+pQ@dgPXzcT(m>Zv!`!37Nn!}gI?9q&U2kS5!zb; zvR)3h-MUOPSPOtfAuB0zFIAlzFLP%KvKc2q7<3#B#B~&qaqNHzq{T~$;x=!Bo7FMI zd98e6Dr@Hadl;IPka@wJb75}QuFj<66(noo#VIa&?Q@UE%7X}sM@s7U1C~NDnUTs< zQzqm>{Z64YOkb>ht0feAS6K7%<@D5F9zHvL(k-trM1Bf(?%gLCI zEa;_8x)orB^1`TUcmp=N>NtJ!(1d0_&F;R;% z4^7IYvu&=CJrvd`Z>;m87McmuvyZP=o z`?MFt)!YA5{QJ9)ideBU&VTn~<7@NJi3|VXS@yJh-5KY-|7G!( zGbhK(p1)&U@tvz<*EQ$FjoG8gg&5pU-)k{V>9}1^_UTf%jB5l?j_UqhRX(M}eW;DRs?&MJ&bK#1+s%c(DBu{FQ z2I}E|C6~YZK2>@M9N7I$vzT;^N>F}_@;rH@K-QA~HDrhLx79`*w|1XXUh-2OW5|>9 zR*d)?4PmWu{+bu9j7Q$8Ny>q_EO-`2!5FiE;w?7tD3&A=;JW9$i$OVHt0*cKP%)4N zhrBiBIc+wPTPBKa%4n+)_RY%^Gi40)_Ccz-Ood@B*nAwTSuPxC*JHKh)kjd0n{iGh z6z5Toix{i)>LfGaz;om>b4FRaK@x=H8w287=Ne1yGUSMf5TYuT<7nVg?YicOwmRxOyzt<*b4wg=Jd2~szZ zjhEUu1{dDm<2Ef8KY}k^AB{cETNZEn@-{Jb`L*%-mpv}_Kk3H=7$iOvx@9*NB#~&P@zvGBFa>3@f2yAzL{Jrs=%`4(t zSFecAeD2Kn>Zi_*+t+Q1;rwBcx%tG`g2$Z^AAZ`Rm^rP@+O^1I&6@arooydm3xNog zF3lZ0kVu2(?)BqJXFg4VJh=wK(MXG9!?`4|L##ma<3 zT@-K;*H1r%$Zi1?CXi5V!mx`JWSkI*Nm?^^gk7R=;rur(2@fjk`RHUtOobx}NC^OM2<~$UdOm|yJBBla zjb=747!}#3Tmq4=$3tWV6DwZE_vcSWH}NqXK^s;ri`(y67E|yV^5G3@W6QMdW3Rn- zi|u#ZQQ#R{c8G1zn>KS+Y%>Ell&L$!3=mA4u|sS>6+cw(=+}qWvvu3e*(KimvmeJv zGp5Jwc)#Gq-~CBE{_rE?)ki)q-u#ctW7mBTh`n~1lS;OB;yQQr==bZUuQF=RI8-eF z^xRcBhQWaUfT-@asGjM{esUzL)tPmyL?GrjqrvqfG1u35aZ*zldK$CNS_gvAmyvxr zWc!Qu97wvkIFomXh%;xddtK9Y@dD1bg0|`)#B#_(O*jF|XtTje8ya=f<{#n`Uoi~D zd`1x4X*1rz#Umiul!|;pi7q*D8eeC^tf?|HvftOBY~|n?4)J+oU>+PBm?o)FNX97) z5b499RfK&Raj5lk3Laad%kDlCjfRlI4?5Km);_O{ucag@Rt%+`WA-^O992oqiB!V+ zNDytdcD5!$0c|H(17PM=VDg#5`vBf7n!>9F9v~P5=#O7N5<@NBh^ed$V}rTL(pY@z zF+l6Z{E8HqKDiWJntLw!J;t##gM;_Hk>NFQ+s$|5CN>p6pskM$Bh&F=2Y4cC``Lan zYRir>ea0-fXU4X?$IXTv@9~>HZAQ%AUeAw~ zvY36)U&r6S{P1||o8J=CcX~wp)x#g=n5`VE7XGEJ*Ol{SJ;&|2Hl?g2C(8QZto`7j z>pIYHfrR_o&e)bn^&Z13;#xoEa4XFkYarG}B_wO#55Qz<*w;M3MS6gUYu5?Dsz*kP zgIbBfP0iPM&K^dk#eq0s$j7lZVHwRS76xQe?%AAPc7i`ts$Fca}=xiK- zlLk?Hooh@}OM;%`5-MNEt8g9Ua6Zk=b7I#G>~mm{d3x)Y z85mISt*x9q`|(-M5#xSZQtDpf3%kq5KqT@bfLgz*lU6G0B7tHhZ_Xlp9K%Y%a`rUS zgwU!*7ikL0k=K*8X7(kRvE3dTf1hJ0{Z8E}bU2x<$0y|y$N_no0Rp`+wRmdMxIcff z*`As;-;C;Ft#{+v<#F4R`(o;>>3E#CCPt_17<=!vYizq?Jr>&mj{&F0%$eH;Kf+-e z9{=ILrWAr@!ugYxMK zfd2X=Ax~_oX$M#Gt!dVr941`txiZ!I)R<@5sHYybm5oJ^lri@??jQ2nNpy110lWCv z#hCH@a?5&ZU&AVXqR~2#$Kn!`cm$wrf>zhm6j2E?1_+08B3Oklm68gq0*hvh=(cDG zE^d-#tDd9#3ky;S7P$o|ri)Nwe9CAydHNW~|ImRd>!#VBeVOb>!26$1|#QwUGlYEI?qVu35Z4h;9!H8WNr!t+)`35dYv;-?HFgj{SEQkwXiS&+l0l}6=S%3y=t^|Q+SV8aWK}IG2m6&aeE^Z^288*sL6P8Okpv!XZ}_(?qZK7W{PQ)Cm+)M#a&P9h_9tJ}>*#1ml5oayAj$lhd4aiR-p7J0( z^9xM3dcE~?g%~fYF?-IRkTw*nZ~1xr?IB0R@MB*X+pPX}{P>oW0slxUHS{NiyPMkbp(bb+Zx{f^OS82mg z^%H~#3DzllB<}3xZw1PISiC?o_(AV;E@YEpO5~s&P3~HB>5@5X!RrZQKxT|vbf4_4r}aT=;pA&+!@$&>1@{tsj>ELzKw%>k6bvwrV^l2-=_@2(VLts zYGZ3FUV4ZlU(TNK;>Gx(e4k>RmjN1bGdIoRH8XkdyyoKA_esaa|9jy}*KSR>xG_H`m^Ocg)!9DeAK^_Lz&#|q( z6?LO%pA_I2MWpI9YqH( zGR8U6;9J8BOn3EhPF`6wYfDp}WU2+JC}vFYKG9;+#O(^XNVyL-$y3)7vzK@MdfBe&!yX)Ne(Zklpf8Y-Y4llnYzWASC zh`YDUjVYtc<3hwAbkXNy=FNM@$OG5Kk8g}v^UZI>(2{HM8%DfeX6C{;{-jsM&iEmZ z??;@3*Qu|%^O`v8Rqu~jxKG@B#n#2RXrKA34e6h_ZQ3-0QG#eynqK ziKZSk7^};1+6S&5nDxL#X>_2)c@=9d%xx_^o3~F*ZmxxG#ZzYlGg>0aoeg-&H)9@) zq;NpP?4}> zAd~*vPq*25h98DRp>MCoiX{e(MNlJ{UMfSshc`!RNZt%8SWKV$i1^UAe-=C7H-C5j zYVY{*ajRn!-sAl3Z~kXoy{Vyyr`wQX!>DyDxYn8DY_)#UNn2k} z&P*B+E6wID1~DdwvoNVSbi}Ym6htUf8D$M6K_fco#~dq%QFPEnyQ+h}ZJK$J;LNx# zmMDzKDTX{y1R8O^e$=y#Sn*|CxyYS7f7yKwapYjO;zeKjdpd}aT1m^?G*$z)qCtKWp{*AqJUI0Nb1x-lt%sktU5 z3nd{3Q^W6^>}La(p{X)v?|w-9=!##)PIG3&FCMcoKKO@8vF4s7anYAQ7x!+9KOwf} z=D7A}5%=u*pD}se?_=d1x5mHYnXM=P;DR`N)vsdn%6sF18IOpQU-Ob!u)`F5P~b>R z#yxM)p8uE~@qE`L+%K2KzrFR1vGl-` z{o}3({>PVEJG0+7S#Ohk3Zem`kA*r~%^~{&) z6+5{zi{k5e@EN^z%p}o%)@I5M)1ti z7TgdfL)XUjt7C&cRcbQw`$5e$mtP!suX4m4yTwN@JukMu^^5W1zk6?7b?cfqc#m!9 zQG4K_VpA`)7)Bv)&V-#8D=)iBH~0-vQ1PO;LC9DG)bnf2TvZQ0C+2z6=%0K2Wu z1XnFmJ^jp}^)p;Cy-7F?xYeokBe#N`LPyJ2O0$w2>|K3ifQ7NdaYmLziB^{i6ziyFCyN|Jk+%(v?(TES20%}rsl~5@ z)(*X@v+8TN>O&X4ypKv3EbOWV+3jiWQe+i7gNYfMy+kO#)KZU})@)qWp#p_eOzrPR zhz?`=ydL#6Z;6?6caOsk+g&QQU%3e9YxG*`Rjb#>bi7Jo*{T(B@gE{yeCRGQ9fX^w zPK$k?^04>`els|EGIsmuq!?be4u6~39|SXs{m(1l=HLG`PCcKr55&=DUl#8gy&<0U z;#176%xWn8=4lj7LFeL05%O%Dz+3!XKZT)%!T=+Jmz{bz zhFyhaj~IRxV`HO7yz~giFjySVm`-Y8WCFKWg$!sg(k>s4Y4w=7(R76g$1#z)YB_Wi z?D&3CUO#v$Zdy|xIcx8F134$T=z?Dm1t_!glbIMb^RcUZnp4h8YmtiVG>W{5cN~*( zCvYz4%gIBh+39lq06cuuCRA2m1!A?!5@=$4mwHJ>{?yfP&( zlN14Y6jSS$Q7~$5xu48i*c@psNL;JPzPZ_Bw;!P)O=#{T3G*O_7$~GbHJ4mxI!p&F zI&x=i27VCB*|<0a7OCe&j`8=o!buJo7{iR!^N3^edA5iVnPb>hggQi^BcZfAX6)k( zdPwQH0Ykj@AZ={U@72XndzA^uO}BOWgq(<-z3>t7w1w~iv+UYMvFVR^={$a@Td`(i z%$Tz!Zo7AB{2JcZ?L0Ro13z=-v^ZojKKUIVK{{pfq`>D0#(I2S#PBBm#t@I4@g8iv zv>~qk<@e*u_;k{UrSbMFu85(lzZyrM^3nL8yEet4yVU!l*T#L0An`Z7){?9pTjZ#VJ;`%uO6H~c4cr&=^DISG@Mv`H4jCr+I;%8zvA(De9zhqRt%3e^OVKbu>lwMA?^&Quu>Bt0RsBTV? zCL4Q;=bHypB`JfHmt(YCkmAxWHq&K*Ksay-I)}qJZtB$6vwDIl2{d*wWGcM99-G%2 zr}Pv~A%bxRl@I+MZC$H0AnsbZJSOk7U!3@l zr-OD%-0=M^@y<_ejMu&Pq7sE z4JPBf?#|!D>Bqi1-u9mN#oc$`h}WU-8ZSELZSmFlPmd`h55&#?cPD<>oDriNR>YEf zBJRKW#`x1MJK+t>>+pV_NilDy1u=K~nW~}d41rC5t5kN{WHCSYYyCKysLs0Nx-fzU z>YT(niKBX03)he#@MvuYhdFY$4$2Fh;?2?D&&D-^ zQk&JsmCv)(mn4G7yln6SKM4HP^t7pKoFe0K~WH2F)F|wo2Bz%m@ri6*ZP)vl#M?-QJ z7qc-&Awrp#_||BzInc}7+=l2HL^-71~**vN?7jA6bT0_L(K#w zN_vWk@uPab>tx*X*6YvTtcoc+&W&T;`LLj;!C%D zB9_j7QT*M>&%rl5#N!Dt{#KCJ+!Q=fHnRGT_{#f^iRYbqRvhrV3u4mr+3~c)UmF*l zH!l_rt%}=jSsR=1K{T^sb=-LC?Xi66lK9ijx8lQ;NAYsh&9USBUE*PLx1(}T%e@kf zGv^{Nj=F>4?6GFaxsF-C!Ta1qwIIED?aeWGTtm9;-|BUu_^quU`Ffg*mu5Cm)9)PB z%b{v3pW+$}Zs50apCfHG*U2MoW4>t#zp-G`w$aaSnUyDgnVp^N$yi$nXN;MiUku0? z<5@L0(6)9zlCO`^HAy~dBUzov4uzq~JOi2;-@DHV-Cw_~ zlJoayRRG3fy>QRt6Ib}0cf1W~bKJIcO>Dn#uQ=rcAA);QT>W1&<6~$4K3@5TQ{u^c zY#YP(-xl|M_uVn+h*!qRFF#0+?YKvW@aiveO~&6PTy^{J{zrr0Fqz!yR$kT{p%9)Bi7SyJImvOlyPwj`h3+yT+XD zW+Fdl#8zjo3wN1!smJna@*Jz<(h{W$yyNKC+0pcM8OGH)uL0M&7g2RqzK6JeSTC&~ zBu=O~l?-aG6-RCaQNQ=4f7@>Dsf${(xjqc>HL2T)+{7jxC*=|fIM$p00X7ql#qD$b zJjLtH7=>h3V#>3)s_pwN%ZKG!0`&h!4F(<&Wod?Ll0u>AH~#W(S&=%?I-Ti zRU~?+DtVlmDO#BNl#fYn!808dn<{m)M?Yod*+ll$hJY=(cqXFdU>^f*$l7GGaW3ef z`J4l3p)Hp-L0XW6H15(1OjS9f#G6aN3?2)gnu}M09c5l%GmkbQe|;?ne}lRgf35Tf6aRF1{*`fBwPA$+=o1b4!|q=U}iFWFd~N zUuSVZBj?C}1rk*T6s?j7Lkk-L#VUh%vX|@anr2eiy7eC9CDjt`o!hb#8$YQ3;hq>ronN-o|78!h3Ht%@eI3100Mw zB`-*=u(ESpxmh3JvJQnHg@gK$5+R7V8I!tbxTz6sZl zI_jR9NS(xwO6Fwz2bZyTTi%hl`Imf8%)#-9h1<6rqj>M%r1tkz`Cc0TV4<+#Rq3wE?XW3K?5CMr4zC*U1)gn5Q6BCvgDZ zU4O=DzmNg}${|ih+t@Vc9xVE;X;xlQGoD{&a0Vx#yR1%}JCu0jmkz~x-i&2T7ApO~ zm0+GZ;F(CBvyU5P)qoJ?h9>rOZ4+j8^#*d-Vm|1pdx6%sa!42%+|f+5erZd8|2iq! zrWcrgojG+jmfXCh7vs7n5~O^xrA&ubaK}r1oPTojtokKhA8ns=$lZqg1bd=2UFp=o zirah>M>?h8LE!|WBO^{Yr$x5nrB%y90vWp)n%G2Rioq;k90dmMoTS&yfo2aoNPL6gJZr(S(meC?dK#@A=RF0Oh0;c@AA z9~Ns?t%_Ou?-$1$|I+yC+g=f`{Ky5?(vBy@c^_d&uVqb3y_gpJiKttE>I&^pZ=mlLtsEjojN zhQYjs*9E8hQGrd3AJ}P7B}7dQLFgxs$v8WWY1XHLNV`Fv9m^eq|Oy#|K5TG=HDvy&Ljn>zc*MyS$d&OE{9+fKz$tpAC`1fEro+dk%y1kJ__ z4#+T^6q?CWS_h#W0EgQvD7w_)XM&20ekcQe>|8p+UJpdvpe}xA*O=U$Nrh2%93%-o zjr*AD3owyp=b|=llrHa3OhvxpyXhC-i`RbihjA)i_r23>|N5Wv&nH>=GX-`Po_S(S z*8Mk^ogXKC{1@@=PaGHf;{nzE_uP#Sobk(Z`9tKPFZo#9eA}II?|t{jy?5Lg?|4eY zai6>>?!0$-+_&`ZxcQb_;yF)P2-F)qJon6ls z$GYU6VXV>@+1N7x#P)e9owbtYF?i*`fxP_k!8rz?0tn$XaaRG{FE&;L31Rd9*skWe_uF({YIbmM(NSe^MhvALLQOpzyQ^vG?!Jh%2gH&*c}*-w=qs( zNXE1Kw4x!lQ8XSQ8n4X4!Cv5m*Z{o)q>b90IufH=(BNc6qdPx3xp3(vc4>s&vkNJ*(?V%`ZggKWY*M;$p2*95mQPcF?eV_n8r*#Cf5)>={CFJw{*T7N`|lp>?zss+Fy_mp@If^D9r3qu z%dNM>-AnI}<@ekgpMCdpV~?XggqLaEA4~7KCvLy>Cj3dCN8`a4xid-Xk$~RJRSO$+ z9Dq3*6r6X>kr8fHXO3E&>fC*wqP_VX)*UI0tKQoKS{wy+>*s)E!AY8X!pHJUVcTDv zT4L+*fIU3o3*=1CFWqm6H&Hv%r}@<0ZJyMS0WD7JhY->$c06Z#bn^NUXa>dTqNC=t z%4I);h$-$alD)y^Fjf|52GG#|8iWgy4<20)6$K#`OS~5(h2;sH%2C`BM=%Tke?Wl0 z?Bfe7LqkiiLGPdta*M-Q*%;{s@1X?(w7X82W2;THJaig})sTCGeHnbHKJ7K#=4Pi_ z0!(Xenpm*D<}Rz(LSckeA}YW~iH_>G?0BjB)tBS%ul_1dd(HD=SA4*WD5;RI3Uv@p z`0)XKKLXzvzy9gh~ zZP&&>9W^&jc+Xd2DgIXBy?5V*S4{k0Jpa)PeBae1oHZ+>8p)hK&q>mBu#fZ3xpyw< z#GzS?_4Pl|bU$D&ZK3BYs; zl$sd}^F*303_sE5U3rMldQZVe3{S_qV6OjZyzS7JM9e)tjymEA`Y2+5?;DLxOYy!M zyi`=Y;zti>K8tkFvyX{i{q(W1;4yel;FcvZJcI{E(u3v1$GFd1uxHFmnGxH@9Nd^z z&D%K^Jj{RQV&44b%tAT1>fvv+m}tKiIdMqnTGfIUI#4{CR1Gaa^1{kB;GWfWKp#4+ zmm0>3$vQJi;dCOVtzRaWUlZ=u>n~ov=AYJZR zhx&F%n%EdAB6(|H$f^RsSDJ~?V!@05tPODr=b2_;RWroW=aEndHGbkfX9E3To?HXG zrf^2(L6(|7eW|NkC*S8L@tbr`Pu$|++GRX7!e)q^B%^{}^X}DL;3|{>y%D?pP!My@ zjG$|xS}26I0*+8;N@fa6LiLJUczRGzVXTSOtr{0ENzH4{rib&lsZy9EIXEE4fM({? zbgYXO)GAU55Dn9@xxdcKYGP8V_W>4EXCkBvia6nhYx>| ze9lK5+!68Y*q)F2oA}*TKaXiU9}qL~-D()0RLaXl4gB*LEQs#5wnOYRf4i8qWKQh< zu(=89ofwyzTWxdVRe>y_gIZBAq%MqAXDVkQa|W_u$XM-X`gENTgI3tAvt*=efH#v{ zrWJB8Xe@H_R#wuIg!Q613G<}98AAqgbj_pgNCMnXfMv9<4|<7haL>aVr0=`wXYrONz6kc?TF8|N}T4t(k> z<5&Ol_*nSJ$KcOXtk5UUQx)4Jd^-Iud+e^h52G;$FUcR?aemC_E6wuNW(~lwRtwI? zjb&=Bj5NT}>dc&37rF*&Asj5&VBPvLkrR?qz2ffk3X}ev*T8jxoJ?C1+uA(H`Z1vG zIV+{)ZoV4PU_q9EJ};2eEC_RyW+-TLD>da~7z0Q_obr>34qkus!mbl-8d@3qGFY=7 z+mTmXIuS6?xF+=YX#pZhBBOE1-?Mc9O`|t)hxsTiAo2|gTrlXO!glrKGYRiKYzlx4 zXLd>JVs@#SuUK4P{m}$QtBC?VpMANdONFF^S!+`a1Zm*>o|4rPU%Z5P&OEcoXgPmz zquEncHOZD!1zUeB_ZX8JH! zPgrxbh5oLo&aFxeKy?5hc3}Ow5PCE+clMj#W2epJ^o?0Rnwk!D{A>C?uY#Jgx{w{y zb_GG=_Jzv6EP3Fdi=eT-k+ZM0mAeyk`)f$>d@LAf6lPZrh-w*0}*4+aq6|8%>a zwGa$ZqoaDgq>8I}Uf0Y`s4+Zdn1b0K+|L5bSL^3$nNu{r8|B{Uco|fAinqp2pWF~M zphMJ-AV*Erd1>i*J?bATQ_do}Imt0u5X5>I?;PmkW=#v5&MH`MoOac)=506d=2Bde zxMn#>oMHXhzyZPuuM>odS7q(jw(Q@ZE&u>P07*naRO_4FWA^KtutRKT&f0Uv11K=h z$yMX56g+_Rcv}D*Fv~|?{?nKdXs``j3&hZ`Gd@Xq&9eB#k1mN%ec)ulKXJ~1v0(E} z@saQD6Q929f_T~^c9LD0@u4!)W;`agpD{J2@mX_xAHv%QTbnd>n|Rd0hvaypK2|*? z$41=qHcB7Err>?jt79EMQFPs!Shi+e%*5J`P!t|`O`0?FJFaaD|@b`)%?7l z($)%qs&FkkXs@RkJ>=^|X!5dg9@%f)CG;V#A4$e)9@ujn^cpkUf++b?3#^9L7{Gcw z(BiWO{6R8p?d8)s)_qQMprNwi+?S#2&)0?_*+;~rstx*{M+KV0ZtEy^W@2;NmOMA8 zeYJkB7BB@Hs52R@nrA}T4CU^(pC|Fi;p!KbU|lBw$*n`;O{duG3OlfVnNNJk7*RWWvG!Ta3Q%q^;&6C=h+k#Y0`ROA8MK^IZK3#-ezw5CNO;fU(p1 z491|=kM5##&shH^If)IwY%Q*H_S0FlB!zcOvZsF6&@oL1 zI)BOIxv}d<&0F1b;I7n?NMLK2y@u8!bKU2tDc9UjekF$Y2yz0&@+?$28j5jG%yQ zsm#1IE8Y-2a5ACtXg=r(=0WlzF6(TC9JkC(ud?DWUbAcNBmfYD`rLc{FXQb`J0#A# zH{z_%UJ$#CE{UUFdjiOJi`TyW?_=(iO>x)V_uvOOzE==G{Nc?uFMa#BVw;_}kGt-= zD>kiP8*A3C#SLLzEZS=!{!9ga(}4#!L%4wqjf}?Tb?|M28_fg1jiU}cFfLmH>ap#= zo)zaXC7OPrh?kbW_>4>NI`rq@quN;u&MN21iE&u9z*$RL{zMZ}jZ4uUpt4U4f{Lm= zNPt1>$GU61&0xP(^m(bn>jzw|MeY-mZ$&c#nVU*{9>Xn-$(;zn+ksKZp)TWXE4a6x z_Yq4qFdquXI_f$R69Jk6X@w7KfEWVNbjCpp3P*N>;e#PV(&YdWYu-Rq z49U3WB21V}WKn{aOy7tyca@1e8A>KJ#vqm_9g4HKYELnzHS<144oSjMd2^JEJc-vG z9$9Bc$d>d~XXhsh7{cgh5_W0AgzZZsKxU&I7#?8I35W6537Jyq!1^&(0f^<0d*0o+*WuGc@x;{>yx)Ak=bs*LoV6S7d3VRA4eMh)exMu1AEe)B@$P}26Y+_C zzUNKCpUzpgW<$)JH8VDES`}wJZijg9_0~Li{8G%j;2kini)r(w#HRZ<$CHmgJ-&YK zJMd>OU{>LH9#ad>Q$$&3^?mUCd$j<`L%Gi}TIsY7#amfWK1m=Kk*>2vVEt&LpC=rM zeaMtrTg9I5cC9)oPw_X%k~? zQh9Adm-hkYKwM@|u2fzL!Qtz^C14Z?lvSnDkd)-YK}h5zuVbBI@cR@Pv^P8zimUHa z>{m8(kyilNQ!~cwD>w5phzADz1$$0m)J*ZJ6A7%BLz=TlBsR5^WIh0t-0_4HuP_F~ z*T2uv?UwZcK;bYdmPh6#2fN9wxmKj?%#pP~Pjx1izFO}bdk9CxE2A|sM+uNz=2cwk zLci)kJ1&8PR3a&~|d8*YdER8WrbYgj0hZPB9eAZu&)>^o&E}>v;V2@h^Nm z-aLGBy!-?{88$CYKJ{N>_N-0#0KmKPq!jLXc)9!J;gLA}AHNlo@I&G~c$~LxJ??pH z*Whon?iBm%wKIMhfDhK<-(uzCye%68&wIs;ZD+*Fr8mc`cUtUEnCDam+Dqc>ck;6+ zR>n*`-?ko)Ip28J1@WOb9~CpRklaU9UX`d?^y|@|KMPgYiD%rcU)9;vX5eva*Gc0Q zQ7VA3Tfdx4C311$pICFEIR(!txtxdQT0d(eErFVkB5aopU1tG?eS%3;dj@0ik%Isp ziQ$tl!qO@dkJ+a^-Q?nQGE&q6q-Hv;ivby^XvATx#{;wjm%kxof&!YhGO7Sd<^r^d zFiO#Gw}u@^*)-GR>hO7`Tf$*Br}NI^T8%NI#g1(2SyLeX%p7>U4v)nO~UpekvS z+ov@V5C>`D0AQ>}GT>aj1d_XW>B?N{CIs#>_jvn80>>~XuRU^$q*6$ch-qfcC&#R9 z@yD1K9~7VZk59)*&*Ptd7>z>@dun|1{4d0t-un;n=`;QTzy9AZcAqo!|Ji#Jc-yY3 z%y-`YrVk_#gwP{kPn1RxMZpF|RFI-9wd}Q?*dR6!JFtAHrDdTaVi3h3*cO5f3ii_5 z5PXV&(gz`cNCE*uy4%$E|GqKiT6>>!Z*I`4=llJf_w2Ri9OE0`_~w{%t+V$&`<$zH zclPVA;axE9aGP6^Gsvo%GJ>w<6@)zS44}G^j z9eUyT!Qc4v@k58t)QddJavV1xbRE+RNp!OI*I#?}IDYs7Z!#Cbj;-2*?Ygb~*lFdP zbzZNZ-3n4Ic3(gF%xNZdR|A={`5`Ho-9cpuG=J82!ym5J6~-;*T{L^0bkp@We{z?W zzG7HT8g}n*3utTmqJ@!f5}?!Bm>E%JrZldNERg4cXiaQlTs&?DWfQJ>iODWVXvRgA z$;-t2A*Z#GG1k~^bvI+zbrsX^N?MwE6e(Sd!;&7Eqg&PjXB=M8xj$4MxYS*EO>R~% zu7~Xv(4?7PYQ*dU4-dRGTP8sri=#q2*j8f&Aj%JeiHqBHR=;zEZR&GeCWeFW;r6|W!9`h&j;myY*)?9<2ZKK3j0Q@^81S8IFS zmE)Dqdf7Pi!1s(Jdrlw!@fTk9zMnFEI@ND=~VNi&htL!?10jY7l~Jb0oRxl=*-yttW&Q2igOJ3#Ps!; zJkSs*CpceBCUP(zqNtVcaHoMP`M4&Tn=Nh3SiHO6=VV{;LdBR?O5Dd3CCOnU*^CuO zfqSm4p~v72)nUyWp0y=?$6ND)a8HECATMuFbLYUvI@=$T5Vt0s_vmBm2lZFoZ>HB`zwn2z9AEXBA0y0> zaokkP&S^bZC*ZanS+uweC|4Uyo{_9z1j|04!Uz&2y)AKyN zaYl9Yv`>Fs`RcJ(KS=P;9u4ICNzElQsth_c(N--0Bt>e6riLzD0iDwNMS>KD4=(!K z>qlO<04irq76(F3a-S>F^IGK>HoZSfyz|ebskG--)R~(saVfU?I<*SB%5O>KNF4ym zpszr5wWzc4riFr7W&B)g%Zj%MSc&mbIMqxz{f~5NlbFHMoXnX>46@Q!A&r#T96gw1 zN`Oxf3vCeN(72!$1P+@9oO;q884G{}8hE2#J@y?s4TFA~Rj+A1I>EslyZB^3k!u(9 z?xq#NsypYnd(bIbi*U`0;2xiK;m3`ie%_yr!{_v0)Z05Qy!*Y!H~+xB$CrQS507`~ z9r1VQ4H zQNONh5@X|OKwp=Iw2I}Bn=BykEx~>VVw9jsl53d>$di~(Zku=}Io!z~UPllWN``v) z1*C(F4lk}wuwo4L!fP-baX=Q*s!ijgwn3aBr^S;hgvB$|H%AL-SZDAUoF3E+3fY_v zlLqeVV4ev8C>#2i7~g~8(t_?goWCN+b-HUa$CjsTyScWICmqgZ6>813w(lTV19v#f za3YNCySWaWd%N*XKl_ex^xzqOF$l{oZhyD&W#95cu$I~A8&fdc<|TgW21-l5hwk}TpxAMPaNm?Q|vJmY64j`i>+^R9zCZ`l@? zdj1pl*Xz31UiL;8So=A*0QUUSh+~Wv-^YAS)cQMsD@0F7{qfO?%tfy}3gjBmqn~FO zp+k7<+B3KEU{te$;%4mpbkuXa#N>rY>A>Y;p=GV#S1-&D5ne;st;gedLGNv;=`YqSJnT5-Rt)e)G_fgwF1|6OOfI)jz2-IG3wJ*6_7` z#dzx771^rmNpFl-jGgnW+g&t%>?Q9XhtJL*%HsbLyxrYDVSLLE{M`78@A$FtPW_>m zx4-jU% z{MNI7d))c%cNnLie#W@ReLs1n;1s+3r12D?hMff5bKaHiByr8VhHUiLgKhHNd^gdy z_pn}%=>FuphqiNW0qoxee3h<0dhY|UlAJ}-W){xX#Q60w$rh1H(}*{6>U z=pwz1-paY{8LG{h`aiOon|Sl<;IAX&=Krn;{A}=p zEzjIq3%wY;UjOIM-qSDAH$8ox775-f6qo&xGf>}@ zGUS_RM=#v*>j)hF4q#Bt*C2M;@H=0IGHF!4Fyu(R6Q`boN(-FkfS@{P76~+K?zvGZ z$f|(@+1B*PBP-5!7#HIPFIj{$zQBaQ({tUXm{dZ|1nM#hMcq#TmN!g`DR^@-W2ii>f+wFIIK@ay>eXn;+K0(g5Eh} zIB8xta`0kBT+W4Kb{K56by=DSNTu0vpIdXS`;&G}SjH3ZvN3ngW)-t?ZlvlIYhJ<% zKi98ag830SA_QhJ85{O!@%`T03y^kkbq#r9-ajW_Q>mpGI)dW+x#W<635# zx)sz36jvHHcopkgg9*YC7@8v_FVN#NRcUEjiW;bN1Xi;G0SCr%a4rxtC$8r^^v#XZR5(9JXijDHoVZ7ZO3(DYaLc8)@Jt+;hZZh-I8>p z_qi=@R;yOM2z6@Aw&vZi9n~>C_Bq`9b$|Qd(Hq7GkPe6D;E#vudETv6p9{~>y6bt~ z82mzD5qLgTbJ>o*=8wmf^~r{*SuYMhL;rW-vCCdOu6(_o=ZV+P^NM0p!PNtIHDKT9 z2Q-qid+QkDx(~AOQ$t5Lj`6zR{z$lEyywoAZRD?h16#7^p%MxeqBUANmYO( zEQOiey?N^fpm16t&BwfC@IgVd!e%# z8AonnWXI<|!{+9!@#FxfVaMPC(7YZt#?JW60Zxz3JvnezjN@zU#IpMnvnm&OYXlCS zO`x;w1fHaU(S5;q!{Ac9ImF%9d~4dZ77A>Cr&9X49@{m-G3QD^>#v}7EkY7};~b)x z$xC-8EW1vv=|q}ahjS=?O`&k>!ic@G6H|3UhIOgab21jY>bUou`;2kuma3=z|4eHZ zgM@WABFSNkj}TNVn+E30pV)C1^~w_OuG=DSVh_=uMM##BmL$j zPq;TUW0sxE#)Jho3;m|EzXlr`6ELe~@@Oflg#*o&B+rVst5EXDlr_;eoa6dv<5kal zgubgM#B(HE5BjE|@2DKQMkQrBlN<5{+!%cB<8JQe1y2H<-L1Y^)StY-8e?aCz&$s0 z+TVOLf8l%F6KZb9u}E;}-efJx1$TeSC*tDMaYt(%-1C|j5Zrpd(et0rK@Ap;d_AYK znYe6@$F6bDiLP~aT#a4h!mW9Y1=BtgL{Ho7E6*LvT652}%#_5$zAv@0z89FN z2|dVRQmbQLo+t9C{9P|UEh*nxbJwT&N#WF!Scc-lF?k87oL$Q`ud!f?(Ao%D^WvTf zSKNic*ZOvFcbv}MC7oNxGf;nr=98>ng_veTGvAN&N^0LZ4-_FUsSw98$$YI7rJ#AA zD;6!_oDbgG@E?e<<*NpKHpSp z?3j|_xI^JvJHrU%WJS-UWq`A2Zht_=c#vG&_QgvAKoz7XUSpRWIWZ_?WRbn)F;60c3rqKN1`PFLZEh#@ViyFI;mTKVbK7Q;u-KQeIf}b^6S~se z{uv_8fPCOg;tUfjgF4&wG)~jH$F$!0i+q!`rDD2Zb+BUH9Gm z!L}0Aag#d~geA2XqQu&Vr~vT2D z^#^Y|b#AUUIe8g!Gh%i!FRkeJ_GXN!F?B zLa5YEvq~5IYGMi1o(5zhSsWmnjX~HA#4WZS&B@3BjepaPgv0e+~VD&r7zdvtc32w3>*CyH9i(-8EYT zVlH3ylSwugqpwS&s4F)k zLn~aK zn@bn2x+#Ha6lZgyn4YQW3!^953*R#NKxd>dgfU*w^v!E~ygmx%S=*W0lyeF14}x*y zu6ZWIPTnP)<;1mU zEQn?O8V}#L=4Ez4WquaynU{D4A|7;dEF+szmpQ-8mt3x!AdYlUILMRQ#_4Lw7G5yv z@5N@`R6Y?%tx| zf7^YISv$F^hLj(sA(lpW~=gePK9aD zyw5RT=-3zndOusg#+>!wISF|4Ia3bsQbhiRS0`vV)nR*H^S(zuwd}v*mgy$l=g3nm z-Rm>yONlTVkxwVflBeU)p7ki3ginn|!xOYQinXoDBVM@mFdxPYCWF5(I4E2k``!jG zMJ_S};V4-d1GovF`nS&99YiI~PCp6n~ zowRk~?JPN4hPtkhO*^lX=17iAZ(W&%J2TwY+_kabss*V|UGtik$Yi)_nost8ju~b~ z(dD|5r}lvNjS=Jq8}$15T&geszv25F>T{1-W}AAZ!a44~e%^lq7-Pt?e&Og%+cI15t~+7Jy=`&LcqV~C60_m8SoM0+|50=XzqD-WX8?Ai)QN7V5(|v zYSHyT#stLban(Yuc&WyQ!f4Q0chs4j<@9N4PF>(%V(AM|hU_^F z80&%N3|uLHwAW8)@Tkan@c~2KlsWx(j%g(k3Q}N z`O2LAqy)5BXgY;M>7|%xkDZ}@#YAib!1e>!h7|lDOR%cPopxVMj7}xd6#*lUQ=mL zbmQK<<`sqL*Xt*PHN%-)U}&q%*$1-hdY`k;YH}&0wu4dDfb<4hC##2CKHx%$#^QAHMF{ z(6v}=2C_mI&XMMA&75HlW7lvMX`UXhH9LknwbO#d_kZ|4H#JKK707tewNo=wifFHm z>%n-vQp_&RR>Re+`6fJdBaUVU9kL2tWLxWciIOUJW!vP)Di@9<`RWuik4sGoS@M6g z7SFtI0<}#HeyNHOS^?{9vAUY^lF#=H zGAm-<9M?Y~fxCj~@=rMbq!OLbR9cibG&kDBS&M;W^T;}^nfM~xMnq^}H#D;a z+ryrppK#eotR5XG0Gy#a1ZYzQS-(Qc;C<>LfUsC))dH@a_c^E0q1JCV&3HwZOd1r%mf~J2!)&9O6RlQur8#yC zJNI04=X+bYTC;1hz2~eYJHY7_&e_#(%~gx3#Xwg^I5jW0jBpnT%W3B{DSP={X90=j zk^5W*`6);2A!Cm6LEPLuR1(h#Z_f+H!XYbt{J{W=3^^@Q=fZRLC#8&Kpm>4pCg*Gb zG{CP8+~I8`v3m3{z@o!PZ1y({HW(`#XY(rDIH0M4=h~Vbm&4p2h2KhRP}_h|d2{0t zUuq~soEWEe^f(qDO@^I&4oCKX&}2x9<{CLgcKVIp=PD^D&rcn=5-lUbs0BAvK+}^N zmdP$)H?H|6+~<-m63{d!OD7L&2DjFXnqI$c%|_~=a9q*M(7-r!41gS|F+G~=e3JWI zUmtmsU|ApYwPtS$n0C9*Nr%2%f8k(2nboysjeQ*;$gR}@pifj+rlLQD=X1-<#Z|m; z|4Z(3mfMrjz$!J~eb3c|=WLc$LQdc3SVU&c!$)iNz~vxad{qk%oRq{HZ56s8BW^ z_YGfXn)R3?8xI?p9OyupSa)sG81e!+k1*>Zt@XofF+`YLXM%D_3exCdomC_tgl_5) z27~P@%@F5HPRLp_j4?$s10#&-3lmH7fnMd%`PpJx=I z^%cw^>qF)A`oSiAW~l%YAkso>T(RcFT`DXJsBM7CW7(zIf@@!H&=JK91u%YfUxBJx z7;}WmQ51uLMvUFeosnxLv7FJ2^+cLC?sJnjG0j_xmOMVHTFxJwyEP7|RN00w@H|iv zHP-L0Y&xeKl14H57v1Mfs*Iddu;h^za$+LK%B`_1WuP3iU@Jf;#?cHmAiQ)LbsVuV zaLPZM02J2AG$tOQ#6uL#42;kb%|_Ycp5s=$fK8wi03Qr@w>4Lms)d;y2a_8oJ;I#9 zN$+z6Dc_0ib5X6mYE8x0xroKY2|yQ*t{>DUF<_uzXsvxNTk79fA*##Ckr*IQp45VF zd$R@(>AEG#nwDBPeH~W3-SxTFvnJ-0%57RDAV+Een6WH1v7Uag7|W+_%W^#+QIO?3 zwkR-%%%MGHpG^R`csZ|xn8v&&5qAxWq$7#9M~7%p$Nfc*{iaDS&#^EGPL4i?QO8i_ zTB-qD)&^LeuC8NM0Lz;RtFxgQ-ehp@PSPKxoC7vDxI7OREtT`bj&4N_2DtE##E)Lf|U^ir+R={ zt`oV6??&&6efyh22QDCX|}~sOtH7n42_tY8Et8%2sd4Gl->1k zE!G$atF992Trw@SsQHL%>D4?G*Z)Z6R*6sbKIb}Dv7=8caO}{$rjKS%x-`qOL$hf- zp~RAgx%NM-nC9kiac!A(W+T8|f~wA9h|!+jb3rLyzEj(ChMJn^4c52fHF+JPGZ_%g ze=pX`G6|A8u_H{wx)QhxC#INDnonQo1T&ZWRx86Ka|f&vfcLBODyx}wfK?4^culP? ze0de#hkP!)r_-otvPuT>=J>o*w{8TGl{~MUPj1TYhHG^9J^>v z2EFIQp4FEbO_W-6Jv>9W(WBOyF)ZsRM*~V*4;|#ejqkZB0=dMtX26a=ymVb>^Jd-n&}i14Js>~v0BQ95KQ63sxT3D6ywXe;4R9;C zCG!bp3Iw0cJC_bFRD=n?< ztqsHSv3CKa9bWEp{&)uf#(L0AJV&tgpksIJpXxxG z{IxYF+|b;$Fb7Em2_8%E^s=b5QRC}M0p_TC21A%lgy#HnEy`}c z`ct#9v63zXoMS5w(eahtnoGmxo|DHx9Q2?L>VZ#BC%4>>YzF5TIebn%fboRV*C6ZH ze?(5UM)<{h>98~<=j?kV1m@$Q{K6SyUdF750h==9YPHcF4H&1L9Po31!WtS4HGrV$ zIgv~8Iuy-;xC1h zSaw_+nz5C=_uMq3Fu@b3=5-ZIYqpt#(nj-EEh=tmHa14KAt|^bEew8lV5+7>2?=|L zuQlg-fJl!G&EbjWW&PmjeAI$}r+lAV#dZk(0Qzpo*mACWOUJ<-%A0vKiwElB1f6mo1SArjNaPMO$cx_)y&Rd*bb^ z5X(WSCoZQs?9?HXGRF1_PVtgEaq==JgIZl|p0jvn{I+HsRSz^mQq1N{TtMkJzBO;= z%l{}Y+pIC1YAk3oTTj@QoCaA-s=cXsPC&d7(xe}P&3MA zof%Z~ZZL19lzqvkUJppoK{{_}?pjzvP!lWLvVPljhG>)5DOP)qq?1cd`lQLBYf%_G z2{2*@cUGfz#)f7HH?=LAYS#k5HJezspmpUh^ozQL zVGwP8nini8LZVYP8Xb4xBHk~*y-y}Gb0Ksl!l!@m+g_daW9w$FWcCu39Vk|Z_@Meo z0JflUs+UO_IPG=?$#GtPO)7?9b(GDl#Vt4i@jG~xFD@NDJH;tjn8_6;tmehjxs5R& z0g0<{&}kIR+(@YPLth2^L^f>3r5+C6DqgUmUB`Q0;6$YJg~LM*+nSwE4%b=pHU?a^ z(#&XTrmsg=*@J1rUhO7n&b*^}&5>FlEUN-{W7S1^rJJY!ZF`Oknf0ti3Nh`i%~iMN zQsqTTar;e%&&QNOTHCCOzj)J?6k+xt|5xFMh1q36}eui4CKQ z$~&o2)%AUjy#aLI$qbgwo2E3w5>V}>@OZGAixmjy)QC{0GS=KG4o&#g*4ReRKyf!N z=mZ>tw*vEgE@PW2z^5kX+mu3xS@IWS9aNU zYDR|~HOX}xksEccd?rVF=jgLII&;TOmpaz&0~JnE|{9Sj==c z&pMOV1M(*WFihcQn%eS%c*9td#*D% zRmtRC^@&R`kU_mb%?F4hJc4>YHjcLQy)y?Gt20l1zuHt;=WqArcs2Ja%u@yR4> zCc80b2EZ$%N=ybTbi59ny_VK8Gba~E0Hz9`2beUZg*Pnt!Vb2%m}B?xCh#WjIfXeE zUW+1miIB%lKG%YLcIm*maIHDuXil{=Nnl}$=EiMm#%glU5$?_FB)p))hX&@K92lLW z=g^w}mG5(F&FGk#(JleL&sk(2qHj0NbNyPg*&tuFg4y;=hQWtw%2dPVG@n0 z5qxWMYsRML0&-~0Ij7D5io@NTu;;+LIf2=&nf2?rN0?FsLr(sYb82Q-xZLOD1HnNT zj8Ez&2A{oV!RC2!QoqwM0%gCr%_vN4IxZJ@FkXmw3*=K-VD8{{Yh1aVM+dZS@M2@0 zu<(e!jKXZ*s9W-(SMF3Hk9LvCqw* zz|>;VY{8kpF1#pQbQTOk*U#KFhom9DdmMIZc0iQkhHqXc&C^MG4y_qtbHiJ~nA!%R zIdY7)o@ek`a|4rCUDw_mO{BAeeV@a0ikb~;%@XK3BXmXU31e!Tr9>%5*Fpj7dxm)? zo=(-?wszz^c{emSpD+Tf_ngz)Qt=ksoTO4;>v2=}oO!zz;_w{Alchz65Vg)zbHvm! zHEB#nW|7~)D>QQoXGKM`tTZ1v=us#8Hx{9^7%Qm%%IFkkYr8lrS&OfmoF(9Dn7R?l zc`>HPap6e6mma(<@UFQ%X*;Alg_!jfe`laH@U<^b3T;_rm>ZmOItRs5pWt+j%`nVd zB#fO1X+U)_CXjHgG>1$_I7@R2?QIC9d3B6tjl^MIj>YX-I3JojDmY-V!G+C0ouk=4 znOqCI7T(kuzQjh2I4oc_=kk*pKIecRUZ10duxQ2sI@smLv;4QeJ2V^Xkj%#v;?>zo zYR`2o%-!pU3Tp(*`D+ItTn?R z0>`4kL)2m0T0h&YeBups9BWYoo(%ujm%W->@o6}F(}#^b)VcCm1z^3qi!DJ-mNW6# zB7nxl+F)7?e0tTUEw z_DyNw#2oZRw^JFnE>5R0Fm*7dV;F4J!a8kB&diSh#cRUOSG?<5Swmp3ini)bMC&Nc z7`j&GB|xyQg>zI889jzW4^G5lD@eGuHN$sGn#FHk1)M~4_9IEjT=~g?AT|3-(A>B9 z;D%Rc&!q9_?Y=u9^LDE`ul+#7;a=rMd$gb`czD}JUVG%seGb@KGhbq<7}@Pa3(5?X%@30!+S7Cy(UFzBDh-SE}XXaoNJ42d_hDun(Ln7`0@uC2*>y`cjmFHX7NrO{Un?7&DxiSzHS)mfiz;* zywQw}2S9r0rEBB{cOx3xT4pU2W*VP`c0M#)sh!c_^o@#MsT2V1ZiR2=rW?YGa^aI|JP!i(lYnL9b02ZRDr=i=Ss z?)zNx;+}PGY-uLnqTRsB-F8Dbcy8iSFL9iEjaJ5elmtRis@cDLxmi>5D9+c8 zlggsAd2}$Eyt5WW*b$$R01~r9vppnm#|M|$#nDi9=fV@mgl273T}^D87d?Jgr>R9^ z9!skgnVQYy+{j422%^7mGtd{t)%s~v(!@)cc@uwP&1>GuNQe_U4YZRt7l#Zd(j1|V z;jsIjvm-gwrJN^RzfEW{s!mLvTsm~sYNjE?)9WPBxp9M>D03~BN9;bjc%F#)$b_?tyRStggF#oXo5uiTuags?IZSq--_Q^@qzE;1ydscpYUMA7W5gqc?Wkw9+09s2^nyk^3>-g6q(T`UTBISsvrf9t`JPcx@#+X437s@&tI}apb77XO>UB_sL)5{c&T$vb7ACvlLZz_l zxe)|_`EBwdc)ok>*d?tsV-qG)W`@)PpL>Z}xb29i_6BKbDW~cuIpL+FR&}nC@~J1y zm>1q6!9};goZ>-o^-rYPaTREa;#A)$8J6ZQs5QvBq1j=H?VLTLS|`#xx4SSWy3b*c z!eWM4fsA73oNO|!?6UEt_*$`eQ^Wu>8N$>|40Yy=N&UWlJzV>MVN{F48nI5(q5#L} zWUj3>aS?%3?8b>f)!F{yGP_-fbB7e&ptNSMTL|%I9y6pfI&8+P(|wfADq}ZQ@`W<7)0jOxRtb@X_)zOAKRGI0 zd9pUx%&qed%>)r;6(E;}3nCssbT+RJo0P$Ch)JEmgOWzlxUeRlk2c#z zvHCga7B8TtgoeU;{dAr)6d=5$TDX_qwq}ST%L}#2k#b@H0I#!(V9f>}7-f@r`<~(Q z11}nKbu?`5Pt7xfGdYb35>?q5gpXkARYc)sxZZO{3)fjYe@HwlifVUZJYIN6K>G0prAp-D7yrUGbkYhtW%=ZLUw z^hrZ z&3*|-k@l%`7`-ZiSj>q(Xas1W!$<8loRH>%) zXogQtuOBh1`y4|zFf~7O>)?fxQ!ek9Lguut1(+N32bqqjgZ&ilb0!5HZaPj2xpmYI z!-z=_`#nahVfJ+#SCngDYw+$0%hM@1(!$N0^5$CGbuM0~!7LE9_12LQ4(GGRT*Ga1 ztYcJl7J@IF)qEEqSdH8?$LbJ{96Jdk8WnY4WQ0}aJILosXMAgRZs!Saw1l;{ni*SU zCk%@-%`PLj3RCi}2TU|+h6cr(tk^(+p~c$0L@u^Hd-WV|uU1hesPHVUX5Qk_?TO3o z1rpL!W!KOg8ag+J>bIum-t{{1AN+t&jZ-EtIc(=pI+uD+kDU&)=2dbDo0<)muSA`y zW)gd6SX;%z+f}n&_lm`=EU@}XS~ zj_z9&yqG!(U%UqSAc9q$({Iw+29wVykV`QjY!c2jLuDX_M!|wG2%< zugv9`iK|m5utn%(Cz+c9oXm$uS>viH0VYIFIU7fkbj zo7^6(s7}Ny`&>W803$yV*7KaarEN-dKw=0z70r{ka_>2O#@KuI{q!s(Pmq#b89Yg| zigqiJ3Y|axS=W`|(ZsQ_TD=C!9ZPY?M5 zvD*iW@^n@}r!{_8&BQ?bq1>A_kDAJ^n&)y?jat)M^RBgk7fltX-ezCJ z-D&~8Yf8xE_Ml?aU+3S>G1m{A9(gjb88dk;V$lNLt?V1za_pvgYN@$SZYADx#$EKd zbMAQpGB-H-YR#3AlyQaxjISro#S3cr2`xq*)eOqm+~k3z-E~GQKNz7k!-^%0#G(=$ zn)MI*$t%Z<@q};^fjyq}3rfdMF+x@Ta65_h%y^r0sEPX&DOTONgO{l&{6-f{Tbffx zKr}^JE-YydGTQmM=<0K7RM51?&gr$uBuP3JMLu3aT2gF3UD6vyGGnekL#Xy z^nHJ(=X%%p{r_MpfljnpBa$-C>C~!CfZO*uxVHDk2h6 z^rBDF4PGecyC5@P=DNwdinnIS9Swo{jb7-9h_!tvjCF14%4}+;B0?YI9bBz3@5CiE z=U%6pCmL9vP2NBgx2m&IQ4&N&aoXmM3OQQkdIsuuezf9h0VZDYGH&h$?W)-#91R&Y zXv+pQ);2WnO3S9o&5`$<>bm#9p>f?iE*tOrqwgAfPP?P@^}FVo3v|}3x;Dc)XS)%? z7BHy3F?b-`#F(t6wRQ3w0h-6Fp39Z^^}ceP>VeG(&93PYzSdy9l?1JS6+lHBK zTYpIV_lFdr7Pa1V}))eNGYMzYUQA`V>cFrvWXB~Vh z&FQZ+vo8zhbMauBvuy5Dsx#nZNrlO^TZ=VYrtm8*vGmUDQSq#B>^c74Pb30mbl%O)3*AY6z-mbC1Qvn9AGkH>=^li2_onmiSkZtUYo&njOnnZ!98h$YsdV4;_IkDPOJk#{_2<- z1P;~%_iob$QAJPzIJj^o%3e8PqpHO?D+6&UBHP+!Q62av0IuB)@b3rF~a z0K0DS6-4mLxzZBLQt65aiEx%eo+Xui#k5Mc1#m$2KcJq0i7LNs+hHwMLb!&G>-h+^ z+smixXth4AbH}{bniH`)uIjN}3-daG6~Mb5_4-A#c-V8Zt$4ASyA|3Xw$ylY)EumA zu7MrpKuuGfvSzZVRh?aP@8QlTpSpVv9vts~`SZrLuldEX_w+mYo)?7lkdr~>Z2fJ{ z{A(nzC4yJSeRVfmteK_o=1z)E#*1boJFgDWvc0E~*&M88CbRbL>2!I?pITuf^;AFD->EP?e!CT#VoO#!K zVEy;@?-lqrU4aAVoHwp|?rX=;JLY@zHZ^;F|)ypK!Te?R_v1^x|J z;P?&Kj`#n`TlC3@kM&1Ka}DSc*t*YQ?j)7b!OT!c#*D2Q-F=`DmKvx=Ld~FA# zh8u9=Ho4>B4x*sd{U|Ybi_pGKfcX^eb7s}-R=mZ?$!$xjY*M0>JMVK=Qc=wDM4A`n zO9tiubu_Q*bCmhv^0DSuh0U8Y30;BgweBf?6$cUbG8orphG=GD(&13X%Vg*Jk!#PM zedE|QuN`OH{hs6S1-Etje?RP>5N3e?)yMsHyV~kJ=vnB+uoM@qpf$ICwzs zrg=TEo@!Ga^)B3zYu`WK_`27Pqo>_++~rOej)T6LH^+@@ZRC#gT)!;kroVanyy@K@ zof@j6P91&fNVpr_=gxPMv!4Cz*{6^C=_fiY7?HWE6Jw^{&+>cqz-{)L02Xn|@lRd6?$!Ym!vwq9X=FP(*VbjhC$~ozs?rqBs z_{q3$D)}lIZ(Lt@?RDdZBS&-3)8cb2u)lg~7#%!xXdKwbfBL)*R)00#(7d6SwYY9v z_WIY2tB#yL?)Kq#7>5sTajj@iwY!n;RD-r~{~8=#*Hs<1Qe?PMk6jTTnh{=okIFqy zdzG=91hppFY}SFb?K%5Cr33%6*!VpXX1VT6v+<&G#SKzJ_>Cj?k}O@0I42;O6W`~Q z+Z<4p4vovC&g_{qyA{s1CuZk;E_vC+dE+mn9hC$%l2$Z$R3=U{7juchR&p9m<%-ykl29V}x`+6)3+*PlpF@f#}$F9@& zPPJ3I=Y{e^K3e)IN8dE`ZnQA)Up`%P&2_qLxW{X)c*n%ls<4Zpp>B+a4<8!)?B8TM z6%~A%y8-*Vjbj<*^6^*i2_{a?53qJ}wa<=H^(;{Q-JZSdYGNu&FG zqX8!da1HO%bMPa%=XpwgKA@hyQs-PZWQ&ngJ2?lN>!?b$y3biL)`lUElY68R5hxyUP0MtT|h zrpmBW7AhBm9QNfVmJA%Lm6=Jzv{j3AIA^uAMbkYo5n-G?+3?Me(tA^L%Lh97u)rO8cved zu{UAwkt;8M!+6-o-E+L=KYs6c{Zk%4?s9I;l@RKUGQiccPBFJ;xGASo0M*iX)=n-* z)!CR0KE1FtNkUDb__n3!B$lT%Y}6TE+-lo(UhIwz)rK(!MV}tB{mYF`kL)bM(PeLG3k3~a3zSPIgFy|a?id{I{I6%(X^C{j;K;~3| zAVaaJqX@T3BWJHuIpzt?;UEnpjLfy6*^Y|ByR=|6ZnKkz!&>S-=Y1<5wIOHL1KtEC zee|2%g4C14*iPgSsl@Lf6t7$9Z(cj$B~ZAs`xk2JO`#A7D8HlO77jSc*Y`QkL!MO4 zfZ)_66)_c#vj*5pvrO~)!=`|qL6kcPl>Vi$>WRL0t}P2-8*`f=kY|KM}Rt1tVd@sYQ`d97{c=bai#GfmC4n0ECVXIjbU zdQi)n{i>Mr`ym(=&e95&qC+G@@ylV^?VT6oj=m4z`7tV`KCsX2d)Ccob-5K`+thmQtT z9NA^Y$QCsVuT_!qkuS_WGsTB9#k{-W$xZeA!0tNuZ$IH6fg0UzFmV6y-e6$L)FSMK zw78Cft28%n>2Czd%w2O&PFs{C0*s(r818wlRdbcluJignM~p*t3|lmlKRZSKI6}{$ z=C*b$EVvVZt|(=E0$u@3=McCny7Ca^=XsjbJOB2N#}EI=kBrOr-e#OOj*Nq+ojJ}v z^YFOtnybhA-~T~ZKL_36nl!BvZk{9}CZZI_OR z-{XPfRk!)>@y^$L|G41nL)MV`S*;>1*bKer%q{msERZtd!5D<^a~qm8TU>@kiwC7S zYbty1<)TWRZ)E+%>8!+{VVzg~xn|(vMHt#OwW9w=;iVR*bPQ z)Lw2jPg!RCt!?gK>nEYS`AXfeB%$)*;K?-%JkreDF*d7u-NQ(wvRUIY<0lYY2 z^G8NaCJ6R^LE1JaW})!w;R2WhPFr;B!ZTK*_&NojGe=8t0pmO>xO? zhz_&HgsR2f8ncb;5JCI!c2RAGr~HnnaR}Kwpk#EAqpNPE%6{RTKv4>yTV8jl72`~& zxiW6<#H=DGfpB`VfA)E|9e2I`zH$DU2gV2A^Oo_1pMH`U?=T+uonJi8JG_6~Z2xKF zoYM}^kLSX~PZQl-R5JC8t|sT>a7)hp2TmUky6C|8gpa!2IJo){v1?EZlT9mDg&ord z({neqH6O15HO6GK^45(jPsFgN9&GB#Cv(?AU60m2xKc+Yrf+hzFKxFvTRRZz-);Sz z)$51c<;jo-(udy(ozdOeK;f2#xuI6`feZ@E6$fA&{2JMN0ri=Ord0LCRw@(hAeU@n zgD6d=4R=2|fi(%TFP9nwmsE+L8<#nhiEvu#PfQG{MKpWAukhQoa8(IS)xz!TAoaGs zP6SMiTELr9k+b%Rg=Ji;vDDLXIaq1e8E$hWUvp0?*sUL&h03zos1vUPEpyJLR?Op? z3m7+z)eo=2)HfPG_|~R#)*$BI8?7R&xsP}bA-4>=PUpiM1tEg?sGC@tup)O`KL@fd zGd5Ich}q)zc!v`MkcF6AKBZC3sHqCkAb6UJ=M)Z<+V%ZR_(cxYM}v8Rw3h zoxX4U^W}dxp7g}u8sqk#GQRyk-+!E@d&-#y&Kale-@oKgQTO_dk(z_X-1BT|A+k{W zsciqDap!yfhjGE4yN!bfc}g7p?ESn@;P-68$Fc8Oo=0i+_e$Xx82_Iq=(6Fc`T84q zVbS5bl#d8V`aYNSBiLkib8ubB?Szmh4{>&K^lI#~e)13p$2zCutt7ca;XIIrTb&4s zf{vegE2}j*gLUZO2Bo>&QMU}tr3L|N*wGFlr?J!$PtKu1bNunuvzCn<_+`+EXpVlN zDwEB)JeTq^-dnX0w(oO9%4H6FU5l=BV!;5I>*sM{?95@~`xMuS>t8-j8Yfq0lnq`^ zI+(HRU-;dwZP!?Fs9Q8UKt`-f3%9B{YvIZYKqUY8MlVzrPQ6r|IK2M2Cz&QK9hB;9 z%{o=ih7cD_sHa^y=+9VSs|JnBZ(gxDFcHAEYcZ!!sn6)&vC+@k!P%wb-ed;Qji9*R3x6@Nr=8`Qz+E$HyCA^Mdijr@eIC_5KeV54-GLb>nPmG#$vdKK4uWqDg=Jp2`A3#$Vi3ae%jip;C`S{ZD zvG1%4#>2k(N5(^r9P!6OKk(159&dd1GsY|K^)=(MkNeJXt1}MhBc;d2K0S%zopLT{ zZW%}QaVyr8cij7?!3Cdp3iQH6KibYmP?P)S7v6b%@9)1=KXE*BoOfpC$t?JEYCq9B zrjO-vbJ?$4j%DEQ71|}_QeNKW&l4hPR}SocBGhxO0@{A;=-`KE#<>!^)PkZ^opWJP zLTMInYNv6E?%Hp!Ur-?7)`J6UV1v9aw)p1y1>mY+BgTgcR^E_6&>B)hEHo(XQzx2j zNPc;&!6U1{5}eNr+phl3p|Xn4+WD?t*`8JP19F~S)gBKG$*O?0Rn#Jg0 zUc{o4K+o3aSqUiR202OAQ}ifnsa3n86zsb%vTL;&;H zW&IF^o8~h_YN>O2_Ant3xZ$DWlMT@lr~8GFC6(mG#d2>`PV>PPO7%SGx)V?H9x`v` zj#-W%oZV71Ue%)ep0|=Le88$sbFS@;mRj<}^!fpzpOcPJy0&=@QVvkYfOCw-SZMa> zV9(SnJ|#Zw!|p!5?y)~LjvPIv7itH_<*$3excC=-Ykb{Tef{`<9`|MA(9s*ToA>%Y zr{n`M3EP;2=$$3oo7|%uh+>i2R7QVgb+;M!xw>^10;`qUF-p$XEMS4VZ zO!rB1Xqqdomq83g1S(h|opMSW^(bR#C z@KpnX(tljVTRH;MVhA<(+dN`_eEw zVpWT-OT?}CM0aEB2f5dS6x0!3%TV7wvZJ*8IoW3;Il5DGVOGWyqXy3jH508#o&OP^ zIv(@i?mLd^r{8*QIR5q}zdoM%?3a$O|JrXHkN&a;_>U&?2X?rJ@v+jrfABnydltX; z(?100dmgpjuNRO^Cokj1IQ=#sKfdRGJZl^~bk;cU3?)+I=Ztxtmuv1Q_fcu~b4r=e z$Gt}=)ux_v_<0_)+#^ku102cJ@&kj|kLtNA+Ib#nch{K_wNYHI6Zja1gwwKqczU;# z-xlnsP=kvOYe)`_xlV|(6C1c1dcP>3R##_xh3^cH2>#3>tjE4NdNZVrL+o5M%PEC2kZ<3%rh@p$zc-l0DOe)jm-`#fNL{%1X4-0qfVI>(W#-!oqHo4+*P zd#g_v5C4Ks8)r()n_l&z@r%FtH{+pS@rZH5>s~Z|<=M|4AJ}u&xc8@g-gwwUK20wi z^#N7A`pXN(8^#;{_R{hE-+SJ;^wn=12hY9r_~g%c(0I^i-QO=-E&j;0P{=q{=UuRgm9%swTelo_>cg_)oQ(chF^Ud_%I z^FlFsy}zr*Dn>We^*EH+du8dFZoq zFtK+6%dsTbh^4}eF$Vw~wa0Rc4o{`ZNf^Ii32nJD*tkxhvKPwD>x4S@UIqdVJsayM z<9s1x9|m>k*RijLn7dLnkHXg>Qe6ibp$?gg>%#3{V7$wst$rrA_t&jd81&s)zr*hvlK_@e=pbAQ2#!D@xx3a=*1R%sz7&&&XpT$+S zigEyJOKYlvguCV+gi|PYxLus~3qZGddoQOt#i#^ecwy!HoB9XzUoN`cuxA`l@V@;A z{NEdnBUg-He#+CvxcmLbMdu$K&wAQZ$D8-waeVW)e$)8q^N)|0zxV~?g)e*Ac+=aj z8i&q3e|+Mnea?9Br+?Bo?=0Q7lw{AicD(!rzdQcs-RF%j|KiUX=bwFGT=~XJ$5Vgh zPsaTp{P1!9vCGCKzx1r}j`!^!A9Mi$^*yefA#~$9d4Bun8!YF<#^6BFCHJf^#jL!Z-0FJ$}^reUiZEW z$G1Q3o5w}^=ofF$`PUsZ!R&!lk^bg&B0v?d5I3@ZR5i6^!IysV$U^hpfR}zwb##H$ z*SY;@TH$)nbtLf{YgtU3awP@Hx~Ba}+YCFA&A9xxvLjbA>_KYrzS*`NK%c=5|G9hYBu%{b>)w;P}Kz=w>_zTZ8@ zX?l)GJ9^!F#-IH5uZ^p2ey{N*pMT$Rx^Afd_=@L`pMUAHK(SNaUi}9(S`QY(6y06~i z+|!)n8a)?%`X#?I?(m6UI4<0m=c3o$;=bcMAM-Wi4#M;r08WikQP!ml=9$)7zpk@! z)INYEL^yoL;hP;ny`XI~eI2ql0$=Y9f-6(;&V-I^b%ym;2&eOw-7xW%ZMxL)i(s9B zaQ$sG4VOI_Pf_K~8*i$xg&QxV@GkfuY<6XQ|HNMyklpR;BrgbwoL5QFG&3P>f`P_< z^}7cO>#RZ36bX@bEE5@IE*W<>s5B#eB3eDd`r1qTg_22x^@%BIX*>T@TJYM6E z8(;Zf?lJ!E*-sol_tQ@t|MO8lK7Q?o9yM-##@=zm2d)~w|9^eQc>W`QXnd|-?47yy z*tqhaUaNQHzjgfHpZ?l-#S8vojN9F9jDLLX`1y-}dR+Pw&lyh;_nH3K!Lf1a^PWEL z_292})<=HZcaC?y;tAuce&z||A&>sa@zfvu#&N6D^+#3o$8j!u@l(g6pY-bSOud%< zYrPRgyZ6JtU_3xC2)z+&{Zij${g^UycFn5#m}tFz^j&AbS_?0$jWQ6ZM=epU+_HXh zPHxsrNRzGC4=QTEbN#?tp#hFHIQZ_)Ga`lWCwvV1n{l?9Er9UoL5ucSq&u6&*B}rN z19RUy6!5C~T|U{SRQw(%2iM$I$SPVn92gy)v+JC75gaNw&9rr$pc9T$xlTl64#z0O z>sO(s&_M`}Za1p;szKc(PJLK1;nmVXYuV729 z*mKdc`+W{Bf?xqxSm@lEeOoiU0DK5k{h3#0zaxld*4$_M$z_|Pw$@KJpiSFhmS#`u z32^6i;&dkQH>M_nb7TFuHf-{nO-Fg7$PnJ6rbA(MFTCM>;|0I@nDO&}dTSZqjz{f+ z@u1KC%<-mI{>XU5cRzQWdC$)nkGSak@ykE)-^ayzeA5$uWBkZBebLY@PdrzTmp%VG z$76r~Ka4MU$Y=Nk;RoLF*6|aM`|fecum9S3-K+mrpquIOo-r=@nejW9K4Cojr@m#} z@-#hhllAhy`MvQ;7d>RWRsApihHo8by!$W4qrURV<53TJ%y`ws-#b3)HfN0+KKOz0 z%3pr$c>GJBKJGZ)INmHQ?F;|Qm-+=^@8GVS>+4#uNWu28uRq4PsL@wkD1-P0n7wB$LSj9B9j)v&EXRZ;3Y2bU4LflGj~7#WJZLz3;2%Z-RB)H6gh z)-nT*x^l=z&*cM1!=Qk^&-LVN#&50~d2Q7XDPHyQEv@&pEzP^Q)vL94FAnt1^~2=7 zB;I_|rJ^kc+V*f+-E@vsMc?0DAC-ETbRnPXh^IS(86xZsF> z5BnGN_^;!Mzx@~Ek)MAbKfgM9!+XXvzW&kUcOUxX@kI~%B)=fM;*GBwkAK`_#-IJp z6UIv}eY5@w`h{a${kHM6pZm%2svmpS_|flp_&80^J%@g`@o)a{7sf>o`UdCyx<@~H zT=|M0A763tkB|F*`^Do|ANMum!}O-wwO3v-{`kATe>~^luZ?kiKNtPg@ulDJ#eP9Z zuxGVZi>~u}$*EG-PZeuNub)VIKXjc_tz-z?3^JtNeeKNZn?oZ4%eZ}=^lF>inrAeL z+`?M}+<@Ws?>n~vCbJmmX#kU(@5cnt&mJ=*njCIWqMHJ4mSw9ME?dLgkPTeR{>1zB$dRblR~N$(9YrB1SEky0CK<}lS!owvT1DP?%>e8jEcP(aFOvJUxPyR`$xX+jWxUrB@OC z0{bgr&g~>hVF9w4AhB_2hK)&tB9kQ{ zsX&F7r?^4N;arF)?sR75R&$7A=CWvpOaCxb>)!H)MOpNY`31N8OrhRB?(@};9e@3X z%g5W_`M2YWQjyGSfk5{Wj~Flc`EMV8 z^`>_@^7^aZI-d4eUJTxE{N{^aGoJCJA0JP-|aoR(_d;INXZyWEt{4L|t?sgmVFefV0HNu$tT-IUE9Xq&Q8ytGf^;0LSw5l^? zZg`TV!o0@xyEXTXtsl7LA-Z#-*>ZO9Ha}j+CCujaea;HyOaADc>>BbUg-{w^&znwZ z@P1}ow&e2wka%17f`Ko*g{#x7MMDMbI(I&=n(&0Avg)`oGQ+F|d5YRLVAiX1a@itG zvjyETMAL`Id1s%vaN}cd^!gcW0uFg}Y>#4hn4edg-!XX1*rDd=XK$%}0fF%bjfcum z8^Pvcu}Ru&V;zL`Huj-YB*HxGWriLkPi0$KR10A|Cvz{jgjO{ffU{c%xU0YOK9`&o z5^m4Ij5sGx*Ll5utrtzS9MkK5mB;&_S@C7ZaHh2ax)oXAz53|oz3(KuUJQQ8_djL4 z;cfpk-u8|sjE}p^`QyU-K5_ifU;V>);j^AGE`I8>#^1l_x5fhnebjUQYP|cZdiPy# zq}}#Y#<<(9^ht-}+^>(1o-5o-F1^jTr&%C#++;KbKgtI_p5d9*?X-y#~gF4 zxz^tI+;h*p_Y0pI&*PiH`#gQT=Tl!CfBeE1j#s_mqVbC7K4rY~g-;*v_{e7zp`Ub0 zpsU6vp1+gY9UzfjVeWdGwA1YW+5iE zsR|L~M_12hbJs-W?Ov~+4JJq|9NtsKmWb>nnYQdXEXlg;gN!$Mm*;cNA`#x-THDq` z9`6n5^;aSREUOb}v@!OeEu49X4Q^sqt$E3{|{t{a_~B(UgrS!jMaxI&1lM zV^cOurSJjIjn*j0lEEglm!eOP((W0v$Bvy+;cdW&c=B=chs3aU{L6?)tMw2ZX zlCy37#KU+SlMA{O5`E=BOAUPE!(6673P^r@CRo=terVitl5oJ|I>j@2L8fki!RlPy z%4ReAul$6%5B>G=o4m2FzB>nR8-5;zA`;~7V+jzgY8a3Om zzhbqQSEeR$z6AWvU%YHQ@j>^n`Ix)jdpz*bXN^~V;@q*9_lB!|?qi=Cuf2GTXaDJ= z#~p8bvvH07MD!6iIC1>IkL#B5?_W7S`{B=w{r5jT%d__~MeG=_fAw#TA3pOm$NQlC zS)XXh`l(M*XiS?6Xf6h}%{n*EYg%E{ZiY}d9`aSB$LwFHv4HTJt8&l1QRAYRT-Jsb z`48N42q`fp%>fGLkFdaT5oEBt=3OneCz9kypESWG)dU^RU4By zQcTW@gJ&&*FGEP;bRYNi(JZ=Z;VafQnrq)xU()y?<3+#n3**kG9XEXsdcx1oKAoGL zaffl2hySGRM_1@|$$E06iSFm0rGHo7(pSCM4`0*|8_#<2Ysa&m@)P3-k{)%J@z|ew z+<3v8e`8#FMPe`c@<+#SylISk|J+&QzIXe+v3>t;y%qo1ai_cAZ#-f=XPkZh1>+ln z9NE@W zagD&0zJi#{yRYbzmq>mOpOQO(cErW8LvlL_Wb zB{^)6Zhu`4iRZ=MN^pLP-!VWES!-D_QP|uhAsSw@sDA7NXHT7rCEgqfIiSvt7dsjY zOfJvg_$8;cnS}I}SU^9|Ahv?mU#CQDWUi&em?u&*Svd7T{=#cQ&xt)Vn}R(}v2v~- z2$l_0a!kBBm!7XD?GOL;@f*)LYn*n%q2)SZJpSkO4z5)@{T_E2cY4ei|L|4)Yc{{j zVu!u_r?yKv5f%y3Zy}A}eZ%jJC;jBTobkvz-g`Xtw;wXz{G9KO%dd*yuUzoH@t49q z`wf8%1c=jfp1J|$1(AOK|gRdVoubTFv12iqQT-J{wyShHe1&lstJ-mLlHJ~8Z zqB&%W?WQn)Ew&!*D|A>(zESc1u6(3Petr>wz&!WHZAjrvO`irG2MIN;Nz})-rNNm8 zaR>Uz(kc9>+KOuvD};Z-VFCpdkKaSCKEt-<;)OC3nR*0Bn9iO^7K`pgw?G-N^)MV* z)M_V`1SemwOF-ZPO;Y7*ou)~#n0k0>Lu4ijmQ^_WT;z~Blmv7VsB?9Iz}I$gSR8~g zIk5)ffJuX05cB0p5}Fkw;ikaV7@x(h{gn6lVn`0Y=6&b8V?5)5cOEzAn?XI%(SPys z+f4PJUB^e?`;X&)o&Emt`HQ}$Z~Cqo7k}=5DE5riYAIX3ZbItTPn=G^+0CqlKk~41 z$F6b1Bl!K8-TJmJ0he5^?68wtX@Ioh9Ey55f7tg~w&+^ifMWK~Bea4{9^ z1#ADZMy3_;VC#p^+|CiCkD+mT=j-*8oyHYG*Qq-{wlz;-(G^@~0fuXk`!{=;hXZBz zUllX6xCN|V?Ur8{vzW=6={Yne0On=SIfv}_myW2QF3@45mytR$mQDrFQrZEpI)<`- zbajvop5_hI#s=psQ)5ii5CUwFA8w({rvwXc_oEn08i8uo972$c?cvZ+c)O2ZKJsB> zJ7MsXrN(q1xTNq}0L4JOIqa(-Y`7-}U`OaAqZ47PwgMjzf&rcEIVUV`^-~u(*7Y!% ziOnT(^S)!N&<$B9b1e>BKV!+O99cJ}ow4a^TC=Z7JD)I{_qmF)o+yTqmK-i;EX^s$ zzRS-YP_A2i`y+_}{-R_xW zHkOmQb%C~a#^=lX#M_)S4pW~$0;3na#}PN?HFVu~EA;Yje#_(cyzS4%Pe1AJ#~wX7 z+Ijd9$xRwCziskW|P*RqlwZ2ja) zb(D+!!unW|4s_b7vxoLKFIf8PeX)elGn)cUqca>FL=z)?>NE5_%-6irs80LMWDXnI z2l#ZJ+_Jbf2H0utxi&Jb?{mcn5Rc1%&GvSpSwgetg5>r3B<0@RKn1qZHmky@5g64g zr-^c>!n+n(2e1V;L#=i5_`L91JvxnbDo?@`!g{T!w*X5mq9-d@BAS8uR^Ml0;qC;M zro%c+nA8H0;+2f2rp7pK!SmdN=I4C=;udX9kK6Z11zU6Aj+r6=^?k1WNgZw-okliY zLTUx_DZFrHrkrW({oG{jgF=0gnhtbB6x>Xk>jx)IKnIZ}NUX^jxBHVAr!1Zy`PO-} zg0?wyB_dQhF5E#^dK`lDlKP{5;NIib$LpIx-B0%EqT!FtTye=4$3MRHt>b+k`}Fww zH}o&b_FX;x@pS?}fxjEsYAb&ap)B2J+&a(m_!+?t)#=Eao+$5U^&C^?9St)dM>Izd+0owt&*#g z8X%+u*rK5;8zjD2F+qK+1ERKGKVp_TcTCwfcpd3@V&-nxlp%j76M}B%D?Pn_nFVwp zmWEC*zwGv?{+^`|i_Hl{1o8F`Uo7(b=GqgqoTX?>SrnUaoqDRonliljYwWHn*zSa8L^L_g z(-;AQDZU!?q>`X~j!(afY`6~SNuS6fso*SVgGw8aId^nr3LCM6zyY^!KwEgtzeE_@ zyd7Bc#2go74%CId{z6v9xb%!@Z*ps$_{(;DGx!gG{(|wNPy7!;oH>5|xlbG?9~7b}Lz%b!o?kZ8=#0ibEKc7ab1wp|3yR140rY zIh)grr5VylcfPIb=U`!gcs{H%Vr{@%!M3UI_2Y~SY+;lS0GuDpmijN!LX#xc@-aH9*)T3+R}TD6bWrM@|EWD_$Cift@C7Z zu`#Wh>@>jUTKb$rrI(}XoWydj*3TejAqMkyok5{(;Z>k9R_+>vwuDS9XLax^P05GyR>?-bp3maG7>rwbxH>cKQazUlG;4QmsR;zAEE;{lGoOeSh#Y z|AS}$fvuen7!P~YlgEut`~Go^UbVv}NzzzH8NZYL7XND2=^;!sTx++27QbWIUiLKJYZ>D|?t@#}{pY z!fly8F#nFNT8Ix@Yfd*=GA9_-BEv!s_Iw}^qSLIVcw1@ok z#+nSh_BLCuQ`gyc9op{o^W2+M4D!!8nm4xVzkWn#e_4=|ZYm?2Ej=F(bXcvQ!-Vr$ zhpt5o(Ys*MgQjiV^7Loq_2QTQu%PZSd^32}H_jWs_p6T|&w2Sd<1P<*>Uf-fr*PMv zZ;o?M8sndIZ|pijVxA^TIv=mzop*fIEl;N*JN%q4}EVVpt37lsT=0sB44{o7V{#jC=wz zpz4f^`BjrkpTU)h>j9gujpkuru7j3~rs9DYS@DsU*0ppv+_Fz9`!mkYbx86Xb&z`o zcDOAxN#NreNQLF9{gXt?e8F{YB2D9?2J(1sb$xmQxRQpR`kGOb$g$HC@&=yP0Kw{! z0{Bv}u(ooJzk9XuoLC-;j$CEK(_C2TbL=ldU{>`n>?STjifr|C;a|0Imk#V}UPD`R z^f(-yF2X!5In2=sqT1<+NwPSLdo@tEdC5s1S_7NVXDmkG%VMY&6=OJgc`Tayeq#bW zaO>RPq$QVL)%o@p#!L8S@CTncKKz>J=nokj?~wQZ-8JLCzUq(0w)$T*&fr|l$T^1A z>{pp&%2>Ch`my$nj>ucJZg>BOji>+k-PQz~eXj+XXq}8Rk4&I?vaE1ztguvOK{)7IKCwxqTF-VWzM~^^z)=K=p9}HjYD*dCB9lXHx?X zT3mH5LfK5=Nd#bhzKb+@fkfdgD>J(1jmG5ga3yt;81rgs)fv}yUMH2W_`=9QfsQSQ zv^LV$gdqa-`W2Qn0_TQpjugctjbGg}3IL`+S-%r*50<>b=7lbq>|zJnb1Xkvs+`s%H@C+`9xsgP8LGe;UmftHi{@ex{G zBOT?$!EaqZ40F#l*J}NQ2@EyKNy6scx_%|1gPfq(ujAJm=+k`N3)ufQ#5O9? z8jXrRa!0tF?gQ#wq@EMj99)YE?l7<&iY?*d!YIP!q(08drY<8=n!UN(2vFkU_ke@2 z0yHlMQVYQ}fqPb)0yvZ12zPvY4&Y$`C`~1z|FTeON#;-o@ zk>hy%e`>ukbX@YO7mc$o-V^PF*FtlT>xLfMMqOmgzp-F#;y>=@H*x3AKk(r3v;Xqi zpXbfLn5nqtHop&LnG@TxmxbASo%lMJxEW%K9+hr}vTyyyDdx(_$zkjDv#44>`livC z^{GZ-I$as#zm`2mr15~kWUXPFG|Z<4%rDQ!R)$Vp=S1?H8%*-j%P8li?+S7YvLCxA zBRMESk2~1aJiRt)kbke_Bof{#K~5$*H92L0Ak$pz_Tq5MxkurF8>i&>sz9_50q$ z?sEJM$MGlVElXYXwF&JR&L^*g`2{PGZ}&QHg~KKT#O=uK4GILUqU zQ%)4q82|PKuN@!yoPL?G+Lf1GGA=ytyzw=?mB0=74!zCc=+!@zt~yf+3c-0+S#!aR zgK2qfjMo4hb+q5Z!u9$wgfJ)0VI~4hahul`!Ijx-7~VBEXf)u--dK2{K5+elPZlRf zz|zpA(Q>_o*Zat`su+@jtYJ=whAQ@J{OWG<^*+JtpXvuydkyQPTJ`lxy!iZ={A>+s zsRgr6%Qj3dmr5F#1EuD`nOYdH!y2FZG3PiAx_-G{We-))*8PXlfLKvYCvG z#Y;Rm*|*dJmZcVQqsfs*JLcf`xkdBDo0}X?1G7jpm~{?utMd$SJ43MoUd;l?rN5=6|4YFu&;ZkR@5wtBZhGvE#tHsrP;Y1Y_`AnD-}EZI zNkVV^Y_WoG=YDk5{I=Qzyg4-gN+*1%&ZCd|DdKUr8jqFrum0!{$KQSEJiTio*gaQX zHZHpGg7M|A@>@Ba zO7`eWSXiT^GKiw*R?HCqFPfPg!8#?5ITlaM#>Z5(kQ>cYpKz85Nwqbe6oQlv28sn& zcD&B*F+I3}aR_18dF%QC@Ki`>-r|N)CfGXv!YfYm;}?iVEz---qvVGXl$m2X5J~PL z@bfuGY~dEb*{>UY0}~;+cGK{#hc2ZLkN-io>7o+Cx6`FWaYCSixTpZ zCHT}25WGBO-{2*(xE%$zVLAlZ6J6qR9H#gwZ0yjF@ov=jQi3X1ep=2LqZ;p( zABSpgxw##4{OxRh#T))?oO7Pu2Vd>V%f2-(IRC=&jZ6BEb>%07yt|^Z3aOs7W}Mm~ zo$&$dS9ZLv*Ltimbny)U06+jqL_t&l*3auA@7znxU3-K1g6n(1y3WYNeW4c#Sp3))-kK%x z0aUh}Fwr)7Wi5`_Jru9(`K%b9$f&tR;5B-`=s#UJ#znio>woH=q{8XP^Iz3z?-f^X zlrY?=)UpE zv;TU$;7{K+{`-4AKYr#1Z=p%a5vTjdHb< zU5%QR#IC1IGU{k5E(yaXM^YuoG3wd|-q;*XqXQ$F^OR0N3; zq?%XOnH;s=_>HM}oiY<@fg?|Zc_PvK8UAh{l8r!Wtg|jbQ|b_ZFu^SrGV!?rg^M`s zZp^R2c=2yOWgLFU<>M|l zzI^=F&;6QzH;`A&{fD!Ry=Gi-=_hnQx~=YcrCe_f{fvCy*^{?B`K|66@7t5NOYN?= zNgZ{wGsiPu`-1V>$3A=f#NBQ^{{8d+Xnfy^hmQ+Cb@up;-+kqH{(pb#__d#TfPV+^ zyXTDYp5rf{_e;;pQ&7$K^89y#HWmCp6vk5m7ZXeG)qM|zI{M)eJuMrIV{$pAu^T1_&IpbBQGYyn_WuJ z*-KtsI99-l%{QP7G+Q}qnuQ8(eV@D5>m*34XD33Pfr49R|Sp*$vGcEa*v4biLJVNJmi zN6)Ek2P>O%_^^!OkfUMQBiIaC4%U&Oxgpc%*85(^b-4F9P#L-w*SdZtR1R{1uP#|J z(H34tu^L`=c8s*yQ$aIkYVJrl)EA&Jd+XP5zFTiipU7+Wj&}-s|L^wOIeGrJeVlUh z+m0Vq?^mAqgt7aQ|1^%j>a*i%zw$e>sC`q<>GCvB3HFU|ir}+1y=vZC_SQF(SM;k| z7NNJ{>t9^x=BT}q;FC_j_juiZ{@L-EU;Be`&)5I&@jJi&v~j{w`o{A;uNyCX`P;`E z-to!t@E^JTxJJJ+^c6+!Uq2UR&T7jxtm}_lxaxWgYR*>muv16QqhuP>gGF=V$d}|L0yGp!pI9HkiBq)}l%&mbAK zFiu9!0Nm(Nk&eo|>u&=Vf_#1bhG!OC$(Q?H82bn_tgtV?LkN)(%&uERScsiHbA-28 zY^yOtTV}@-47zMah=2m98uJDt`}~GeoVY0>&5K2!Fk5V`9%V`f8+t%xY350kXUU?( z<2jRumJ>(C@maWHiND+lXr35@4-5X@JMos?3#K?Z$qTnV0TE@3HPxgWvwg?W;}Ji9 z*0|3Jr;kJYDo;E+4m)bx_pAqv!%jVs=lmkn|LKxz$C1a4$35qbS58VnG=8S4w#LVzV`;8a z%w6XKrBa10uFe|*F#22Eau*Zac4*8e zT(q9Q`LM_A?P1Lt%VslFv(=z^0LWyV4;t&t|I1mPY$X^a8`q`ttZGpcHg#!eN@wLT z4ZVI+AI@n0HdmvEkOC0bw}` z%;yHK>et+cmdyoT*2OeBr0#28j0>)*oVPE4Y@C$U^+K@_rNw((!(E3RH=g>F4E^k&Ay~L;wjDZd_Y+SaPdn^n{SKd*{lw?U6Tff#!fW0>j(qv6#>d|A`tkN}>>N-3 zlh=$}T=V7e=1=V%M;w;>*4TE)IQfoG9*=tVEykhskDGTLb?kW7!+va>ravOXeKeW2 zjiZh|Z9Mo9PZ~EplHV|-?HKod^fShLb&q`g8{alQ_>R|&w_UM)+~Vf97{BqtmyL%# z@GeGeKjhHyegFFL#R#P1#)%{$^GLVSI+^he+*DoPUoimPRxb#@_+8yJ( zt`f4bejU=ht$Es;xAvTutoD0rHeqouItZ*__J&8SqdLun9|KOEarp@jcnxfkk7#^T zllpFJo@rAYl=4wq-qJ=a!MPhXi>=CoKm1MMjKJ*cyv4H?QvT4BpfF986s;gu&n>v7 zGOPy{T0ALMG>W_1wQ6Rj8=4i-VLfe``~to1Px-%$1@L?;Lt&SyFgN)orU14{t96Fw z;P<(#r{f(8mbmPTuw`$AWmAWz)mwNjlM~-Ko^~iDDZS}8m zDhc#Ay~Dl6@4oFX$Dh3Fuf{w7>QBa{+fN!V{foaDyT16o@!qR%Hg@Iaqo;+3kGuWK zlgG{UhXVVadF1gYkH zSKljM>tX^9h0m!5RcDWMAiVnDpbP}m`r%xj56HLD z?5S*!76;t!60DBKf$5m<0^=nW*Ppe>1a|^Edh*1~Q5=Qw$vVlWSh&RDhEoq?Y%6=b zKE^_&^b^9B-9l1;C5QyBi-1dUxR^CQS*d{6z^L`1 z@CgQ4vs+71G^Hh+NA_-0kQHkj99}O| z)A`)+<~BPE)(%h%;R)k7?3i1P=e+o3x^dTgePyQ|dD7|Q*IxE!h3YShViS*V^70*b z%R7x{Kkr53ip%s@p!7C?qw2zc=wtTj1|hWIhaPwGc$(hwsXu{Ge^qMRxXoQ2GXDO} zKcTlz!6^N{18pBa^7vnEl+H(ygz9vXFL*?&D%aA>PfI-+&Y}wvXqQXj0u~87ZYDO?Dm(SBK zE+txj!;lyq9p8Ldt2r-yY5`0bV;f-ChRtq)b2F-Z9VBPgZ{ay`{bte)UNWW{DJS!o z>r)|q;xX%iW+`6jU3FIzs5H&t3MX4UaZp>n7@)y_-IZ&!VLiW=-iymv4M}z>g!RjP zDZb4kSxOHuoQ`#r4M}T{L&1ly0*avP-19%M&JHKo`=UoVhs1L>!IBSAu5+1YU5vAu zg=&paV1_kE227?flUEecOedJ*PP*%O>EGxNp6fmoIIEzV>^gD$>*xHT_cXtAX4Sgs zQLR(&eBbfhKlq{XUA+pa^$k%#Mjn`)2JOXd8}RWHi68|fd)|MqyC@ctb^5u9*` zdyg0X^;`VcnOhn{ZgsE6j5odR(Z1)w<9cp8eEh(J9yjjwV~-k_U#@$eG#swKG}=$J z$g%T=HyLL=_s^tB|2&4Yik-ajU-xygfUkZ1Qbsg&qdH`9CD!X#$-RCJ2F1Q!t>4tw z7~i14U`TzLgr6KWSm*3HLE1*QCv1G8VKGQf*2?r)g!S_Q6J%e8ilcD)0Po*`?!5yq zHuAVtBKo#PK>LYL3+FP96`T$m1C+8foQgZHrAk3(dKeXPx}BUAv8+2Qm~T zXSkg&QTC|T{p6b$w!>Ql*@%XDT~}lW*12M+>Ot0zEpk=?6tm! zkuEv#95TNDM;|%<;71-ZzI*vqW0&qjhw&F@u6fA#DWUTFfY*#ej=076<>$Y&);of4 zeV<2+Kfm`Q^v7w)B}NN7eBA3_{Ni}?!xW3%HBtPb$BqX*?&rn>9`%%Q#T8eLZ98|4 zBahJkG(-YTz@tvqb5Z>d*KOPS@6gA)a2Hyqu0<1E`}zqxlO$E|MVEEU`oZ_T?sH+$ z@c>>tsKu9cpO~pxor-JC#uGvuZ5q;HKhtAN^nH%?ivdT6csE3W3dDM3E9%^wHb`TI zla2--`TM?PV=P5(Zzqa-eH6dHA#@_Ja~A4#a%}Y5Z_eqAxk(X^Yla96p2AL~2`W?k zc@ z%?-`6ej7_++Y;z?dnm>f-tOASZO~D=dmCjn4<(=L95!Iiv^))yLyzThx*w zD*9Z4<2XnyfVT#nolD0mwDs8vU!c(ouMEX&Uk_!odCnUkaA~YuvDl0?>#5-^&x*UT z%letDlZ1EPo0O+CapL|&>v`Zbk4U%aCxA!Ypx(t$lj(b8O+c8w8)dq1N~*PDB;HPj}X@q~IGxN;hZEOoOdGjW}(u2l~R zoL6IO&gRAJ)^$r>Oybk$^|?;S9Bex4ZwBp?d9AtEgPf@aikz%8CJO1+rD0og#-Mk( z5KqbihF5F6zR%&W=6p3l;!>to!`{HCPtLvuKrv8LcU!%R%1RNOIh9kVLe?D04p}>( z5wG`r<1M1F@;GCqb#2zMWw(hwt^9MSarYN8Y&h1M362)`6g2mdHBT1*u%buN&M1j( z=b%TO+GR}J@+4Oyg)vL>K;cR1jI}20y7uHDpjke_o=L{>EJyg%W(YCPgfY3}tvVY? zKM@rkNgl|Ks~ym&&v2T>Yq$3ccFnAE^%Mk8Owt4oLz5M+aUv_mb&}Y~MKV47B9*L- z?Oek#+ zd5%7&esTy{c0x08z2M*X<;l0n?GWHq3#JT*=UyTbTF1!)&`{?}oDA;Rm1~=B+e-66 z?{kxvDklJVbckcUexWbTMQ<<;1;LeGG(cAxmTRG5a`35mhZQdPUK>Tp?jNH`N6|Zn zfAlH?Vc8$;B{p#mFaTfq8&-Q6vYxM9!uxj!b8{rY>f%W@h0xK1NIjc1fx1lqDSm|b zA29=0-zTF07l*A~e2F)S4+>FCbyE_>P!Yn*9_Ac#?@pE+N!!56Z?WZ7-^J@8S`630 zw#==B>r_B!=gpuL9KdUk>9~+u^AZ;>#-wa!pTV!K2XM<@0oIS7<~Zt3>sprC?(!6U zGTR||jZDpfxd(6kFnXv%V`Ot%#rFDGik#*kj+~~|L1Va3>Mt7J3-|$I2b|XRVr07m z%kR992J2Tr;MPYqj;)H8k87%;`0{(NVYW3-F6)u zA_m4KI z!uX_@r@hbMaFMerrCR)Qm>*$ENPRJp+pfH_YY=k5$kEfW33JWKb!DsuE&hDbV5G+k z(9o@BazLG(+=ylUG=xTn|J(Jmu9fCx-JO68os5K@o;w*;cZHFlW&N0D&s7+@5v)Ej zn39Kyn5E%336ZvWEdcN`2XjHLZr-i6D6ZDb9%D+hYr9VDCmj=VS{*Vuf*gy(I3T?t%Z3MEYYv6cwwl1) zK~U@U`VqO&94c&4Y~1H;R7TGFB)3^bfypY(A3GFtKd4V8Y(5&FZZvP|m`}jaZla3g zq!wLGqRe0F@hoeln=2 zu6u}$_7rfzDH6}J{7Wt5G{8G2eVZn5)`A%tu&M>(Y}dMR&b>q(4Z4Q2x)NjzG-|!% zHOgs?xK_=Oo1tn0YjWGXky``T-$vv5Fz0z zNNWx)X-(fGGtL1zbe)sUKc$8y304wJx}@?vzn*$%mlwZwh3{ zr!ykSg6UKM+I)H71E#^SaL%4>fSKj^atG)E9Yl56i`bm+p-C~2OeV%w}ma-hT?ML>vE)VO&| zSriCFU1)u#zg#EuiF8Iht`8x71CKYkICh??S>VZ_e0+fONxih<#YIy9`y+cK_+GyR z1|N=STlQR&h)3P|h1X`X2Y=o7IjhKAy7rT{Ytc%;#+i9078_%?=Fq_Nz&Q1&<4<_? zQ9*=QZH=2dGZ0U4^t$!g=B_hm=UHh^I>p;z9=PD;m~_HBut!Ti<6<^?t7Zs12hR1u zqzPdRZH2oQ=*8~F34OiiG%l0XP0dQ+nDQrH$4u57Xt3S3%#Ci=zXFp^wnY^A(iY8C zM4M-wt&>QT>PR+cH14|Yb5S7}X-jkSw&pPF*tLi#Lj33>=0$TraAE6flo(oYVes$H zU^BluGUI7I?km6?y?(;72JqldU1S5tJUj_B8ZPEm2Q>~o@;Q}Y2#R^r&s;X{b5lG1pk+!PI#@B6Yf;*!IIy=5 z&+K@T}Q{Pm>PFS?|yf(WtN8gt@dTjvp`*KM9bDVPtRw_Ydag-e~{XJsBQT61{KoeVxsUW&6tGdwhT z^uX_7pKQf6IRG+lof>=ni1lX_7ma+i+g7}Eqq)*44ry-m-O9m*=+WS&>y@5+wO|cz+(%~WORkXpsw z=947Z=8&5X)5u&}Sq(*1QAX&lV0B9pqAxTs~f8%X)gT{(lz5#W?6yd{*&Q*vKc zgBITQP2S3B8GO-$w|F@5=rJs; zGrWvD5Uj?epw(%PuUm5kw5VcmolRJ5@@HjhRxMudT{EKAjS9Kxggql_Mh&AlYbY-< z8f5(vmg04;FqotGjdH@mulAfRp;WG9#%2}{XwZoKlY%)G*0vhX>!jix0j2!S44!`1 z9UnGZ4NApq!>5ONr{+QnYhQ*_TX-QlxaNX8HbN@5BalHtZ1d!)V!Bq%vu=n&muhB? z8n-%z3w>LQ_h5CljCmmT0L|o)FkHPR-L>AW>xWiibS5ToIZw@P$7^g(=H;Na)FO4B z2(MH4&^v1}*RSHyYyl+bmVR?bp?qkj^_i}Px4ek7sT@?q@sRmJkh+4dW)7>HGx#7- z;dtW}p>XLmn_<(!HHvG?`T^ombp~N+ZMV~IJYgd*KsBc7zPWYCr#$WG>S$cPxqcq& zK*O!Bx!R!7b!#@I(FfCPS`m;Tyj5!)7`;x^BP}%q+m^zWKmY2eYit5}(756?Hu1~) z6(b?$?wS~UzyYsoVSLsQW47;V8^$OGx?|8 zN`jVctr-p;)-0k8&BXH%7Z_S=o;k6_Q`nM&U9p4*kXi*>4ghXC%YpA;njzV$nXqUk z$BG+D9!Uhuv9{UHq1+-cZ0e9*Zu6?M!AnrZ6O*`{7tLkIYiv%08ZTpO#^74wj3j!q z;jEL zs7{kAMse$#;%DTlLj{S3*ZoY^ubODud^C3!BqLwMicAxRa0b@rPUgDo0QnY0@ODeB z$cv8Rfy@Pw)%`{n0Nx39ZysRAi^1H*n;TC&a8J$fxLHBUP_?jTyHkq-3Zt>@%Aj+x zDy0T`c%}g;L}U2676uy;eC3~-6=x-;lC?LDd0T;;w5fB|S2wAnxwWm=4=ruCKDaR? zkWP)suUz&mnqj74?zy&RY{7d1u2sSD$VaSD@t&055*-n$l|jl zL-1}EL$9NzBV&*GJBxunuAoPOS{C8W|=*#&8Ec$a%~LkTL)>9)i6gK0+7 z0ecRk;x{x)7xEzFRFx12pfqE!9}HvcGR~xl3rT?CpucEN4mfDyiQ9dfY^dR?pE!7^ zU)sF>fJ;l;;k9O9Ghxr6G~3sjiHK&*RsCd=*}N3MT;yM{;4_Kxmu3(L(@dsr<^>01 z#l;4OULiDePVW)=8Z9)YBb;@11WxsrN;Ojl2?dat)>GUbR@yolXf9}tE06LxuN4$` z&jVcbqb2!zo`h`P=T_@y{jQ2Nnx5H^ws|d~)VmlxH_+(XvgaI(E1E$~a_KZ36xQrf zSB4@bH@uFER&vm=I@F_B0NU#S@Vvm8XrDEY^_~k_5&G;kAs$T4qzJJVdDD@yqVOil zD34|>@Ob@fHje3cE9aC71y2A}GPW&IomU;Q6K zNirt^so6GlWAIVl!mtZ7B0-J&UA#c`C6;b zxKO2m=CppIiwy`Yo=x$34(oz;USktOd5E(Dc$blk{V#3-= z%n}J+Kd{0Tflm%tX-;Tx09$j2$?RTq=txJl@akAPu~Y?S?*Pq{Nu3bd!oXRidEt%A zyv{+dY^8b57R_7M4`lEa)xl(F&9ZH1?sf74t>#TFiI=}2>=zIdI{6a^4nR;w2HZu_ z*&)pvxQ?kVf5^tQh{0UlErgLZ6l zdTI*F`jJ!wW$*m);wxS=XqKH82`kN0Z!!aDZ$?o~yiz0w<_d6IQ)m6W0}nVws`pG?y^pUSJSTD1+JHQN!8X zss}?-`XJt9^NcEwd^95W9c7QhicM3j%L6c06y)fEMH zn{y`4tu~<$#xN;@?5_Z98-Jd$xh9F2=ri$7qET~A9|@Hu(8MU$ItGNBFkYVsk*RRd zZ{eLOv3tO|>ZKlSQC0J_HF)P|N)FSZi)M@t;tl3N-iDB`vt&CkA}b?(@ZU+9t4(-h zGcODnuZtUR@Mi6rIgGe&7^~{o#1oPj!W(D>;x1ltc3kfb z(_mibhOMMpr#Xz2ryUqQ)oJRysTX)fZ{am&iXb$+Va;gcI&pkqw$%CH+?JIzle>65 zmW%o7Fr~52D&pXp$xmCWT&*!?YvUa5UXeK${UT@d0@lM+eNK#n@*Y3cCJmbiXm4rJMl#I-JYRHS95lfa!&=NL@l{OaK>?keX0X8n*% zDmb=sd;Q35K-GDb*Ij&&(9+L{IB3J`vull+kHt>^`s_JRQwRQ~#L_xiZ`g`&G}nAx^CGtPj*F&D)q?pssb`iA$b?D3^5zSGgF{9F2|Own3o> z7{369znti}_I&|?!4scrOE&0dEl2<^_^n@0uFsx>kPkjBRHqEw$wB#oA&>g2by!ea zH9JCXX1Qw0!~bUNTyxJ=j%9r+9$nqmecLc}-u#-8dC}*j6+peNtzzc6#8Eql&G zEJ-hJ)+{KU)#+;_w&2mT^hz@T#qZ~9oYtpV!2SQN1-opm!}+Qf5vpVsB$SKeWyq4t+iN{phx%WV0>x z!Dod)oVN%FP&ax&3FjLaxWu@4EV5h9t=(r|4|P4&oGM90bZi*rzn$QwlCU@;jJ_2u zXOSk6Ofx~;I-0{gUaSB-VFh*SE;2mcbav?An|`C@Q`ZcONn=G27-~|w^$otEsZmCK zlgW)!wgMrso4ZBpTFkqQ>LPpi3Oxty%VITXtp%BIXRbA{cw*(rXDk-sLu$-y$yNDW z!8LwGPR+US`7`Intu(`txuBa8T+(3_l#g%vuy<^Cmnauag3>+0xt+O4nMURVVZSr&YNU zm{>U6L!|@IU@aoUgSIuKscaTzt$D@dAb5!NH`cnN=PXwdGDZ$<-kj$Q$e;%t1~H~l zf$)ahO5)Pda7N8LJ&H3$^Q=IHA$A?uwXh8tl^0mExUa!_{lI5Uix}3B+Yn#R!%645 zbVS#=b0;Ib!spY_wPvpsDlt~RwdN$(k(5k8m|j1|{=bm2RcLq&BVe^t3XnO8!CXRc zt_E)peJ|yAME%57d34X~m~;{pe3AJ{RL^>nZfN%03T^~4JvrhuP!cr8>|^#|(KQ+^ z!9;;as&kdv=w7tm_YwzR8_c+!;|qr1-L zBBv%cwdIPk&)(G%&?Dhr9*o?d%+Z z)>@fN7S5~no1sNuAH1MA#Lf)Y&7;;UOz#cf=g3g-oNFL_uS)~WyQ1zISpSN5t(iTI zKmS`Ws<6T7d`YT#XC5Ht{sd+N3~7XR&57Y(^8|m**vJ2EZJf_bTopDtWbV1mS`Z1m z2qG&3&)fQ_vTTJ}Uw@>-j6S=&I2u_qVHMYBBhe!4#`^WffK+W#d9Yf)Wb$!?Q#htV z;sf>^Xml80koz{3zW4(mK69!#LixT&Aj2!hX!`2({n9lKjm+wptLj1Ob?ewJR{31} zIk_cSub=;WL&Z9zAep2rl|OV0nnQhtSzMh}^cHN$BuXe=H`$5tCU%5L;;S#d4RwT* zs8~ss{NjMVHxT_f#}%DPy@&yj(}j!!AqW?@Gu0Q}2F1gwwY zZOxTTsbuGq;_ESa%_^G^-W!_hcD@OdHoh^W)oEPzwF}2P-}T<{nG3#V`?oLn=y?6B zUp3zU*^9?s;)`o?i-h|f_c=fO#AyHc>X*MfF59CgV11v%-~ElV3uFPlPSE1aInt%P zJaTA11~tLrlQQ*t{p^53M(<|<88*-QI$^em*o#ZGFZ~}bx%ZtnbV@=AqKClq93T`v?@%4+LAO=;R6AwSX z6Q;st!B`1y1GG_e>DjxdGta9S0JV9Yl^FRmlF6-B3{PQ|Vgn8O;%`Lp?8i$?& zct0muWI#}wDIt&6Om9-wJ+<#qo|EUvege0DeC_j}9`88&{o}%~e8+2g(Z}97Ui0eL zk57I1QY$epIbdZC_#n0(+}FnbtH#9_e`Q=P-;Ry@+d-b|xmKAQI@4gyblp+kH7c*` z=mRyD&vU@ZfK%2FtqjeJT=l$XfL1cY8PgbWsDS1*2R2-AtK&KYS6hb_?P7NikSitv zG%H?@v^wLTwiS!I`#O}i(4fDG z$^wT?^_EczL{fy6)QpYSA#n!zVxFi9l!wT*GXKa~nP;doYOMb@n+as&w0~1%JR9PkjA&_jw;2w{ce0wls@v?BBCzT&0KZ4&(Cgd~1CE z{PV}TpZw7Hk57B{`0?L+&3NWR?l3<5&U41@Lk}6-_GRv#m~J4~?AbexIq44L$M1jl zaVY=rR6@~bR6{Y#wzU?rv@ufMB7N$EgB>xI0C9| z<+XNeE{p)1>!-kuU#(9ui{I5Udvha=X1R1Uj&G$IOr>OwJ)dp<2_fUmlL7>mW6jK@ z)NeaA(5E?EBpKC~w{FH4>nbT2J+Q!;e$_Tc*}`p52o5|7TRT&oW=z*K_`QhXO1(nU zb&iV4W!HL^u#h3gd?Bld7?n17La*0-jyTVn4HDFh zcVz6_vv1tujC+pz-|KdniS&xn&6?Ho`r&PZ`dOm_mhXG7pUD*4J4JQ#hE9r%z%bU?FF^WUg*fL)7TKWnzmT0ir` zh(=;`j$ECiD3JK((L{^iG3JF!q4L{n{a6&~82X-;_Y-zFleBt{m4^^LC@l{#oWfgU z0WSK?2gc_vy}`KeJ#VWN%iBB0*gejD#|y^&p8WFh_J8`uIQ6DuocFFj8;^h1`^Wn~ zcRvV?Dq?smq>(r#xk;_g~FsRNlwHRa77s#>^CidUmcuWR7~ zG`;|R&*mWkjVL6cIp6e?pMkz{cS$wkas^1+a%RZ<4bcGEgjqg#T0q%zO2+#O)g;mh z=%-<3;mn|Z+&PA$16DRUW}J&)62)Szw=%B6JXv{`ri?8_xQ6yjvyo(n&TV$u;7m&# zW=7zcyy=yX9rwN0?Z@A|=hNOiyn46ayJd_+b{;bB__P0MoOX*F%es5)*m?N4 z(?cIUZhh*FK$(+GYi?OCx#*nn@Y9YQH#+h7apoOQ8F#<;eaG*=;RE9dzxn)e*W>n% z_r2%u$K!wcspGG8)A;B|KRC`g=bUlQ2R}SM@sSUX=RNf)<5%AJnaPF1Xr{`kMb~3% zEd*Wa%fO9Vz_QfB`%)IqUI%!6v_buRI+_~Nu6_L=Shx%9lzt))8N9`PZJLwC(K;{+ zZ~ASIIip1Q3A*u>rt)+|ZJ`?W?G4G9HCHk^i%mE%8tX1FuM>BKFt<*fBSDtf3?y3j ziOKpc_FlhAnuy|pnr@}ifKi;SxqZ>myvmBh6YdB?6PxwZc(&$M5Va_r-7-ZpGihFV zjB5fsn~n5*p{%>3=dg)VZQ*dFqOH|YRcjT!^uvs&q2%%yo7&VX$D$($?{B(#Bv;uv zEnsMt=J^LOxdF?RFG$TLMr>P&s(!As05G}P9v-jXDnB&_*VoCieoJyTNK$5%UAe{KBcZ~e}=$@Z_0 zzkl;zjI)0Br^nkr_=)k659vwPIqx4I{Lsh7CqHoZc*;|sJpT5auM{Dt)GLOi7VDZH zP>VVLr526ftcCmz&O&f>uj0La3Rw6XA&)Qzt267DIFS|ilw;^C zRr5+9Fz3^$8stgjI%@=mHhG;}?9L-B>k-I2hIbCD14^FjSU;FRwdRG_R`a+P#n`84 ztgH?S-ut0JFbC+9pJLWH6Oi8<24e$FR;pwMGWohAONB&z?b}{IV5^{XuVv4PXV$rc zEM+063ORY^cd+Y(sR+4*StHyV_c^nK(cQ{f(}`&w*_jZ)yCRm!_hwub-|II++pe(v zSAA!^;kl2{3s0wyzdHM$1mWEZvilkk;E)@R@uPZIk$~g0kGsgWN{IK!SOO71R`|THw?U!CS{^I2?8c+S1r;hi3 z?33doA9%l>=Y3#&@WY=RAAZ;0jGunWPmPb9_Z{=jZ+Pa^dNwYdXFy%j1oB{Aiv(`2 zpZtaENS~{Iy+1d2t5yfE^Op5%4Mo1bHrD-_v+)P4pAajZtTc@ovF4sr>naD^JO0eO z2=J;an<(&P{^boVRzP~_2+r`z+5tc+XX-?)2>|Q>0BQzq)H&b!%Ypc~8%j1kN`1dC z*GSm42_q)N#6~9e#O28oc0A(O3?g0V0_Uf2*+Aeu$%IFUkN7J<=k85_44!cLrXRaN ztrJ=4cY*MO0HjA&&%-{HGUv3rq=!pdirg%H&^b4c<}Gevr+U>ja9K*Q0H8o$zfT(2 zqXh0*bNbO3sTHhs5a5s##=m&_UylnvbLa6de&~$x`geYEJn}xbA3OA_Ic=w&D1A$> zVsGCkn#1)E*)|6Rsh4orI4dfyxsWa7r$ye^F}ut`@eqP_@$qE{`jvid&#)h z&2+<2`}o-}*YT0#_kQn1jo<#vF?zc}EIIaEHOeH_Ni8~hU1wqp z1LgT=>^?pRaj06A4SzOJ@EX-Rr0UJ-Gj$e4xQGMHNe4dLp?<^!5GL8w)|#6eEFrZm zjN?%Ba}35n>2S^t#B8$K@eW+F+Nw8t_bcf0{pGDw!9B0#6)*CWC9eSaIx8hiGrkgz z-Q9{P-l^Aqiwcl2O+>xB{RP5%J#*oHaM0@nP2Z!=@srQ8mb2GS87-`8MjndFXF}X( zK8cRP3Xx5kiD_)1ib8JT!eJ(2{$OjzsBd0DTEDz%sbTs_ z#Bq)l2kjiI$4q7pAT=X4j+Q!I_K1r9bl$fX|+Q`csS?tc06m zASvDz%pv0S&g?uU4an63M3X4*A@e9=+m3Pnv;NI^(U;E~zwoGgkKM0**Ldcm{-1Fu zKQU4}Y$rE6y}iAD?|J7=-H`tI>akyOw4Hr}@=Lkf#tFB)+xW}>@0H`IQ%)Nff8cH7 z|NZ-m#vi@(kH=|8g5Nj($ICxBe&Am{cf9DuzdrKx$~3xXUOH}byndp1^pQ4rPW0T# zq%yzCJSRFK#JB{J9MWQbX@w&;-g#vg8o92G_x8=K^~35=W0HU1?S-ru0# zfpXpi!R?{JOHT5*Rj2E0{=N{F1k6-$s*}_ns_(h#;5o=?x<2T9@atre-q#<2PU|d5 z!Z#7AP3Iv_O5pFg&prm`x72N|IX*$E<=WN&&CS)$KHDKiFrCo(Y)D|&3jK;>Um(yi z>bCw#*`1(^wfKlPiQ+g{vk8cto!`u!%JTW#wknbx1%&CSRkW1TIY(FeY?KFd%|zOah&(%yN^fT z=k)Q~cb+>QbD!JQbFE#v_vv1B_5S(1&$qbC_UW3)ld&Cj&&wYe+%-&A%CYP4 zBNm%`o^jczM{3d5t@EcKT^mhTFegaibx0+w06DS} zjJK{IJ~bW4xVh(K_MXF^^~=xUKvr`Qefdqa@IkooeUC$y{P8=~9t%(&O5uKqnkk~x z&aNAQo*fssUoaqN$K$0jIm8sPg!)?qJCZ3NgNYU%uszC0t9mtm5u*FPe+EFcdYsTe6uu z37A&%L`A^Zf>;z{!R9#&;3w^9Zm??<7LNG>8x|jR=v>4&x7O&Ur+xqUcYplpvG=EL zHy-`NXN|YL@0H_LH$H6aI%3B-|KhKXFMf0Hxafi}k3(;8)wtjb7mhDqJ;ntWd}&;{ z?aFcazC*?>PPxT6;*h+;e#qg+jt4&W2^M|Xmu@odFwP%`9>y!~X}s;1CrR7u8_u@# zQ{Wxaa<#uGFV=N^G823~;RWY)q85wE1)P@E++86N&subhgZtuI8D-z(-54!

hb2 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 " + logDir + "/server.log 2>&1 &" - print startPserver - os.system(startPserver) - # wait until pservers completely start - time.sleep(20) - startTrainer = program + args + " 2>&1 | tee " + \ - logDir + "/train.log" - print startTrainer - os.system(startTrainer) - - -if __name__ == '__main__': - parser = argparse.ArgumentParser( - prog="start_paddle.py", description='simple tool for k8s') - args, train_args_list = parser.parse_known_args() - train_args = refine_unknown_args(train_args_list) - train_args_dict = dict(zip(train_args[:-1:2], train_args[1::2])) - podlist = getPodList() - # need to wait until all pods are running - while not isPodAllRunning(podlist): - time.sleep(20) - podlist = getPodList() - idMap = getIdMap(podlist) - startPaddle(idMap, train_args_dict) diff --git a/doc/howto/usage/k8s/src/managed_policy.png b/doc/howto/usage/k8s/src/managed_policy.png deleted file mode 100644 index c7ecda555b81d7750e9292a9ab72d2f517f76a2a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 247321 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

*j9=5&^KeazLa(8G(AWOc& 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

f~#`&?YC< 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\xJ`@_XHst`L=vVQ^ZMhA4vOZMjd*|7Q44^NQ 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 aRF+60qV`#@@0$zYkJ>{mrE&%9=l=tnkqu@5 diff --git a/doc/howto/usage/k8s/src/route53_create_recordset.png b/doc/howto/usage/k8s/src/route53_create_recordset.png deleted file mode 100644 index 34e476c7beac30fcdde13fccc4cc8d08b4be3d35..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35749 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%0AAp~;o;gSm3%-qLSW%IcN8x>C>( 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�$^SdG{~-ClQ2Qh5|1WBPMEy6(zhwIlYJWuii{xKGw*R2^hwfhj{w3Rg zQ2RsoFOvV8I{(7}{8$X6@mmqy18K6Y93o z=fCWS=HFPW$vXa_NuGQQ6_}@{+^YEilZ*g%sOU zZy|XhP=&XJ!`vg_lz^>j-=%N?O77Qkit4wU6t-qJj62-DcEp@8@N|((dT-uicHjTN z>DTelV0JAayWQRa`9gbjlXazVU(UDVzWS2B6q>NB=L*B{gQ`$nX*@pm3yGgR&1XYk zt+fgnRR1MG#u~Jhm+67BO1{AmSLKEg7T4Dxo^}kQ^;&or7>l8{zSqa;L*R@?fJU)y zy>H^;1RsiY0qnrGVo-#M8=HP92$JjpD26~e|HqY(k*hc z+!^_Wv+m-+^g4o=ha^3(b3-8EF$>bi~nJESPqT>Ot!fOp&l zhRqA1@#$NjPt&I^iw#e$mCsgDz}G!pj6Sa4>=s>`TEI(@(-kLo#UWhLP?Q}*ymi}7=jDU@k^Ar* zP7kgKa318|?QTWOs-t8JZw%k{;mEIy8*|$)(#WHi$57)Fm*Q^efPU+2c*i~MOaFUT zoHlW44?DsEisy35v)_p0t{}wsg*J?jv%GSw?yrOsjFP#9m0Kny7M^VVi9#>ndp0gf zDWGkPJp!)vQg%x8);X@Xa69;I&hXf$w%k;G(R;tTRXJX^`McfI#eBr|$SWd;$dBNn zcAMV1a{aRO4`wQuCxSb zPRfGY_T{rmX}GYHr;>^$Rz*1f7SvuR%A!!g;$R!(^yDb=IDDAg*WkaP{5f+qG&LrhD+=d&v;=VM`E5q*>_KlxCS#JSH; zGHWEMS#OQ_DyV1^!>j}fByTu3T8Wcy3NszKVjcF*@)y#KiBk?j@7caq`!4t;rmPVB z4I)U^SIJ9&T&uhW$sGF@xEb+!^3x|U179I}%-!@C^{)-h@p9hgS%Ci@QcteV>oyGQ ziYeUqBmM`Z1M5t&+n3uS@~Pl2eU2|(gYX9g3Ctat%Ovfh+96ie3LH6I#pBzak87PR zeA%SIqfE5#ve*Bg#ecguw{#ag$^2_hKbZa6|G4%>?Tw7T^-L3Q z|E&6Ry|&!<_P>kUCFIgyZ7_QCZ_DF3%Gn!!Cn?uVmiln~fKhkuYGt{E{u^e3_byEi zHJa1;cVB0n#&+%3Q&Usr-xv2kn0|-j{N~d2bJgJfsNb(Se-oml_@A0Am+A_Qah232 zgH*03_0Q{?XQ`xeReu2tePL;2F`sGYaU(cJfyLCicR9p1wc=JWs9=#+CK5qyhpXB5~^>#`1auj&B?V@$*nSx-^vc)s;eTdN#Z4aqCale600K`}KbLh*2~7Y^(fD!z diff --git a/doc/howto/usage/k8s/src/route53_create_zone.png b/doc/howto/usage/k8s/src/route53_create_zone.png deleted file mode 100644 index 25b7ddb831c5cba97f4b2edddd27da3234d621af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 52035 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

qcb8$LP68-?ilz>!CfWMks_S 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 diff --git a/doc/howto/usage/k8s/src/worker_security_group.png b/doc/howto/usage/k8s/src/worker_security_group.png deleted file mode 100644 index 57eb0265a34ad4223b69600d2a3dd355482e0bf5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 89208 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 aXPTGak*)X6Zt{}>U-xtk@04lVMf@MKrFu00 From 77cf7d4f9e42d4c153aad648bbe5d7049ab2ff29 Mon Sep 17 00:00:00 2001 From: Yu Yang Date: Sat, 16 Dec 2017 18:49:50 +0800 Subject: [PATCH 129/193] Fix read_source.md (#6673) Optimizer is not a part of fluid. The `paddle::platform` was missing. --- doc/howto/read_source.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/howto/read_source.md b/doc/howto/read_source.md index 383acb0c82..e4211abb3b 100644 --- a/doc/howto/read_source.md +++ b/doc/howto/read_source.md @@ -6,10 +6,10 @@ Core: https://github.com/PaddlePaddle/Paddle/tree/develop/paddle/framework Operator: https://github.com/PaddlePaddle/Paddle/tree/develop/paddle/operators -Optimizer: https://github.com/PaddlePaddle/Paddle/tree/develop/paddle/optimizer - Memory: https://github.com/PaddlePaddle/Paddle/tree/develop/paddle/memory +Platform: https://github.com/PaddlePaddle/Paddle/tree/develop/paddle/platform + # Compile Time The following **defines** the NN. The definition goes into this [protocol buffer](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/framework/framework.proto). From 1eac27630047e59cb461846022bada5bf0f490c1 Mon Sep 17 00:00:00 2001 From: sweetsky0901 Date: Sun, 17 Dec 2017 22:09:29 +0800 Subject: [PATCH 130/193] add spp avg --- paddle/operators/spp_op.cc | 5 +++ paddle/operators/spp_op.h | 34 ++++++++++++++++----- python/paddle/v2/fluid/tests/test_spp_op.py | 23 +++++++++++--- 3 files changed, 51 insertions(+), 11 deletions(-) diff --git a/paddle/operators/spp_op.cc b/paddle/operators/spp_op.cc index c4bd4f5ab3..b1807b6261 100644 --- a/paddle/operators/spp_op.cc +++ b/paddle/operators/spp_op.cc @@ -30,6 +30,11 @@ class SppOpMaker : public framework::OpProtoAndCheckerMaker { "N * M." "M = C * H * W"); AddAttr("pyramid_height", "(int), multi level pooling"); + AddAttr( + "pooling_type", + "(string), pooling type, can be \"max\" for max-pooling " + "and \"avg\" for average-pooling.") + .InEnum({"max", "avg"}); AddComment(R"DOC( "With spatial pyramid pooling, the input image can be of any sizes. This not only allows arbitrary aspect diff --git a/paddle/operators/spp_op.h b/paddle/operators/spp_op.h index 16510cb826..f35b305d02 100644 --- a/paddle/operators/spp_op.h +++ b/paddle/operators/spp_op.h @@ -27,6 +27,8 @@ class SppKernel : public framework::OpKernel { const framework::Tensor* in_x = context.Input("X"); auto* out = context.Output("Out"); int pyramid_height = context.template Attr("pyramid_height"); + std::string pooling_type = + context.template Attr("pooling_type"); out->mutable_data(context.GetPlace()); auto out_stride = framework::stride(out->dims()); int input_h = in_x->dims()[2]; @@ -48,10 +50,17 @@ class SppKernel : public framework::OpKernel { framework::DDim output_shape(framework::make_ddim(output_shape_vec)); out_level.mutable_data(output_shape, context.GetPlace()); // pooling - math::Pool2dFunctor, T> pool_forward; - math::MaxPool max_process; - pool_forward(context.template device_context(), *in_x, - kernel_size, strides, paddings, max_process, &out_level); + if (pooling_type == "max") { + math::Pool2dFunctor, T> pool_forward; + math::MaxPool max_process; + pool_forward(context.template device_context(), *in_x, + kernel_size, strides, paddings, max_process, &out_level); + } else if (pooling_type == "avg") { + math::Pool2dFunctor, T> pool_forward; + math::AvgPool avg_process; + pool_forward(context.template device_context(), *in_x, + kernel_size, strides, paddings, avg_process, &out_level); + } // flatten pooling output shape int output_flatten_w = in_x->dims()[1] * bins * bins; std::vector output_flatten_shape_vec( @@ -79,6 +88,8 @@ class SppGradKernel : public framework::OpKernel { framework::Tensor* in_x_grad = context.Output(framework::GradVarName("X")); int pyramid_height = context.template Attr("pyramid_height"); + std::string pooling_type = + context.template Attr("pooling_type"); auto& device_ctx = context.template device_context(); math::SetConstant zero; in_x_grad->mutable_data(context.GetPlace()); @@ -130,10 +141,19 @@ class SppGradKernel : public framework::OpKernel { outgrad_level.ShareDataWith(outgrad_level); outgrad_level.Resize(out_shape); // pooling backward - math::MaxPool2dGradFunctor pool2d_backward; - pool2d_backward(context.template device_context(), *in_x, + if (pooling_type == "max") { + math::MaxPool2dGradFunctor pool2d_backward; + pool2d_backward(context.template device_context(), *in_x, + *&out_level, *&outgrad_level, kernel_size, strides, + paddings, in_x_grad); + } else if (pooling_type == "avg") { + math::Pool2dGradFunctor, T> + pool_backward; + math::AvgPoolGrad avg_process; + pool_backward(context.template device_context(), *in_x, *&out_level, *&outgrad_level, kernel_size, strides, - paddings, in_x_grad); + paddings, avg_process, in_x_grad); + } } } }; diff --git a/python/paddle/v2/fluid/tests/test_spp_op.py b/python/paddle/v2/fluid/tests/test_spp_op.py index b57f4a795d..007723f0e3 100644 --- a/python/paddle/v2/fluid/tests/test_spp_op.py +++ b/python/paddle/v2/fluid/tests/test_spp_op.py @@ -2,6 +2,7 @@ import unittest import numpy as np from op_test import OpTest from test_pool2d_op import max_pool2D_forward_naive +from test_pool2d_op import avg_pool2D_forward_naive class TestSppOp(OpTest): @@ -24,8 +25,8 @@ class TestSppOp(OpTest): bins.astype("double")).astype("int32") padding[1] = ( (kernel_size[1] * bins - wsize + 1) / 2).astype("int32") - out_level = max_pool2D_forward_naive(input, kernel_size, - kernel_size, padding) + out_level = self.pool2D_forward_naive(input, kernel_size, + kernel_size, padding) out_level_flatten.append( out_level.reshape(nsize, bins * bins * csize)) if i == 0: @@ -34,7 +35,10 @@ class TestSppOp(OpTest): output = np.concatenate((output, out_level_flatten[i]), 1) # output = np.concatenate(out_level_flatten.tolist(), 0); self.inputs = {'X': input.astype('float32'), } - self.attrs = {'pyramid_height': self.pyramid_height} + self.attrs = { + 'pyramid_height': self.pyramid_height, + 'pooling_type': self.pool_type + } self.outputs = {'Out': output.astype('float32')} @@ -42,11 +46,22 @@ class TestSppOp(OpTest): self.check_output() def test_check_grad(self): - self.check_grad(['X'], 'Out', max_relative_error=0.05) + if self.pool_type != "avg": + self.check_grad(['X'], 'Out', max_relative_error=0.05) def init_test_case(self): self.shape = [3, 2, 4, 4] self.pyramid_height = 3 + self.pool2D_forward_naive = max_pool2D_forward_naive + self.pool_type = "max" + + +class TestCase2(TestSppOp): + def init_test_case(self): + self.shape = [3, 2, 4, 4] + self.pyramid_height = 3 + self.pool2D_forward_naive = avg_pool2D_forward_naive + self.pool_type = "avg" if __name__ == '__main__': From a0459557dd6c1fa6a254e2af40c8186de216890a Mon Sep 17 00:00:00 2001 From: typhoonzero Date: Mon, 18 Dec 2017 10:20:11 +0800 Subject: [PATCH 131/193] add moved files --- doc/howto/usage/cluster/fabric_cn.md | 42 ++ doc/howto/usage/cluster/fabric_en.md | 43 ++ doc/howto/usage/cluster/k8s_aws_en.md | 689 ++++++++++++++++++ doc/howto/usage/cluster/k8s_cn.md | 205 ++++++ doc/howto/usage/cluster/k8s_distributed_cn.md | 315 ++++++++ doc/howto/usage/cluster/k8s_en.md | 201 +++++ doc/howto/usage/cluster/openmpi_cn.md | 41 ++ doc/howto/usage/cluster/openmpi_en.md | 41 ++ doc/howto/usage/cluster/src/Dockerfile | 7 + .../usage/cluster/src/add_security_group.png | Bin 0 -> 118948 bytes doc/howto/usage/cluster/src/create_efs.png | Bin 0 -> 241814 bytes doc/howto/usage/cluster/src/efs_mount.png | Bin 0 -> 230609 bytes .../usage/cluster/src/k8s-paddle-arch.png | Bin 0 -> 430953 bytes .../usage/cluster/src/k8s_data/Dockerfile | 7 + .../usage/cluster/src/k8s_data/README.md | 6 + .../usage/cluster/src/k8s_data/get_data.sh | 26 + .../usage/cluster/src/k8s_train/Dockerfile | 6 + .../usage/cluster/src/k8s_train/README.md | 5 + .../usage/cluster/src/k8s_train/start.sh | 19 + .../cluster/src/k8s_train/start_paddle.py | 170 +++++ .../usage/cluster/src/managed_policy.png | Bin 0 -> 247321 bytes .../usage/cluster/src/pserver_and_trainer.png | Bin 0 -> 71688 bytes .../cluster/src/route53_create_recordset.png | Bin 0 -> 35749 bytes .../usage/cluster/src/route53_create_zone.png | Bin 0 -> 52035 bytes .../cluster/src/worker_security_group.png | Bin 0 -> 89208 bytes 25 files changed, 1823 insertions(+) create mode 100644 doc/howto/usage/cluster/fabric_cn.md create mode 100644 doc/howto/usage/cluster/fabric_en.md create mode 100644 doc/howto/usage/cluster/k8s_aws_en.md create mode 100644 doc/howto/usage/cluster/k8s_cn.md create mode 100644 doc/howto/usage/cluster/k8s_distributed_cn.md create mode 100644 doc/howto/usage/cluster/k8s_en.md create mode 100644 doc/howto/usage/cluster/openmpi_cn.md create mode 100644 doc/howto/usage/cluster/openmpi_en.md create mode 100644 doc/howto/usage/cluster/src/Dockerfile create mode 100644 doc/howto/usage/cluster/src/add_security_group.png create mode 100644 doc/howto/usage/cluster/src/create_efs.png create mode 100644 doc/howto/usage/cluster/src/efs_mount.png create mode 100644 doc/howto/usage/cluster/src/k8s-paddle-arch.png create mode 100644 doc/howto/usage/cluster/src/k8s_data/Dockerfile create mode 100644 doc/howto/usage/cluster/src/k8s_data/README.md create mode 100755 doc/howto/usage/cluster/src/k8s_data/get_data.sh create mode 100644 doc/howto/usage/cluster/src/k8s_train/Dockerfile create mode 100644 doc/howto/usage/cluster/src/k8s_train/README.md create mode 100755 doc/howto/usage/cluster/src/k8s_train/start.sh create mode 100755 doc/howto/usage/cluster/src/k8s_train/start_paddle.py create mode 100644 doc/howto/usage/cluster/src/managed_policy.png create mode 100644 doc/howto/usage/cluster/src/pserver_and_trainer.png create mode 100644 doc/howto/usage/cluster/src/route53_create_recordset.png create mode 100644 doc/howto/usage/cluster/src/route53_create_zone.png create mode 100644 doc/howto/usage/cluster/src/worker_security_group.png diff --git a/doc/howto/usage/cluster/fabric_cn.md b/doc/howto/usage/cluster/fabric_cn.md new file mode 100644 index 0000000000..0385e401b3 --- /dev/null +++ b/doc/howto/usage/cluster/fabric_cn.md @@ -0,0 +1,42 @@ +# 使用fabric启动集群训练 + +## 准备一个Linux集群 +可以在`paddle/scripts/cluster_train_v2/fabric/docker_cluster`目录下,执行`kubectl -f ssh_servers.yaml`启动一个测试集群,并使用`kubectl get po -o wide`获得这些节点的IP地址。 + +## 启动集群作业 + +`paddle.py` 提供了自动化脚本来启动不同节点中的所有 PaddlePaddle 集群进程。默认情况下,所有命令行选项可以设置为 `paddle.py` 命令选项并且 `paddle.py` 将透明、自动地将这些选项应用到 PaddlePaddle 底层进程。 + +`paddle.py` 为方便作业启动提供了两个独特的命令选项。 + +- `job_dispatch_package` 设为本地 `workspace` 目录,它将被分发到 `conf.py` 中设置的所有节点。它有助于帮助频繁修改和访问工作区文件的用户减少负担,否则频繁的多节点工作空间部署可能会很麻烦。 +- `job_workspace` 设为已部署的工作空间目录,`paddle.py` 将跳过分发阶段直接启动所有节点的集群作业。它可以帮助减少分发延迟。 + +`cluster_train/run.sh` 提供了命令样例来运行 `doc/howto/usage/cluster/src/word2vec` 集群任务,只需用您定义的目录修改 `job_dispatch_package` 和 `job_workspace`,然后: +``` +sh run.sh +``` + +集群作业将会在几秒后启动。 + +## 终止集群作业 +`paddle.py`能获取`Ctrl + C` SIGINT 信号来自动终止它启动的所有进程。只需中断 `paddle.py` 任务来终止集群作业。如果程序崩溃你也可以手动终止。 + +## 检查集群训练结果 +详细信息请检查 $workspace/log 里的日志,每一个节点都有相同的日志结构。 + +`paddle_trainer.INFO` +提供几乎所有训练的内部输出日志,与本地训练相同。这里检验运行时间模型的收敛。 + +`paddle_pserver2.INFO` +提供 pserver 运行日志,有助于诊断分布式错误。 + +`server.log` +提供 parameter server 进程的 stderr 和 stdout。训练失败时可以检查错误日志。 + +`train.log` +提供训练过程的 stderr 和 stdout。训练失败时可以检查错误日志。 + +## 检查模型输出 +运行完成后,模型文件将被写入节点 0 的 `output` 目录中。 +工作空间中的 `nodefile` 表示当前集群作业的节点 ID。 diff --git a/doc/howto/usage/cluster/fabric_en.md b/doc/howto/usage/cluster/fabric_en.md new file mode 100644 index 0000000000..bf270d89ab --- /dev/null +++ b/doc/howto/usage/cluster/fabric_en.md @@ -0,0 +1,43 @@ +# Cluster Training Using Fabric + +## Prepare a Linux cluster + +Run `kubectl -f ssh_servers.yaml` under the directory: `paddle/scripts/cluster_train_v2/fabric/docker_cluster` will launch a demo cluster. Run `kubectl get po -o wide` to get IP addresses of these nodes. + +## Launching Cluster Job +`paddle.py` provides automatical scripts to start all PaddlePaddle cluster processes in different nodes. By default, all command line options can be set as `paddle.py` command options and `paddle.py` will transparently and automatically set these options to PaddlePaddle lower level processes. + +`paddle.py`provides two distinguished command option for easy job launching. + +- `job_dispatch_package` set it with local `workspace` directory, it will be dispatched to all nodes which is set in `conf.py`. It could be helpful for frequently manipulating workspace files. otherwise, frequent multi-nodes workspace deployment is very annoying. +- `job_workspace` set it with already deployed workspace directory, `paddle.py` will skip dispatch stage to directly launch cluster job with all nodes. It could help to reduce heavy +dispatch latency. + +`cluster_train/run.sh` provides command line sample to run `demo/recommendation` cluster job, just modify `job_dispatch_package` and `job_workspace` with your defined directory, then: +``` +sh run.sh +``` + +The cluster Job will start in several seconds. + +## Kill Cluster Job +`paddle.py` can capture `Ctrl + C` SIGINT signal to automatically kill all processes launched by it. So just stop `paddle.py` to kill cluster job. You should manually kill the job if the program crashed. + +## Check Cluster Training Result +Check log in $workspace/log for details, each node owns same log structure. + +`paddle_trainer.INFO` +It provides almost all internal output log for training, same as local training. Check runtime model convergence here. + +`paddle_pserver2.INFO` +It provides parameter server running log, which could help to diagnose distributed error. + +`server.log` +It provides stderr and stdout of parameter server process. Check error log if training crashes. + +`train.log` +It provides stderr and stdout of trainer process. Check error log if training crashes. + +## Check Model Output +After one pass finished, model files will be written in `output` directory in node 0. +`nodefile` in workspace indicates the node id of current cluster job. diff --git a/doc/howto/usage/cluster/k8s_aws_en.md b/doc/howto/usage/cluster/k8s_aws_en.md new file mode 100644 index 0000000000..ce72b08038 --- /dev/null +++ b/doc/howto/usage/cluster/k8s_aws_en.md @@ -0,0 +1,689 @@ + +# Distributed PaddlePaddle Training on AWS with Kubernetes + +We will show you step by step on how to run distributed PaddlePaddle training on AWS cluster with Kubernetes. Let's start from core concepts. + +## Distributed PaddlePaddle Training Core Concepts + +### Distributed Training Job + +A distributed training job is represented by a [Kubernetes job](https://kubernetes.io/docs/user-guide/jobs/#what-is-a-job). + +Each Kuberentes job is described by a job config file, which specifies the information like the number of [pods](https://kubernetes.io/docs/user-guide/pods/#what-is-a-pod) in the job and environment variables. + +In a distributed training job, we would: + +1. prepare partitioned training data and configuration file on a distributed file system (in this tutorial we use Amazon Elastic File System), and +1. create and submit the Kubernetes job config to the Kubernetes cluster to start the training job. + +### Parameter Servers and Trainers + +There are two roles in a PaddlePaddle cluster: *parameter server (pserver)* and *trainer*. Each parameter server process maintains a shard of the global model. Each trainer has its local copy of the model, and uses its local data to update the model. During the training process, trainers send model updates to parameter servers, parameter servers are responsible for aggregating these updates, so that trainers can synchronize their local copy with the global model. + +

![Model is partitioned into two shards. Managed by two parameter servers respectively.](src/pserver_and_trainer.png)
+ +In order to communicate with pserver, trainer needs to know the ip address of each pserver. In kubernetes it's better to use a service discovery mechanism (e.g., DNS hostname) rather than static ip address, since any pserver's pod may be killed and a new pod could be schduled onto another node of different ip address. However, now we are using static ip. This will be improved. + +Parameter server and trainer are packaged into a same docker image. They will run once pod is scheduled by kubernetes job. + +### Trainer ID + +Each trainer process requires a trainer ID, a zero-based index value, passed in as a command-line parameter. The trainer process thus reads the data partition indexed by this ID. + +### Training + +The entry-point of a container is a shell script. It can see some environment variables pre-defined by Kubernetes. This includes one that gives the job's identity, which can be used in a remote call to the Kubernetes apiserver that lists all pods in the job. + +We rank each pod by sorting them by their ips. The rank of each pod could be the "pod ID". Because we run one trainer and one parameter server in each pod, we can use this "pod ID" as the trainer ID. A detailed workflow of the entry-point script is as follows: + +1. Query the api server to get pod information, and assign the `trainer_id` by sorting the ip. +1. Copy the training data from EFS persistent volume into container. +1. Parse the `paddle pserver` and `paddle trainer` startup parameters from environment variables, and then start up the processes. +1. Trainer with `train_id` 0 will automatically write results onto EFS volume. + + +## PaddlePaddle on AWS with Kubernetes + +### Choose AWS Service Region +This tutorial requires several AWS services work in the same region. Before we create anything in AWS, please check the following link +https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/ +Choose a region which has the following services available: EC2, EFS, VPS, CloudFormation, KMS, VPC, S3. +In this tutorial, we use "Oregon(us-west-2)" as example. + +### Create AWS Account and IAM Account + +Under each AWS account, we can create multiple [IAM](http://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) users. This allows us to grant some privileges to each IAM user and to create/operate AWS clusters as an IAM user. + +To sign up an AWS account, please +follow +[this guide](http://docs.aws.amazon.com/lambda/latest/dg/setting-up.html). +To create IAM users and user groups under an AWS account, please +follow +[this guide](http://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html). + +Please be aware that this tutorial needs the following privileges for the user in IAM: + +- AmazonEC2FullAccess +- AmazonS3FullAccess +- AmazonRoute53FullAccess +- AmazonRoute53DomainsFullAccess +- AmazonElasticFileSystemFullAccess +- AmazonVPCFullAccess +- IAMUserSSHKeys +- IAMFullAccess +- NetworkAdministrator +- AWSKeyManagementServicePowerUser + + +### Download kube-aws and kubectl + +#### kube-aws + +[kube-aws](https://github.com/coreos/kube-aws) is a CLI tool to automate cluster deployment to AWS. +##### Verify kube-aws integrity +Note: if you are using a non-official release (e.g RC release) kube-aws, you can skip this setp. +Import the CoreOS Application Signing Public Key: + +``` +gpg2 --keyserver pgp.mit.edu --recv-key FC8A365E +``` + +Validate the key fingerprint: + +``` +gpg2 --fingerprint FC8A365E +``` +The correct key fingerprint is `18AD 5014 C99E F7E3 BA5F 6CE9 50BD D3E0 FC8A 365E` + +We can download `kube-aws` from its [release page](https://github.com/coreos/kube-aws/releases). In this tutorial, we use version 0.9.1 + +Validate the tarball's GPG signature: + +``` +PLATFORM=linux-amd64 + # Or +PLATFORM=darwin-amd64 + +gpg2 --verify kube-aws-${PLATFORM}.tar.gz.sig kube-aws-${PLATFORM}.tar.gz +``` +##### Install kube-aws +Extract the binary: + +``` +tar zxvf kube-aws-${PLATFORM}.tar.gz +``` + +Add kube-aws to your path: + +``` +mv ${PLATFORM}/kube-aws /usr/local/bin +``` + + +#### kubectl + +[kubectl](https://kubernetes.io/docs/user-guide/kubectl-overview/) is a command line interface for running commands against Kubernetes clusters. + +Download `kubectl` from the Kubernetes release artifact site with the `curl` tool. + +``` +# OS X +curl -O https://storage.googleapis.com/kubernetes-release/release/"$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)"/bin/darwin/amd64/kubectl + +# Linux +curl -O https://storage.googleapis.com/kubernetes-release/release/"$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)"/bin/linux/amd64/kubectl +``` + +Make the kubectl binary executable and move it to your PATH (e.g. `/usr/local/bin`): + +``` +chmod +x ./kubectl +sudo mv ./kubectl /usr/local/bin/kubectl +``` + +### Configure AWS Credentials + +First check out [this](http://docs.aws.amazon.com/cli/latest/userguide/installing.html) for installing the AWS command line interface. + +And then configure your AWS account information: + +``` +aws configure +``` + + +Fill in the required fields: + + +``` +AWS Access Key ID: YOUR_ACCESS_KEY_ID +AWS Secrete Access Key: YOUR_SECRETE_ACCESS_KEY +Default region name: us-west-2 +Default output format: json +``` + +`YOUR_ACCESS_KEY_ID`, and `YOUR_SECRETE_ACCESS_KEY` is the IAM key and secret from [Create AWS Account and IAM Account](#create-aws-account-and-iam-account) + +Verify that your credentials work by describing any instances you may already have running on your account: + +``` +aws ec2 describe-instances +``` + +### Define Cluster Parameters + +#### EC2 key pair + +The keypair that will authenticate SSH access to your EC2 instances. The public half of this key pair will be configured on each CoreOS node. + +Follow [EC2 Keypair User Guide](http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html) to create a EC2 key pair + +After creating a key pair, you will use the key pair name to configure the cluster. + +Key pairs are only available to EC2 instances in the same region. We are using us-west-2 in our tutorial, so make sure to creat key pairs in that region (Oregon). + +Your browser will download a `key-name.pem` file which is the key to access the EC2 instances. We will use it later. + + +#### KMS key + +Amazon KMS keys are used to encrypt and decrypt cluster TLS assets. If you already have a KMS Key that you would like to use, you can skip creating a new key and provide the Arn string for your existing key. + +You can create a KMS key with the aws command line tool: + +``` +aws kms --region=us-west-2 create-key --description="kube-aws assets" +{ + "KeyMetadata": { + "CreationDate": 1458235139.724, + "KeyState": "Enabled", + "Arn": "arn:aws:kms:us-west-2:aaaaaaaaaaaaa:key/xxxxxxxxxxxxxxxxxxx", + "AWSAccountId": "xxxxxxxxxxxxx", + "Enabled": true, + "KeyUsage": "ENCRYPT_DECRYPT", + "KeyId": "xxxxxxxxx", + "Description": "kube-aws assets" + } +} +``` + +We will need to use the value of `Arn` later. + +And then let's add several inline policies in your IAM user permission. + +Go to [IAM Console](https://console.aws.amazon.com/iam/home?region=us-west-2#/home). Click on button `Users`, click user that we just created, and then click on `Add inline policy` button, and select `Custom Policy`. + +Paste into following inline policies: + +``` + (Caution: node_0, node_1, node_2 directories represents PaddlePaddle node and train_id, not the Kubernetes node){ + "Version": "2012-10-17", + "Statement": [ + { + "Sid": "Stmt1482205552000", + "Effect": "Allow", + "Action": [ + "kms:Decrypt", + "kms:Encrypt" + ], + "Resource": [ + "arn:aws:kms:*:AWS_ACCOUNT_ID:key/*" + ] + }, + { + "Sid": "Stmt1482205746000", + "Effect": "Allow", + "Action": [ + "cloudformation:CreateStack", + "cloudformation:UpdateStack", + "cloudformation:DeleteStack", + "cloudformation:DescribeStacks", + "cloudformation:DescribeStackResource", + "cloudformation:GetTemplate", + "cloudformation:DescribeStackEvents" + ], + "Resource": [ + "arn:aws:cloudformation:us-west-2:AWS_ACCOUNT_ID:stack/MY_CLUSTER_NAME/*" + ] + } + ] +} +``` +`Version` : Its value has to be exactly "2012-10-17". +`AWS_ACCOUNT_ID`: You can get it from following command line: + +``` +aws sts get-caller-identity --output text --query Account +``` + +`MY_CLUSTER_NAME`: Pick a MY_CLUSTER_NAME that you like, you will use it later as well. +Please note, stack name must satisfy regular expression pattern: [a-zA-Z][-a-zA-Z0-9*]*, which means no "_" or "-" in stack name, or kube-aws will throw error in later steps. + +#### External DNS name + +When the cluster is created, the controller will expose the TLS-secured API on a DNS name. + +DNS name should have a CNAME points to cluster DNS name or an A record points to the cluster IP address. + +We will need to use DNS name later in tutorial. If you don't already own one, you can choose any DNS name (e.g., `paddle`) and modify `/etc/hosts` to associate cluster IP with that DNS name for your local machine. And add name service (route53) in aws to associate the IP to paddle for cluster. We will find the cluster IP in later steps. + +#### S3 bucket + +You need to create an S3 bucket before startup the Kubernetes cluster. + +There are some bugs in aws cli in creating S3 bucket, so let's use the [S3 Console](https://console.aws.amazon.com/s3/home?region=us-west-2). + +Click on `Create Bucket`, fill in a unique BUCKET_NAME, and make sure region is us-west-2 (Oregon). + + +#### Initialize Assets + +Create a directory on your local machine to hold the generated assets: + +``` +$ mkdir my-cluster +$ cd my-cluster +``` + +Initialize the cluster CloudFormation stack with the KMS Arn, key pair name, and DNS name from the previous step: + +``` +kube-aws init \ +--cluster-name=MY_CLUSTER_NAME \ +--external-dns-name=MY_EXTERNAL_DNS_NAME \ +--region=us-west-2 \ +--availability-zone=us-west-2a \ +--key-name=KEY_PAIR_NAME \ +--kms-key-arn="arn:aws:kms:us-west-2:xxxxxxxxxx:key/xxxxxxxxxxxxxxxxxxx" +``` + +`MY_CLUSTER_NAME`: the one you picked in [KMS key](#kms-key) + +`MY_EXTERNAL_DNS_NAME`: see [External DNS name](#external-dns-name) + +`KEY_PAIR_NAME`: see [EC2 key pair](#ec2-key-pair) + +`--kms-key-arn`: the "Arn" in [KMS key](#kms-key) + +Here `us-west-2a` is used for parameter `--availability-zone`, but supported availability zone varies among AWS accounts. + +Please check if `us-west-2a` is supported by `aws ec2 --region us-west-2 describe-availability-zones`, if not switch to other supported availability zone. (e.g., `us-west-2a`, or `us-west-2b`) + + +There will now be a cluster.yaml file in the asset directory. This is the main configuration file for your cluster. + +By default `kube-aws` will only create one worker node. Let's edit `cluster.yaml` and change `workerCount` from 1 to 3. + + +#### Render contents of the asset directory + +In the simplest case, you can have kube-aws generate both your TLS identities and certificate authority for you. + +``` +kube-aws render credentials --generate-ca +``` + +The next command generates the default set of cluster assets in your asset directory. + +``` +kube-aws render stack +``` +Assets (templates and credentials) that are used to create, update and interact with your Kubernetes cluster will be created under your current folder. + + +### Kubernetes Cluster Start Up + +#### Create the instances defined in the CloudFormation template + +Now let's create your cluster (choose any `PREFIX` for the command below): + +``` +kube-aws up --s3-uri s3://BUCKET_NAME/PREFIX +``` + +`BUCKET_NAME`: the bucket name that you used in [S3 bucket](#s3-bucket) + + +#### Configure DNS + +You can invoke `kube-aws status` to get the cluster API endpoint after cluster creation. + +``` +$ kube-aws status +Cluster Name: paddle-cluster +Controller DNS Name: paddle-cl-ElbAPISe-EEOI3EZPR86C-531251350.us-west-2.elb.amazonaws.com +``` + +If you own a DNS name, set the A record to any of the above ip. __Or__ you can set up CNAME point to `Controller DNS Name` (`paddle-cl-ElbAPISe-EEOI3EZPR86C-531251350.us-west-2.elb.amazonaws.com`) + +##### Find IP address + +Use command `dig` to check the load balancer hostname to get the ip address. + +``` +$ dig paddle-cl-ElbAPISe-EEOI3EZPR86C-531251350.us-west-2.elb.amazonaws.com + +;; QUESTION SECTION: +;paddle-cl-ElbAPISe-EEOI3EZPR86C-531251350.us-west-2.elb.amazonaws.com. IN A + +;; ANSWER SECTION: +paddle-cl-ElbAPISe-EEOI3EZPR86C-531251350.us-west-2.elb.amazonaws.com. 59 IN A 54.241.164.52 +paddle-cl-ElbAPISe-EEOI3EZPR86C-531251350.us-west-2.elb.amazonaws.com. 59 IN A 54.67.102.112 +``` + +In the above output, both ip `54.241.164.52`, `54.67.102.112` will work. + +*If you own a DNS name*, set the A record to any of the above ip. Then you can skip to the step "Access the cluster". + +*If you do not own a DNS name*: +##### Update local DNS association +Edit `/etc/hosts` to associate above ip with the DNS name. +##### Add Route53 private name service in VPC + - Open [Route53 Console](https://console.aws.amazon.com/route53/home) + - Create hosted zone with following config + - Domain name: "paddle" + - Type: "Private hosted zone for amazon VPC" + - VPC ID: `` + + ![route53 zone setting](src/route53_create_zone.png) + - Add A record + - Click on the zone "paddle" just created + - Click the button "Create record set" + - Name : leave blank + - type: "A" + - Value: `` + + ![route53 create recordset](src/route53_create_recordset.png) + - Verify name service + - Connect to any instance created by kube-aws via ssh + - Run command "host paddle", see if the ip returned is the private ip of kube-controller + +#### Access the cluster + +Once the API server is running, you should see: + +``` +$ kubectl --kubeconfig=kubeconfig get nodes +NAME STATUS AGE +ip-10-0-0-134.us-west-2.compute.internal Ready 6m +ip-10-0-0-238.us-west-2.compute.internal Ready 6m +ip-10-0-0-50.us-west-2.compute.internal Ready 6m +ip-10-0-0-55.us-west-2.compute.internal Ready 6m +``` + + +### Setup Elastic File System for Cluster + +Training data is usually served on a distributed filesystem, we use Elastic File System (EFS) on AWS. + +1. Create security group for EFS in [security group console](https://us-west-2.console.aws.amazon.com/ec2/v2/home?region=us-west-2#SecurityGroups:sort=groupId) + 1. Look up security group id for `paddle-cluster-sg-worker` (`sg-055ee37d` in the image below) +
![](src/worker_security_group.png)
+ 2. Add security group `paddle-efs` with `ALL TCP` inbound rule and custom source as group id of `paddle-cluster-sg-worker`. And VPC of `paddle-cluster-vpc`. Make sure availability zone is same as the one you used in [Initialize Assets](#initialize-assets). +
![](src/add_security_group.png)
+ +2. Create the Elastic File System in [EFS console](https://us-west-2.console.aws.amazon.com/efs/home?region=us-west-2#/wizard/1) with `paddle-cluster-vpc` VPC. Make sure subnet is `paddle-cluster-Subnet0` andd security group is `paddle-efs`. +
![](src/create_efs.png)
+ + +### Start PaddlePaddle Training Demo on AWS + +#### Configure Kubernetes Volume that Points to EFS + +First we need to create a [PersistentVolume](https://kubernetes.io/docs/user-guide/persistent-volumes/) to provision EFS volumn. + +Save following snippet as `pv.yaml` +``` +apiVersion: v1 +kind: PersistentVolume +metadata: + name: efsvol +spec: + capacity: + storage: 100Gi + accessModes: + - ReadWriteMany + nfs: + server: EFS_DNS_NAME + path: "/" +``` + +`EFS_DNS_NAME`: DNS name as shown in description of `paddle-efs` that we created. Looks similar to `fs-2cbf7385.efs.us-west-2.amazonaws.com` + +Run following command to create a persistent volumn: +``` +kubectl --kubeconfig=kubeconfig create -f pv.yaml +``` + +Next let's create a [PersistentVolumeClaim](https://kubernetes.io/docs/user-guide/persistent-volumes/) to claim the persistent volume. + +Save following snippet as `pvc.yaml`. +``` +kind: PersistentVolumeClaim +apiVersion: v1 +metadata: + name: efsvol +spec: + accessModes: + - ReadWriteMany + resources: + requests: + storage: 50Gi +``` + +Run following command to create a persistent volumn claim: +``` +kubectl --kubeconfig=kubeconfig create -f pvc.yaml +``` + +#### Prepare Training Data + +We will now launch a kubernetes job that downloads, saves and evenly splits training data into 3 shards on the persistent volumn that we just created. + +save following snippet as `paddle-data-job.yaml` +``` +apiVersion: batch/v1 +kind: Job +metadata: + name: paddle-data +spec: + template: + metadata: + name: pi + spec: + containers: + - name: paddle-data + image: paddledev/paddle-tutorial:k8s_data + imagePullPolicy: Always + volumeMounts: + - mountPath: "/efs" + name: efs + env: + - name: OUT_DIR + value: /efs/paddle-cluster-job + - name: SPLIT_COUNT + value: "3" + volumes: + - name: efs + persistentVolumeClaim: + claimName: efsvol + restartPolicy: Never +``` + +Run following command to launch the job: +``` +kubectl --kubeconfig=kubeconfig create -f paddle-data-job.yaml +``` + +Job may take 7 min to finish, use following command to check job status. Do not proceed until `SUCCESSFUL` for `paddle-data` job is `1` +``` +$ kubectl --kubeconfig=kubeconfig get jobs +NAME DESIRED SUCCESSFUL AGE +paddle-data 1 1 6m +``` + +Data preparation is done by docker image `paddledev/paddle-tutorial:k8s_data`, see [here](src/k8s_data/README.md) for how to build this docker image and source code. + +#### Start Training + +Now we are ready to start paddle training job. Save following snippet as `paddle-cluster-job.yaml` +``` +apiVersion: batch/v1 +kind: Job +metadata: + name: paddle-cluster-job +spec: + parallelism: 3 + completions: 3 + template: + metadata: + name: paddle-cluster-job + spec: + volumes: + - name: efs + persistentVolumeClaim: + claimName: efsvol + containers: + - name: trainer + image: paddledev/paddle-tutorial:k8s_train + command: ["bin/bash", "-c", "/root/start.sh"] + env: + - name: JOB_NAME + value: paddle-cluster-job + - name: JOB_PATH + value: /home/jobpath + - name: JOB_NAMESPACE + value: default + - name: TRAIN_CONFIG_DIR + value: quick_start + - name: CONF_PADDLE_NIC + value: eth0 + - name: CONF_PADDLE_PORT + value: "7164" + - name: CONF_PADDLE_PORTS_NUM + value: "2" + - name: CONF_PADDLE_PORTS_NUM_SPARSE + value: "2" + - name: CONF_PADDLE_GRADIENT_NUM + value: "3" + - name: TRAINER_COUNT + value: "3" + volumeMounts: + - mountPath: "/home/jobpath" + name: efs + ports: + - name: jobport0 + hostPort: 7164 + containerPort: 7164 + - name: jobport1 + hostPort: 7165 + containerPort: 7165 + - name: jobport2 + hostPort: 7166 + containerPort: 7166 + - name: jobport3 + hostPort: 7167 + containerPort: 7167 + restartPolicy: Never +``` + +`parallelism: 3, completions: 3` means this job will simultaneously start 3 PaddlePaddle pods, and this job will be finished when there are 3 finished pods. + +`env` field represents container's environment variables, we specify PaddlePaddle parameters by environment variables. + +`ports` indicates that TCP port 7164 - 7167 are exposed for communication between `pserver` ans trainer. port starts continously from `CONF_PADDLE_PORT` (7164) to `CONF_PADDLE_PORT + CONF_PADDLE_PORTS_NUM + CONF_PADDLE_PORTS_NUM_SPARSE - 1` (7167). We use multiple ports for dense and sparse paramter updates to improve latency. + +Run following command to launch the job. +``` +kubectl --kubeconfig=kubeconfig create -f paddle-claster-job.yaml +``` + +Inspect individual pods + +``` +$ kubectl --kubeconfig=kubeconfig get pods +NAME READY STATUS RESTARTS AGE +paddle-cluster-job-cm469 1/1 Running 0 9m +paddle-cluster-job-fnt03 1/1 Running 0 9m +paddle-cluster-job-jx4xr 1/1 Running 0 9m +``` + +Inspect individual console output +``` +kubectl --kubeconfig=kubeconfig log -f POD_NAME +``` + +`POD_NAME`: name of any pod (e.g., `paddle-cluster-job-cm469`). + +Run `kubectl --kubeconfig=kubeconfig describe job paddle-cluster-job` to check training job status. It will complete in around 20 minutes. + +The details for start `pserver` and `trainer` are hidden inside docker image `paddledev/paddle-tutorial:k8s_train`, see [here](src/k8s_train/README.md) for how to build the docker image and source code. + +#### Inspect Training Output + +Training output (model snapshot and logs) will be saved in EFS. We can ssh into worker EC2 instance, mount EFS and check training output. + +1. ssh Into Worker EC2 instance +``` +chmod 400 key-name.pem +ssh -i key-name.pem core@INSTANCE_IP +``` + +`INSTANCE_IP`: public IP address of EC2 kubernetes worker node. Go to [EC2 console](https://us-west-2.console.aws.amazon.com/ec2/v2/home?region=us-west-2#Instances:sort=instanceId) and check `public IP` of any `paddle-cluster-kube-aws-worker` instance. + +2. Mount EFS +``` +mkdir efs +sudo mount -t nfs4 -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2 EFS_DNS_NAME:/ efs +``` + +`EFS_DNS_NAME`: DNS name as shown in description of `paddle-efs` that we created. Look similar to `fs-2cbf7385.efs.us-west-2.amazonaws.com`. + +Now folder `efs` will have structure similar to: +``` +-- paddle-cluster-job + |-- ... + |-- output + | |-- node_0 + | | |-- server.log + | | `-- train.log + | |-- node_1 + | | |-- server.log + | | `-- train.log + | |-- node_2 + | | |-- server.log + | | `-- train.log + | |-- pass-00000 + | | |-- ___fc_layer_0__.w0 + | | |-- ___fc_layer_0__.wbias + | | |-- done + | | |-- path.txt + | | `-- trainer_config.lr.py + | |-- pass-00001... +``` +`server.log` contains log for `pserver`. `train.log` contains log for `trainer`. Model description and snapshot is stored in `pass-0000*`. + +### Kubernetes Cluster Tear Down + +#### Delete EFS + +Go to [EFS Console](https://us-west-2.console.aws.amazon.com/efs/home?region=us-west-2) and delete the EFS volumn that we created. + +#### Delete security group + +Go to [Security Group Console](https://us-west-2.console.aws.amazon.com/ec2/v2/home?region=us-west-2#SecurityGroups:sort=groupId) and delete security group `paddle-efs`. + + +#### Delete S3 Bucket + +Go to [S3 Console](https://console.aws.amazon.com/s3/home?region=us-west-2#) and delete the S3 bucket that we created. + +#### Destroy Cluster + +``` +kube-aws destroy +``` + +The command will return immediately, but it might take 5 min to tear down the whole cluster. + +You can go to [CludFormation Console](https://us-west-2.console.aws.amazon.com/cloudformation/home?region=us-west-2#/stacks?filter=active) to check destroy process. diff --git a/doc/howto/usage/cluster/k8s_cn.md b/doc/howto/usage/cluster/k8s_cn.md new file mode 100644 index 0000000000..ab07cb9cd5 --- /dev/null +++ b/doc/howto/usage/cluster/k8s_cn.md @@ -0,0 +1,205 @@ +# Kubernetes单机训练 + +在这篇文档里,我们介绍如何在 Kubernetes 集群上启动一个单机使用CPU的Paddle训练作业。在下一篇中,我们将介绍如何启动分布式训练作业。 + +## 制作Docker镜像 + +在一个功能齐全的Kubernetes机群里,通常我们会安装Ceph等分布式文件系统来存储训练数据。这样的话,一个分布式Paddle训练任务中的每个进程都可以从Ceph读取数据。在这个例子里,我们只演示一个单机作业,所以可以简化对环境的要求,把训练数据直接放在 +Paddle的Docker image里。为此,我们需要制作一个包含训练数据的Paddle镜像。 + +Paddle 的 [Quick Start Tutorial](http://www.paddlepaddle.org/doc/demo/quick_start/index_en.html) +里介绍了用Paddle源码中的脚本下载训练数据的过程。 +而 `paddledev/paddle:cpu-demo-latest` 镜像里有 Paddle 源码与demo,( 请注意,默认的 +Paddle镜像 `paddledev/paddle:cpu-latest` 是不包括源码的, Paddle的各版本镜像可以参考 [Docker installation guide](http://www.paddlepaddle.org/doc/build/docker_install.html) ),所以我们使用这个镜像来下载训练数据到Docker container中,然后把这个包含了训练数据的container保存为一个新的镜像。 + +### 运行容器 + +``` +$ docker run --name quick_start_data -it paddledev/paddle:cpu-demo-latest +``` + +### 下载数据 + +进入容器`/root/paddle/demo/quick_start/data`目录,使用`get_data.sh`下载数据 + +``` +$ root@fbd1f2bb71f4:~/paddle/demo/quick_start/data# ./get_data.sh + +Downloading Amazon Electronics reviews data... +--2016-10-31 01:33:43-- http://snap.stanford.edu/data/amazon/productGraph/categoryFiles/reviews_Electronics_5.json.gz +Resolving snap.stanford.edu (snap.stanford.edu)... 171.64.75.80 +Connecting to snap.stanford.edu (snap.stanford.edu)|171.64.75.80|:80... connected. +HTTP request sent, awaiting response... 200 OK +Length: 495854086 (473M) [application/x-gzip] +Saving to: 'reviews_Electronics_5.json.gz' + + 10% [=======> ] 874,279 64.7KB/s eta 2h 13m + +``` + +### 修改启动脚本 + +下载完数据后,修改`/root/paddle/demo/quick_start/train.sh`文件,内容如下(增加了一条cd命令) +``` +set -e +cd /root/paddle/demo/quick_start +cfg=trainer_config.lr.py +#cfg=trainer_config.emb.py +#cfg=trainer_config.cnn.py +#cfg=trainer_config.lstm.py +#cfg=trainer_config.bidi-lstm.py +#cfg=trainer_config.db-lstm.py +paddle train \ + --config=$cfg \ + --save_dir=./output \ + --trainer_count=4 \ + --log_period=20 \ + --num_passes=15 \ + --use_gpu=false \ + --show_parameter_stats_period=100 \ + --test_all_data_in_one_period=1 \ + 2>&1 | tee 'train.log' +``` + +### 提交镜像 + +修改启动脚本后,退出容器,使用`docker commit`命令创建新镜像。 + +``` +$ docker commit quick_start_data mypaddle/paddle:quickstart +``` + +## 使用 Kubernetes 进行训练 + +>针对任务运行完成后容器自动退出的场景,Kubernetes有Job类型的资源来支持。下文就是用Job类型的资源来进行训练。 + +### 编写yaml文件 + +在训练时,输出结果可能会随着容器的消耗而被删除,需要在创建容器前挂载卷以便我们保存训练结果。使用我们之前构造的镜像,可以创建一个 [Kubernetes Job](http://kubernetes.io/docs/user-guide/jobs/#what-is-a-job),简单的yaml文件如下: + +``` +apiVersion: batch/v1 +kind: Job +metadata: + name: quickstart +spec: + parallelism: 1 + completions: 1 + template: + metadata: + name: quickstart + spec: + volumes: + - name: output + hostPath: + path: /home/work/paddle_output + containers: + - name: pi + image: mypaddle/paddle:quickstart + command: ["bin/bash", "-c", "/root/paddle/demo/quick_start/train.sh"] + volumeMounts: + - name: output + mountPath: /root/paddle/demo/quick_start/output + restartPolicy: Never +``` + +### 创建Paddle Job + +使用上文创建的yaml文件创建Kubernetes Job,命令为: + +``` +$ kubectl create -f paddle.yaml +``` + +查看job的详细情况: + +``` +$ kubectl get job +NAME DESIRED SUCCESSFUL AGE +quickstart 1 0 58s + +$ kubectl describe job quickstart +Name: quickstart +Namespace: default +Image(s): registry.baidu.com/public/paddle:cpu-demo-latest +Selector: controller-uid=f120da72-9f18-11e6-b363-448a5b355b84 +Parallelism: 1 +Completions: 1 +Start Time: Mon, 31 Oct 2016 11:20:16 +0800 +Labels: controller-uid=f120da72-9f18-11e6-b363-448a5b355b84,job-name=quickstart +Pods Statuses: 0 Running / 1 Succeeded / 0 Failed +Volumes: + output: + Type: HostPath (bare host directory volume) + Path: /home/work/paddle_output +Events: + FirstSeen LastSeen Count From SubobjectPath Type Reason Message + --------- -------- ----- ---- ------------- -------- ------ ------- + 1m 1m 1 {job-controller } Normal SuccessfulCreate Created pod: quickstart-fa0wx +``` + +### 查看训练结果 + +根据Job对应的Pod信息,可以查看此Pod运行的宿主机。 + +``` +kubectl describe pod quickstart-fa0wx +Name: quickstart-fa0wx +Namespace: default +Node: paddle-demo-let02/10.206.202.44 +Start Time: Mon, 31 Oct 2016 11:20:17 +0800 +Labels: controller-uid=f120da72-9f18-11e6-b363-448a5b355b84,job-name=quickstart +Status: Succeeded +IP: 10.0.0.9 +Controllers: Job/quickstart +Containers: + quickstart: + Container ID: docker://b8561f5c79193550d64fa47418a9e67ebdd71546186e840f88de5026b8097465 + Image: registry.baidu.com/public/paddle:cpu-demo-latest + Image ID: docker://18e457ce3d362ff5f3febf8e7f85ffec852f70f3b629add10aed84f930a68750 + Port: + Command: + bin/bash + -c + /root/paddle/demo/quick_start/train.sh + QoS Tier: + cpu: BestEffort + memory: BestEffort + State: Terminated + Reason: Completed + Exit Code: 0 + Started: Mon, 31 Oct 2016 11:20:20 +0800 + Finished: Mon, 31 Oct 2016 11:21:46 +0800 + Ready: False + Restart Count: 0 + Environment Variables: +Conditions: + Type Status + Ready False +Volumes: + output: + Type: HostPath (bare host directory volume) + Path: /home/work/paddle_output +``` + +我们还可以登录到宿主机上查看训练结果。 + +``` +[root@paddle-demo-let02 paddle_output]# ll +total 60 +drwxr-xr-x 2 root root 4096 Oct 31 11:20 pass-00000 +drwxr-xr-x 2 root root 4096 Oct 31 11:20 pass-00001 +drwxr-xr-x 2 root root 4096 Oct 31 11:21 pass-00002 +drwxr-xr-x 2 root root 4096 Oct 31 11:21 pass-00003 +drwxr-xr-x 2 root root 4096 Oct 31 11:21 pass-00004 +drwxr-xr-x 2 root root 4096 Oct 31 11:21 pass-00005 +drwxr-xr-x 2 root root 4096 Oct 31 11:21 pass-00006 +drwxr-xr-x 2 root root 4096 Oct 31 11:21 pass-00007 +drwxr-xr-x 2 root root 4096 Oct 31 11:21 pass-00008 +drwxr-xr-x 2 root root 4096 Oct 31 11:21 pass-00009 +drwxr-xr-x 2 root root 4096 Oct 31 11:21 pass-00010 +drwxr-xr-x 2 root root 4096 Oct 31 11:21 pass-00011 +drwxr-xr-x 2 root root 4096 Oct 31 11:21 pass-00012 +drwxr-xr-x 2 root root 4096 Oct 31 11:21 pass-00013 +drwxr-xr-x 2 root root 4096 Oct 31 11:21 pass-00014 +``` diff --git a/doc/howto/usage/cluster/k8s_distributed_cn.md b/doc/howto/usage/cluster/k8s_distributed_cn.md new file mode 100644 index 0000000000..a9bebf0955 --- /dev/null +++ b/doc/howto/usage/cluster/k8s_distributed_cn.md @@ -0,0 +1,315 @@ +# Kubernetes分布式训练 + +前一篇文章介绍了如何在Kubernetes集群上启动一个单机PaddlePaddle训练作业 (Job)。在这篇文章里,我们介绍如何在Kubernetes集群上进行分布式PaddlePaddle训练作业。关于PaddlePaddle的分布式训练,文章 [Cluster Training](https://github.com/baidu/Paddle/blob/develop/doc/cluster/opensource/cluster_train.md)介绍了一种通过SSH远程分发任务,进行分布式训练的方法,与此不同的是,本文将介绍在Kubernetes容器管理平台上快速构建PaddlePaddle容器集群,进行分布式训练的方案。 + +有关Kubernetes相关概念以及如何搭建和配置Kubernetes集群,可以参考[k8s_basis](./k8s_basis_cn.md)。 + +## 整体方案 + +在训练之前,用户将配置与训练数据切分好放在分布式文件系统预先分配好的目录中(不同的分布式文件系统,需要使用其制定的方式挂载后并导入数据),训练时,程序从此目录拷贝文件到容器内进行训练,将结果保存到此目录里。整体的结构图如下: + +![paddle on kubernetes结构图](src/k8s-paddle-arch.png) + +上图描述了一个3节点的分布式训练场景,在每个Pod上都通过volume方式挂载分布式文件系统的一个目录用于保存训练数据和输出结果。Kubernetes为这次训练创建了3个pod并且调度到了3个node上运行,每个pod包含一个PaddlePaddle容器。在容器创建后,会启动pserver与trainer进程,读取volume中的数据进行这次分布式训练。 + +根据前文的描述,要在已有的Kubernetes集群上进行PaddlePaddle的分布式训练,按照下面步骤即可: + +1. [制作PaddlePaddle镜像](#制作镜像) +1. [将训练文件与切分好的数据上传到共享存储](#上传训练文件) +1. [编写本次训练的YAML文件,创建一个Kubernetes job](#创建Job) +1. [训练结束后查看输出结果](#查看输出) + +下面就根据这几个步骤分别介绍。 + +### 制作镜像 + +PaddlePaddle镜像需要提供`paddle pserver`与`paddle train`进程的运行环境,用这个镜像创建的容器需要有以下两个功能: + +- 拷贝训练文件到容器内 +- 生成`paddle pserver`与`paddle train`进程的启动参数,并且启动训练 + +因为官方镜像 `paddledev/paddle:cpu-latest` 内已经包含PaddlePaddle的执行程序但是还没上述功能,所以我们可以在这个基础上,添加启动脚本,制作新镜像来完成以上的工作。参考镜像的[*Dockerfile*](https://github.com/PaddlePaddle/Paddle/blob/develop/doc/howto/usage/cluster/k8s/src/k8s_train/Dockerfile)。 + +```bash +$ cd doc/howto/usage/k8s/src/k8s_train +$ docker build -t [YOUR_REPO]/paddle:mypaddle . +``` + +然后将构建成功的镜像上传到镜像仓库。 + +```bash +docker push [YOUR_REPO]/paddle:mypaddle +``` + +注意上述命令中`[YOUR_REPO]`表示读者所使用的Docker镜像仓库地址,读者需要替换成自己使用的仓库地址。下文使用`[YOUR_REPO]/paddle:mypaddle`这个地址来表示此步骤所构建出的镜像。 + +### 准备训练数据 + +这里我们通过在Kubernetes集群上启动一个Job来下载并切割数据,也可以通过修改[k8s_train](./src/k8s_train/README.md)的内容来定制image. + +在启动Job之前,需要根据不同的分布式存储来绑定一个[persistentVolumeClaim](https://kubernetes.io/docs/user-guide/persistent-volumes/),生成的数据将会存储在这个volume下. + +```yaml +apiVersion: batch/v1 +kind: Job +metadata: + name: paddle-data +spec: + template: + metadata: + name: pi + spec: + hostNetwork: true + containers: + - name: paddle-data + image: paddledev/paddle-tutorial:k8s_data + imagePullPolicy: Always + volumeMounts: + - mountPath: "/mnt" + name: nfs + env: + - name: OUT_DIR + value: /home/work/mfs/paddle-cluster-job + - name: SPLIT_COUNT + value: "3" + volumes: + - name: nfs + persistentVolumeClaim: + claimName: mfs + restartPolicy: Never +``` + +完成后volume中的文件内容大致如下: +```base +[root@paddle-kubernetes-node0 nfsdir]$ tree -d +. +`-- paddle-cluster-job + |-- 0 + | `-- data + |-- 1 + | `-- data + |-- 2 + | `-- data + |-- output + |-- quick_start +``` + +目录中paddle-cluster-job是本次训练对应的job name,本次训练要求有3个PaddlePaddle节点,在paddle-cluster-job/data目录中存放切分好的数据,文件夹0,1,2分别代表3个节点的trainer_id。recommendation文件夹内存放训练文件,output文件夹存放训练结果与日志。 + +### 创建Job + +Kubernetes可以通过YAML文件来创建相关对象,然后可以使用命令行工具创建job。 + +Job YAML文件描述了这次训练使用的Docker镜像,需要启动的节点个数以及 `paddle pserver`与 `paddle train`进程启动的必要参数,也描述了容器需要使用的存储卷挂载的情况。YAML文件中各个字段的具体含义,可以查看[Kubernetes Job API](http://kubernetes.io/docs/api-reference/batch/v1/definitions/#_v1_job)。例如,本次训练的YAML文件可以写成: + +```yaml +apiVersion: batch/v1 +kind: Job +metadata: + name: paddle-cluster-job +spec: + parallelism: 3 + completions: 3 + template: + metadata: + name: paddle-cluster-job + spec: + volumes: + - name: jobpath + hostPath: + path: /home/work/mfs + containers: + - name: trainer + image: [YOUR_REPO]/paddle:mypaddle + command: ["bin/bash", "-c", "/root/start.sh"] + env: + - name: JOB_NAME + value: paddle-cluster-job + - name: JOB_PATH + value: /home/jobpath + - name: JOB_NAMESPACE + value: default + - name: TRAIN_CONFIG_DIR + value: recommendation + - name: CONF_PADDLE_NIC + value: eth0 + - name: CONF_PADDLE_PORT + value: "7164" + - name: CONF_PADDLE_PORTS_NUM + value: "2" + - name: CONF_PADDLE_PORTS_NUM_SPARSE + value: "2" + - name: CONF_PADDLE_GRADIENT_NUM + value: "3" + volumeMounts: + - name: jobpath + mountPath: /home/jobpath + restartPolicy: Never +``` + +文件中,`metadata`下的`name`表示这个job的名字。`parallelism,completions`字段表示这个job会同时开启3个PaddlePaddle节点,成功训练且退出的pod数目为3时,这个job才算成功结束。然后申明一个存储卷`jobpath`,代表宿主机目录`/home/work/mfs`,在对容器的描述`containers`字段中,将此目录挂载为容器的`/home/jobpath`目录,这样容器的`/home/jobpath`目录就成为了共享存储,放在这个目录里的文件其实是保存到了MFS上。 + +`env`字段表示容器的环境变量,我们将`paddle`运行的一些参数通过这种方式传递到容器内。 + +环境变量 | 说明 +--- | --- +JOB_PATH | 共享存储挂在的路径 +JOB_NAME | Job的名字 +TRAIN_CONFIG_DIR | 本次训练文件所在目录,与JOB_PATH,JOB_NAME组合可以找到本次训练需要的文件路径 +CONF_PADDLE_NIC | `paddle pserver`进程需要的`--nics`参数,即网卡名 +CONF_PADDLE_PORT | `paddle paserver`的`--port`参数 +CONF_PADDLE_PORTS_NUM | 稠密更新的端口数量,即`--ports_num`参数 +CONF_PADDLE_PORTS_NUM_SPARSE | 稀疏更新的端口数量,即`--ports_num_for_sparse`参数 +CONF_PADDLE_GRADIENT_NUM | 训练节点数量,即`--num_gradient_servers参数` + +这些参数的具体描述,读者可以查看[这里](http://www.paddlepaddle.org/doc/ui/cmd_argument/detail_introduction.html#parameter-server-and-distributed-communication)。 + +编写完YAML文件后,可以使用Kubernetes的命令行工具创建job。 + +```bash +kubectl create -f job.yaml +``` + +创建成功后,Kubernetes就会创建3个pod作为PaddlePaddle节点然后拉取镜像,启动容器开始训练。 + + +### 查看输出 + +在训练过程中,可以在共享存储上查看输出的日志和模型,例如output目录下就存放了输出结果。注意node_0,node_1,node_2这几个目录表示PaddlePaddle节点与trainer_id,并不是Kubernetes中的node概念。 + +```bash +[root@paddle-kubernetes-node0 output]# tree -d +. +├── node_0 +│   ├── server.log +│   └── train.log +├── node_1 +│   ├── server.log +│   └── train.log +├── node_2 +...... +├── pass-00002 +│   ├── done +│   ├── ___embedding_0__.w0 +│   ├── ___embedding_1__.w0 +...... +``` + +我们可以通过日志查看容器训练的情况,例如: + +```bash +[root@paddle-kubernetes-node0 node_0]# cat train.log +I1116 09:10:17.123121 50 Util.cpp:155] commandline: + /usr/local/bin/../opt/paddle/bin/paddle_trainer + --nics=eth0 --port=7164 + --ports_num=2 --comment=paddle_process_by_paddle + --pservers=192.168.129.66,192.168.223.143,192.168.129.71 + --ports_num_for_sparse=2 --config=./trainer_config.py + --trainer_count=4 --num_passes=10 --use_gpu=0 + --log_period=50 --dot_period=10 --saving_period=1 + --local=0 --trainer_id=0 + --save_dir=/home/jobpath/paddle-cluster-job/output +I1116 09:10:17.123440 50 Util.cpp:130] Calling runInitFunctions +I1116 09:10:17.123764 50 Util.cpp:143] Call runInitFunctions done. +[WARNING 2016-11-16 09:10:17,227 default_decorators.py:40] please use keyword arguments in paddle config. +[INFO 2016-11-16 09:10:17,239 networks.py:1282] The input order is [movie_id, title, genres, user_id, gender, age, occupation, rating] +[INFO 2016-11-16 09:10:17,239 networks.py:1289] The output order is [__square_error_cost_0__] +I1116 09:10:17.392917 50 Trainer.cpp:170] trainer mode: Normal +I1116 09:10:17.613910 50 PyDataProvider2.cpp:257] loading dataprovider dataprovider::process +I1116 09:10:17.680917 50 PyDataProvider2.cpp:257] loading dataprovider dataprovider::process +I1116 09:10:17.681543 50 GradientMachine.cpp:134] Initing parameters.. +I1116 09:10:18.012390 50 GradientMachine.cpp:141] Init parameters done. +I1116 09:10:18.018641 50 ParameterClient2.cpp:122] pserver 0 192.168.129.66:7164 +I1116 09:10:18.018950 50 ParameterClient2.cpp:122] pserver 1 192.168.129.66:7165 +I1116 09:10:18.019069 50 ParameterClient2.cpp:122] pserver 2 192.168.223.143:7164 +I1116 09:10:18.019492 50 ParameterClient2.cpp:122] pserver 3 192.168.223.143:7165 +I1116 09:10:18.019716 50 ParameterClient2.cpp:122] pserver 4 192.168.129.71:7164 +I1116 09:10:18.019836 50 ParameterClient2.cpp:122] pserver 5 192.168.129.71:7165 +``` + + +## 一些细节的补充 + +### 使用环境变量 + +使用容器方式运行训练任务的Kubernetes Job,通常会使用环境变量配置Job的配置信息`start_paddle.py`提供了一个启动脚本,将环境变量转换成paddle的命令行参数: +``` +API = "/api/v1/namespaces/" +JOBSELECTOR = "labelSelector=job-name=" +JOB_PATH = os.getenv("JOB_PATH") + "/" + os.getenv("JOB_NAME") +JOB_PATH_OUTPUT = JOB_PATH + "/output" +JOBNAME = os.getenv("JOB_NAME") +NAMESPACE = os.getenv("JOB_NAMESPACE") +PADDLE_NIC = os.getenv("CONF_PADDLE_NIC") +PADDLE_PORT = os.getenv("CONF_PADDLE_PORT") +PADDLE_PORTS_NUM = os.getenv("CONF_PADDLE_PORTS_NUM") +PADDLE_PORTS_NUM_SPARSE = os.getenv("CONF_PADDLE_PORTS_NUM_SPARSE") +PADDLE_SERVER_NUM = os.getenv("CONF_PADDLE_GRADIENT_NUM") +``` + +### Pod间通信 +`start_paddle.py`脚本开始时,会先进行参数的初始化与解析。 + +```python +parser = argparse.ArgumentParser(prog="start_paddle.py", + description='simple tool for k8s') + args, train_args_list = parser.parse_known_args() + train_args = refine_unknown_args(train_args_list) + train_args_dict = dict(zip(train_args[:-1:2], train_args[1::2])) + podlist = getPodList() +``` + +然后通过函数`getPodList()`访问Kubernetes的接口来查询此job对应的所有pod信息。当所有pod都处于running状态(容器运行都运行)时,再通过函数`getIdMap(podlist)`获取trainer_id。 + +```python + podlist = getPodList() + # need to wait until all pods are running + while not isPodAllRunning(podlist): + time.sleep(10) + podlist = getPodList() + idMap = getIdMap(podlist) +``` +* *注意*: `getPodList()`会获取当前namespace下的所有pod,如果已经有pod运行,可能会导致出错。这种集群节点管理方式会在将来使用[statfulsets](https://kubernetes.io/docs/concepts/abstractions/controllers/statefulsets/)代替。 + +在函数`getIdMap(podlist)`内部,我们通过读取`podlist`中每个pod的IP地址,将IP排序生成的序号作为trainer_id。 + +```python +def getIdMap(podlist): + ''' + generate tainer_id by ip + ''' + ips = [] + for pod in podlist["items"]: + ips.append(pod["status"]["podIP"]) + ips.sort() + idMap = {} + for i in range(len(ips)): + idMap[ips[i]] = i + return idMap +``` + +在得到`idMap`后,通过函数`startPaddle(idMap, train_args_dict)`构造`paddle pserver`与`paddle train`的启动参数并执行进程。 + +### 启动任务 + +在函数`startPaddle`中,最主要的工作就是解析出`paddle pserver`与`paddle train`的启动参数。例如`paddle train`参数的解析,解析环境变量得到`PADDLE_NIC`,`PADDLE_PORT`,`PADDLE_PORTS_NUM`等参数,然后通过自身的IP地址在`idMap`中获取`trainerId`。 + +```python + program = 'paddle train' + args = " --nics=" + PADDLE_NIC + args += " --port=" + str(PADDLE_PORT) + args += " --ports_num=" + str(PADDLE_PORTS_NUM) + args += " --comment=" + "paddle_process_by_paddle" + ip_string = "" + for ip in idMap.keys(): + ip_string += (ip + ",") + ip_string = ip_string.rstrip(",") + args += " --pservers=" + ip_string + args_ext = "" + for key, value in train_args_dict.items(): + args_ext += (' --' + key + '=' + value) + localIP = socket.gethostbyname(socket.gethostname()) + trainerId = idMap[localIP] + args += " " + args_ext + " --trainer_id=" + \ + str(trainerId) + " --save_dir=" + JOB_PATH_OUTPUT +``` diff --git a/doc/howto/usage/cluster/k8s_en.md b/doc/howto/usage/cluster/k8s_en.md new file mode 100644 index 0000000000..0c3ab05b70 --- /dev/null +++ b/doc/howto/usage/cluster/k8s_en.md @@ -0,0 +1,201 @@ +# Paddle On Kubernetes + +>In this article, we will introduce how to run Paddle training job on single CPU machine using Kubernetes. In next article, we will introduce how to run Paddle training job on distributed cluster. + +## Build Docker Image + +In distributed Kubernetes cluster, we will use Ceph or other shared storage system for storing training related data so that all processes in Paddle training can retrieve data from Ceph. In this example, we will only demo training job on single machine. In order to simplify the requirement of the environment, we will directly put training data into Paddle's Docker Image, so we need to create a Paddle Docker image that already includes the training data. + +Paddle's [Quick Start Tutorial](http://www.paddlepaddle.org/doc/demo/quick_start/index_en.html) introduces how to download and train data by using script from Paddle's source code. +And `paddledev/paddle:cpu-demo-latest` image has the Paddle source code and demo. (Caution: Default Paddle image `paddledev/paddle:cpu-latest` doesn't include the source code, Paddle's different versions of image can be referred here: [Docker installation guide](http://www.paddlepaddle.org/doc/build/docker_install.html)), so we run this container and download the training data, and then commit the whole container to be a new Docker image. + +### Run Docker Container + +``` +$ docker run --name quick_start_data -it paddledev/paddle:cpu-demo-latest +``` + +### Download Training Data + +Getting into `/root/paddle/demo/quick_start/data` Directory,using `get_data.sh` to download training data. +Then getting into `/root/paddle/demo/quick_start` Directory, using `preprocess.sh` to pre-process training data. + +``` +$ root@fbd1f2bb71f4:~/paddle/demo/quick_start/data# ./get_data.sh + +Downloading Amazon Electronics reviews data... +--2016-10-31 01:33:43-- http://snap.stanford.edu/data/amazon/productGraph/categoryFiles/reviews_Electronics_5.json.gz +Resolving snap.stanford.edu (snap.stanford.edu)... 171.64.75.80 +Connecting to snap.stanford.edu (snap.stanford.edu)|171.64.75.80|:80... connected. +HTTP request sent, awaiting response... 200 OK +Length: 495854086 (473M) [application/x-gzip] +Saving to: 'reviews_Electronics_5.json.gz' + + 10% [=======> ] 874,279 64.7KB/s eta 2h 13m + +``` + +### Modify Startup Script + +After downloading the data,modify `/root/paddle/demo/quick_start/train.sh` file contents are as follows (one more cd cmd): +``` +set -e +cd /root/paddle/demo/quick_start +cfg=trainer_config.lr.py +#cfg=trainer_config.emb.py +#cfg=trainer_config.cnn.py +#cfg=trainer_config.lstm.py +#cfg=trainer_config.bidi-lstm.py +#cfg=trainer_config.db-lstm.py +paddle train \ + --config=$cfg \ + --save_dir=./output \ + --trainer_count=4 \ + --log_period=20 \ + --num_passes=15 \ + --use_gpu=false \ + --show_parameter_stats_period=100 \ + --test_all_data_in_one_period=1 \ + 2>&1 | tee 'train.log' +``` + +### Commit Docker Image + +``` +$ docker commit quick_start_data mypaddle/paddle:quickstart +``` + +## Use Kubernetes For Training + +>We will use Kubernetes job for training process, following steps shows how to do the training with Kubernetes. + +### Create Yaml Files + +The output result in container will be demolished when job finished (container stopped running), so we need to mount the volume out to the local disk when creating the container to store the training result. Using our previously created image, we can create a [Kubernetes Job](http://kubernetes.io/docs/user-guide/jobs/#what-is-a-job), the yaml contents are as follows: + +``` +apiVersion: batch/v1 +kind: Job +metadata: + name: quickstart +spec: + parallelism: 1 + completions: 1 + template: + metadata: + name: quickstart + spec: + volumes: + - name: output + hostPath: + path: /home/work/paddle_output + containers: + - name: pi + image: mypaddle/paddle:quickstart + command: ["bin/bash", "-c", "/root/paddle/demo/quick_start/train.sh"] + volumeMounts: + - name: output + mountPath: /root/paddle/demo/quick_start/output + restartPolicy: Never +``` + +### Start Paddle Job + +Using the above yaml file to start the Kubernetes job. + +``` +$ kubectl create -f paddle.yaml +``` + +Get the detailed status of the job: + +``` +$ kubectl get job +NAME DESIRED SUCCESSFUL AGE +quickstart 1 0 58s + +$ kubectl describe job quickstart +Name: quickstart +Namespace: default +Image(s): registry.baidu.com/public/paddle:cpu-demo-latest +Selector: controller-uid=f120da72-9f18-11e6-b363-448a5b355b84 +Parallelism: 1 +Completions: 1 +Start Time: Mon, 31 Oct 2016 11:20:16 +0800 +Labels: controller-uid=f120da72-9f18-11e6-b363-448a5b355b84,job-name=quickstart +Pods Statuses: 0 Running / 1 Succeeded / 0 Failed +Volumes: + output: + Type: HostPath (bare host directory volume) + Path: /home/work/paddle_output +Events: + FirstSeen LastSeen Count From SubobjectPath Type Reason Message + --------- -------- ----- ---- ------------- -------- ------ ------- + 1m 1m 1 {job-controller } Normal SuccessfulCreate Created pod: quickstart-fa0wx +``` + +### Get Training Result + +We can use kubectl command to take a look at the status of related pod. + +``` +$ kubectl describe pod quickstart-fa0wx +Name: quickstart-fa0wx +Namespace: default +Node: paddle-demo-let02/10.206.202.44 +Start Time: Mon, 31 Oct 2016 11:20:17 +0800 +Labels: controller-uid=f120da72-9f18-11e6-b363-448a5b355b84,job-name=quickstart +Status: Succeeded +IP: 10.0.0.9 +Controllers: Job/quickstart +Containers: + quickstart: + Container ID: docker://b8561f5c79193550d64fa47418a9e67ebdd71546186e840f88de5026b8097465 + Image: registry.baidu.com/public/paddle:cpu-demo-latest + Image ID: docker://18e457ce3d362ff5f3febf8e7f85ffec852f70f3b629add10aed84f930a68750 + Port: + Command: + bin/bash + -c + /root/paddle/demo/quick_start/train.sh + QoS Tier: + cpu: BestEffort + memory: BestEffort + State: Terminated + Reason: Completed + Exit Code: 0 + Started: Mon, 31 Oct 2016 11:20:20 +0800 + Finished: Mon, 31 Oct 2016 11:21:46 +0800 + Ready: False + Restart Count: 0 + Environment Variables: +Conditions: + Type Status + Ready False +Volumes: + output: + Type: HostPath (bare host directory volume) + Path: /home/work/paddle_output +``` + +We can also ssh to Kubernetes node to take a look at the training result. + +``` +[root@paddle-demo-let02 paddle_output]# ll +total 60 +drwxr-xr-x 2 root root 4096 Oct 31 11:20 pass-00000 +drwxr-xr-x 2 root root 4096 Oct 31 11:20 pass-00001 +drwxr-xr-x 2 root root 4096 Oct 31 11:21 pass-00002 +drwxr-xr-x 2 root root 4096 Oct 31 11:21 pass-00003 +drwxr-xr-x 2 root root 4096 Oct 31 11:21 pass-00004 +drwxr-xr-x 2 root root 4096 Oct 31 11:21 pass-00005 +drwxr-xr-x 2 root root 4096 Oct 31 11:21 pass-00006 +drwxr-xr-x 2 root root 4096 Oct 31 11:21 pass-00007 +drwxr-xr-x 2 root root 4096 Oct 31 11:21 pass-00008 +drwxr-xr-x 2 root root 4096 Oct 31 11:21 pass-00009 +drwxr-xr-x 2 root root 4096 Oct 31 11:21 pass-00010 +drwxr-xr-x 2 root root 4096 Oct 31 11:21 pass-00011 +drwxr-xr-x 2 root root 4096 Oct 31 11:21 pass-00012 +drwxr-xr-x 2 root root 4096 Oct 31 11:21 pass-00013 +drwxr-xr-x 2 root root 4096 Oct 31 11:21 pass-00014 +``` diff --git a/doc/howto/usage/cluster/openmpi_cn.md b/doc/howto/usage/cluster/openmpi_cn.md new file mode 100644 index 0000000000..831cafdc03 --- /dev/null +++ b/doc/howto/usage/cluster/openmpi_cn.md @@ -0,0 +1,41 @@ +# 在OpenMPI集群中提交训练作业 + +## 准备OpenMPI集群 + +执行下面的命令以启动3个节点的OpenMPI集群和一个"head"节点: + +```bash +paddle/scripts/cluster_train_v2/openmpi/docker_cluster +kubectl create -f head.yaml +kubectl create -f mpi-nodes.yaml +``` + +然后可以从head节点ssh无密码登录到OpenMPI的每个节点上。 + +## 启动集群作业 + +您可以按照下面的步骤在OpenMPI集群中提交paddle训练任务: + +```bash +# 获得head和node节点的IP地址 +kubectl get po -o wide +# 将node节点的IP地址保存到machines文件中 +kubectl get po -o wide | grep nodes | awk '{print $6}' > machines +# 拷贝必要的文件到head节点 +scp -i ssh/id_rsa.mpi.pub machines prepare.py train.py start_mpi_train.sh tutorial@[headIP]:~ +# ssh 登录到head节点 +ssh -i ssh/id_rsa.mpi.pub tutorial@[headIP] +# --------------- 以下操作均在head节点中执行 --------------- +# 准备训练数据 +python prepare.py +# 拷贝训练程序和字典文件到每台MPI节点 +cat machines | xargs -i scp word_dict.pickle train.py start_mpi_train.sh machines {}:/home/tutorial +# 创建日志目录 +mpirun -hostfile machines -n 3 mkdir /home/tutorial/logs +# 拷贝训练数据到各自的节点 +scp train.txt-00000 test.txt-00000 [node1IP]:/home/tutorial +scp train.txt-00001 test.txt-00001 [node2IP]:/home/tutorial +scp train.txt-00002 test.txt-00002 [node3IP]:/home/tutorial +# 启动训练任务 +mpirun -hostfile machines -n 3 /home/tutorial/start_mpi_train.sh +``` diff --git a/doc/howto/usage/cluster/openmpi_en.md b/doc/howto/usage/cluster/openmpi_en.md new file mode 100644 index 0000000000..09af46e25e --- /dev/null +++ b/doc/howto/usage/cluster/openmpi_en.md @@ -0,0 +1,41 @@ +# Cluster Training Using OpenMPI + +## Prepare an OpenMPI cluster + +Run the following command to start a 3-node MPI cluster and one "head" node. + +```bash +cd paddle/scripts/cluster_train_v2/openmpi/docker_cluster +kubectl create -f head.yaml +kubectl create -f mpi-nodes.yaml +``` + +Then you can log in to every OpenMPI node using ssh without input any passwords. + +## Launching Cluster Job + +Follow the steps to launch a PaddlePaddle training job in OpenMPI cluster:\ + +```bash +# find out node IP addresses +kubectl get po -o wide +# generate a "machines" file containing node IP addresses +kubectl get po -o wide | grep nodes | awk '{print $6}' > machines +# copy necessary files onto "head" node +scp -i ssh/id_rsa.mpi.pub machines prepare.py train.py start_mpi_train.sh tutorial@[headIP]:~ +# login to head node using ssh +ssh -i ssh/id_rsa.mpi.pub tutorial@[headIP] +# --------------- in head node --------------- +# prepare training data +python prepare.py +# copy training data and dict file to MPI nodes +cat machines | xargs -i scp word_dict.pickle train.py start_mpi_train.sh machines {}:/home/tutorial +# creat a directory for storing log files +mpirun -hostfile machines -n 3 mkdir /home/tutorial/logs +# copy training data to every node +scp train.txt-00000 test.txt-00000 [node1IP]:/home/tutorial +scp train.txt-00001 test.txt-00001 [node2IP]:/home/tutorial +scp train.txt-00002 test.txt-00002 [node3IP]:/home/tutorial +# start the job +mpirun -hostfile machines -n 3 /home/tutorial/start_mpi_train.sh +``` diff --git a/doc/howto/usage/cluster/src/Dockerfile b/doc/howto/usage/cluster/src/Dockerfile new file mode 100644 index 0000000000..3a73606c61 --- /dev/null +++ b/doc/howto/usage/cluster/src/Dockerfile @@ -0,0 +1,7 @@ +FROM paddledev/paddle:cpu-latest + +MAINTAINER zjsxzong89@gmail.com + +COPY start.sh /root/ +COPY start_paddle.py /root/ +CMD ["bash"," -c","/root/start.sh"] \ No newline at end of file diff --git a/doc/howto/usage/cluster/src/add_security_group.png b/doc/howto/usage/cluster/src/add_security_group.png new file mode 100644 index 0000000000000000000000000000000000000000..bd34f46c9b0ada7027fd53e553e7d033255d25fc GIT binary patch literal 118948 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
h+n|c$CYJ=vXBNGSD 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 literal 0 HcmV?d00001 diff --git a/doc/howto/usage/cluster/src/efs_mount.png b/doc/howto/usage/cluster/src/efs_mount.png new file mode 100644 index 0000000000000000000000000000000000000000..0f9e3cab98445707e5e9baa18ddabe15cdf04576 GIT binary patch literal 230609 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

ch*lh^Fd-L{wtn70(4-NC^j=dZ7rY!4#Bo|jWf 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¬$-e6qDN=S#XA&5nD8IEX(!tPT_5 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
;MD0U=d&B=S0 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

!jBntY!@|9=-ehy34udNY=eRXM%-L9HXi|c zSzoNV7ctvHxXFZrGrX#8gyk`N_{PqXO-{pUmd}uzPit(|N93)q(XIg>FX90*YjgJE zVFTejD5`o}U}MoIFHpZ=oTFlCZXVXhLL;&38cWV`(q4Lm=2sqm+CUQhV)#o)mPu5H zvVPE~7;-EGVup;hk7aVjO+eTZ8a+j-2U@a=MKgTaM4!o%rznCjw|`}*4rg9{!D36d z?F}T#pZbbJie9GaQ$FrWB+c!Okg*|L`R33+=!@IATLVeLr%0_oY7Ae}#Jia4GB1m_qZYK4E3RRy9W- zHpa|(WM_Sc(=L$=Bt3O6=wIyB7s?o;ZE{4|IS&IhRo{TQ&l6E)u|PR59CW2MYh|A1 zYscU@`l|nE)9QWyMCWS;z;!m3E$lrDGgu#a7~Bcg(GXkbKoSEZmGU|kkl7u+*z#|0 zSPOCM)Bcfb?~9?Joda4kGkMIykF4uTeMcW~_kQBgY_ffTojlk+(>J{#PjhJ*ePi<( z+9P$cxXYwACq^A%ab`vt+eoY#+6`V6*zQS$k_uM z(ZJCG=G+$o12sP&_-&Ql3u)IgH%vDBl6>DAiit(@8+}7_BBd?g{lZp7`&lsA!Wn%e zh{nmJ(2dr@pM7Jinzn$riE<2f+c4_o`#NN<-ujTc6&kpFqYnh*{{y)fM8KngY~TO@ N002ovPDHLkV1na?K}Y}q literal 0 HcmV?d00001 diff --git a/doc/howto/usage/cluster/src/k8s_data/Dockerfile b/doc/howto/usage/cluster/src/k8s_data/Dockerfile new file mode 100644 index 0000000000..6d3a12ae39 --- /dev/null +++ b/doc/howto/usage/cluster/src/k8s_data/Dockerfile @@ -0,0 +1,7 @@ +FROM alpine + +RUN apk update && apk upgrade && apk add coreutils +ADD quick_start /quick_start +ADD get_data.sh /bin/ +RUN chmod +x /bin/get_data.sh +ENTRYPOINT ["/bin/get_data.sh"] diff --git a/doc/howto/usage/cluster/src/k8s_data/README.md b/doc/howto/usage/cluster/src/k8s_data/README.md new file mode 100644 index 0000000000..83cef7affd --- /dev/null +++ b/doc/howto/usage/cluster/src/k8s_data/README.md @@ -0,0 +1,6 @@ +To build PaddlePaddle data preparation image in tutorial [Distributed PaddlePaddle Training on AWS with Kubernetes](../../k8s_aws_en.md), run following commands: + +``` +cp -r ../../../../../../demo/quick_start . +docker build . -t prepare-data-image-name +``` diff --git a/doc/howto/usage/cluster/src/k8s_data/get_data.sh b/doc/howto/usage/cluster/src/k8s_data/get_data.sh new file mode 100755 index 0000000000..d187ba5ac8 --- /dev/null +++ b/doc/howto/usage/cluster/src/k8s_data/get_data.sh @@ -0,0 +1,26 @@ +#!/bin/sh + +out_dir=$OUT_DIR +split_count=$SPLIT_COUNT + +set -e + +mkdir -p $out_dir +cp -r /quick_start $out_dir/ + +mkdir -p $out_dir/0/data +cd $out_dir/0/data +wget http://paddlepaddle.bj.bcebos.com/demo/quick_start_preprocessed_data/preprocessed_data.tar.gz +tar zxvf preprocessed_data.tar.gz +rm preprocessed_data.tar.gz + +split -d --number=l/$split_count -a 5 train.txt train. +mv train.00000 train.txt + +cd $out_dir +end=$(expr $split_count - 1) +for i in $(seq 1 $end); do + mkdir -p $i/data + cp -r 0/data/* $i/data + mv $i/data/train.`printf %05d $i` $i/data/train.txt +done; diff --git a/doc/howto/usage/cluster/src/k8s_train/Dockerfile b/doc/howto/usage/cluster/src/k8s_train/Dockerfile new file mode 100644 index 0000000000..c0fca1f9a9 --- /dev/null +++ b/doc/howto/usage/cluster/src/k8s_train/Dockerfile @@ -0,0 +1,6 @@ +FROM paddledev/paddle:cpu-latest + +COPY start.sh /root/ +COPY start_paddle.py /root/ +RUN chmod +x /root/start.sh +CMD ["bash"," -c","/root/start.sh"] diff --git a/doc/howto/usage/cluster/src/k8s_train/README.md b/doc/howto/usage/cluster/src/k8s_train/README.md new file mode 100644 index 0000000000..96bf65497f --- /dev/null +++ b/doc/howto/usage/cluster/src/k8s_train/README.md @@ -0,0 +1,5 @@ +To build PaddlePaddle training image in tutorial [Distributed PaddlePaddle Training on AWS with Kubernetes](../../k8s_aws_en.md), run following command: + +``` +docker build . -t train-image-name +``` diff --git a/doc/howto/usage/cluster/src/k8s_train/start.sh b/doc/howto/usage/cluster/src/k8s_train/start.sh new file mode 100755 index 0000000000..12dfe1e638 --- /dev/null +++ b/doc/howto/usage/cluster/src/k8s_train/start.sh @@ -0,0 +1,19 @@ +#!/bin/sh + +set -eu + +jobconfig=${JOB_PATH}"/"${JOB_NAME}"/"${TRAIN_CONFIG_DIR} +cd /root +cp -rf $jobconfig/* . + +python /root/start_paddle.py \ + --dot_period=10 \ + --ports_num=$CONF_PADDLE_PORTS_NUM \ + --ports_num_for_sparse=$CONF_PADDLE_PORTS_NUM_SPARSE \ + --log_period=50 \ + --num_passes=10 \ + --trainer_count=$TRAINER_COUNT \ + --saving_period=1 \ + --local=0 \ + --config=trainer_config.lr.py \ + --use_gpu=0 diff --git a/doc/howto/usage/cluster/src/k8s_train/start_paddle.py b/doc/howto/usage/cluster/src/k8s_train/start_paddle.py new file mode 100755 index 0000000000..935c12bb67 --- /dev/null +++ b/doc/howto/usage/cluster/src/k8s_train/start_paddle.py @@ -0,0 +1,170 @@ +#!/usr/bin/python +# 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. + +import requests +import time +import socket +import os +import argparse + +# configuration for cluster +API = "/api/v1/namespaces/" +JOBSELECTOR = "labelSelector=job-name=" +JOB_PATH = os.getenv("JOB_PATH") + "/" + os.getenv("JOB_NAME") +JOB_PATH_OUTPUT = JOB_PATH + "/output" +JOBNAME = os.getenv("JOB_NAME") +NAMESPACE = os.getenv("JOB_NAMESPACE") +PADDLE_NIC = os.getenv("CONF_PADDLE_NIC") +PADDLE_PORT = os.getenv("CONF_PADDLE_PORT") +PADDLE_PORTS_NUM = os.getenv("CONF_PADDLE_PORTS_NUM") +PADDLE_PORTS_NUM_SPARSE = os.getenv("CONF_PADDLE_PORTS_NUM_SPARSE") +PADDLE_SERVER_NUM = os.getenv("CONF_PADDLE_GRADIENT_NUM") + +tokenpath = '/var/run/secrets/kubernetes.io/serviceaccount/token' + + +def refine_unknown_args(cmd_args): + ''' + refine unknown parameters to handle some special parameters + ''' + new_args = [] + for arg in cmd_args: + if arg.startswith("--") and arg.find("=") != -1: + equal_pos = arg.find("=") # find first = pos + arglist = list(arg) + arglist[equal_pos] = " " + arg = "".join(arglist) + arg = arg.lstrip("-") + new_args += arg.split(" ") + elif arg.startswith("--") and arg.find("=") == -1: + arg = arg.lstrip("-") + new_args.append(arg) + else: + new_args.append(arg) + return new_args + + +def isPodAllRunning(podlist): + ''' + check all pod is running + ''' + require = len(podlist["items"]) + running = 0 + for pod in podlist["items"]: + if pod["status"]["phase"] == "Running": + running += 1 + print "waiting for pods running, require:", require, "running:", running + if require == running: + return True + return False + + +def getPodList(): + ''' + get all container status of the job + ''' + apiserver = "https://" + \ + os.getenv("KUBERNETES_SERVICE_HOST") + ":" + \ + os.getenv("KUBERNETES_SERVICE_PORT_HTTPS") + + pod = API + NAMESPACE + "/pods?" + job = JOBNAME + if os.path.isfile(tokenpath): + tokenfile = open(tokenpath, mode='r') + token = tokenfile.read() + Bearer = "Bearer " + token + headers = {"Authorization": Bearer} + return requests.get(apiserver + pod + JOBSELECTOR + job, + headers=headers, + verify=False).json() + else: + return requests.get(apiserver + pod + JOBSELECTOR + job, + verify=False).json() + + +def getIdMap(podlist): + ''' + generate tainer_id by ip + ''' + ips = [] + for pod in podlist["items"]: + ips.append(pod["status"]["podIP"]) + ips.sort() + idMap = {} + for i in range(len(ips)): + idMap[ips[i]] = i + return idMap + + +def startPaddle(idMap={}, train_args_dict=None): + ''' + start paddle pserver and trainer + ''' + program = 'paddle train' + args = " --nics=" + PADDLE_NIC + args += " --port=" + str(PADDLE_PORT) + args += " --ports_num=" + str(PADDLE_PORTS_NUM) + args += " --comment=" + "paddle_process_by_paddle" + ip_string = "" + for ip in idMap.keys(): + ip_string += (ip + ",") + ip_string = ip_string.rstrip(",") + args += " --pservers=" + ip_string + args_ext = "" + for key, value in train_args_dict.items(): + args_ext += (' --' + key + '=' + value) + localIP = socket.gethostbyname(socket.gethostname()) + trainerId = idMap[localIP] + args += " " + args_ext + " --trainer_id=" + \ + str(trainerId) + " --save_dir=" + JOB_PATH_OUTPUT + logDir = JOB_PATH_OUTPUT + "/node_" + str(trainerId) + if not os.path.exists(JOB_PATH_OUTPUT): + os.makedirs(JOB_PATH_OUTPUT) + if not os.path.exists(logDir): + os.mkdir(logDir) + copyCommand = 'cp -rf ' + JOB_PATH + \ + "/" + str(trainerId) + "/data/*" + " ./data/" + os.system(copyCommand) + startPserver = 'nohup paddle pserver' + \ + " --port=" + str(PADDLE_PORT) + \ + " --ports_num=" + str(PADDLE_PORTS_NUM) + \ + " --ports_num_for_sparse=" + str(PADDLE_PORTS_NUM_SPARSE) + \ + " --nics=" + PADDLE_NIC + \ + " --comment=" + "paddle_process_by_paddle" + \ + " --num_gradient_servers=" + str(PADDLE_SERVER_NUM) +\ + " > " + logDir + "/server.log 2>&1 &" + print startPserver + os.system(startPserver) + # wait until pservers completely start + time.sleep(20) + startTrainer = program + args + " 2>&1 | tee " + \ + logDir + "/train.log" + print startTrainer + os.system(startTrainer) + + +if __name__ == '__main__': + parser = argparse.ArgumentParser( + prog="start_paddle.py", description='simple tool for k8s') + args, train_args_list = parser.parse_known_args() + train_args = refine_unknown_args(train_args_list) + train_args_dict = dict(zip(train_args[:-1:2], train_args[1::2])) + podlist = getPodList() + # need to wait until all pods are running + while not isPodAllRunning(podlist): + time.sleep(20) + podlist = getPodList() + idMap = getIdMap(podlist) + startPaddle(idMap, train_args_dict) diff --git a/doc/howto/usage/cluster/src/managed_policy.png b/doc/howto/usage/cluster/src/managed_policy.png new file mode 100644 index 0000000000000000000000000000000000000000..c7ecda555b81d7750e9292a9ab72d2f517f76a2a GIT binary patch literal 247321 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

*j9=5&^KeazLa(8G(AWOc& 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

f~#`&?YC< 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\xJ`@_XHst`L=vVQ^ZMhA4vOZMjd*|7Q44^NQ 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 aRF+60qV`#@@0$zYkJ>{mrE&%9=l=tnkqu@5 literal 0 HcmV?d00001 diff --git a/doc/howto/usage/cluster/src/route53_create_recordset.png b/doc/howto/usage/cluster/src/route53_create_recordset.png new file mode 100644 index 0000000000000000000000000000000000000000..34e476c7beac30fcdde13fccc4cc8d08b4be3d35 GIT binary patch literal 35749 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%0AAp~;o;gSm3%-qLSW%IcN8x>C>( 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�$^SdG{~-ClQ2Qh5|1WBPMEy6(zhwIlYJWuii{xKGw*R2^hwfhj{w3Rg zQ2RsoFOvV8I{(7}{8$X6@mmqy18K6Y93o z=fCWS=HFPW$vXa_NuGQQ6_}@{+^YEilZ*g%sOU zZy|XhP=&XJ!`vg_lz^>j-=%N?O77Qkit4wU6t-qJj62-DcEp@8@N|((dT-uicHjTN z>DTelV0JAayWQRa`9gbjlXazVU(UDVzWS2B6q>NB=L*B{gQ`$nX*@pm3yGgR&1XYk zt+fgnRR1MG#u~Jhm+67BO1{AmSLKEg7T4Dxo^}kQ^;&or7>l8{zSqa;L*R@?fJU)y zy>H^;1RsiY0qnrGVo-#M8=HP92$JjpD26~e|HqY(k*hc z+!^_Wv+m-+^g4o=ha^3(b3-8EF$>bi~nJESPqT>Ot!fOp&l zhRqA1@#$NjPt&I^iw#e$mCsgDz}G!pj6Sa4>=s>`TEI(@(-kLo#UWhLP?Q}*ymi}7=jDU@k^Ar* zP7kgKa318|?QTWOs-t8JZw%k{;mEIy8*|$)(#WHi$57)Fm*Q^efPU+2c*i~MOaFUT zoHlW44?DsEisy35v)_p0t{}wsg*J?jv%GSw?yrOsjFP#9m0Kny7M^VVi9#>ndp0gf zDWGkPJp!)vQg%x8);X@Xa69;I&hXf$w%k;G(R;tTRXJX^`McfI#eBr|$SWd;$dBNn zcAMV1a{aRO4`wQuCxSb zPRfGY_T{rmX}GYHr;>^$Rz*1f7SvuR%A!!g;$R!(^yDb=IDDAg*WkaP{5f+qG&LrhD+=d&v;=VM`E5q*>_KlxCS#JSH; zGHWEMS#OQ_DyV1^!>j}fByTu3T8Wcy3NszKVjcF*@)y#KiBk?j@7caq`!4t;rmPVB z4I)U^SIJ9&T&uhW$sGF@xEb+!^3x|U179I}%-!@C^{)-h@p9hgS%Ci@QcteV>oyGQ ziYeUqBmM`Z1M5t&+n3uS@~Pl2eU2|(gYX9g3Ctat%Ovfh+96ie3LH6I#pBzak87PR zeA%SIqfE5#ve*Bg#ecguw{#ag$^2_hKbZa6|G4%>?Tw7T^-L3Q z|E&6Ry|&!<_P>kUCFIgyZ7_QCZ_DF3%Gn!!Cn?uVmiln~fKhkuYGt{E{u^e3_byEi zHJa1;cVB0n#&+%3Q&Usr-xv2kn0|-j{N~d2bJgJfsNb(Se-oml_@A0Am+A_Qah232 zgH*03_0Q{?XQ`xeReu2tePL;2F`sGYaU(cJfyLCicR9p1wc=JWs9=#+CK5qyhpXB5~^>#`1auj&B?V@$*nSx-^vc)s;eTdN#Z4aqCale600K`}KbLh*2~7Y^(fD!z literal 0 HcmV?d00001 diff --git a/doc/howto/usage/cluster/src/route53_create_zone.png b/doc/howto/usage/cluster/src/route53_create_zone.png new file mode 100644 index 0000000000000000000000000000000000000000..25b7ddb831c5cba97f4b2edddd27da3234d621af GIT binary patch literal 52035 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

qcb8$LP68-?ilz>!CfWMks_S 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 literal 0 HcmV?d00001 diff --git a/doc/howto/usage/cluster/src/worker_security_group.png b/doc/howto/usage/cluster/src/worker_security_group.png new file mode 100644 index 0000000000000000000000000000000000000000..57eb0265a34ad4223b69600d2a3dd355482e0bf5 GIT binary patch literal 89208 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 aXPTGak*)X6Zt{}>U-xtk@04lVMf@MKrFu00 literal 0 HcmV?d00001 From 93a2d9c59d46589d3fefaaee09a3003f45fda9e5 Mon Sep 17 00:00:00 2001 From: QI JUN Date: Mon, 18 Dec 2017 11:53:22 +0800 Subject: [PATCH 132/193] add more place test and rename Cudnn to CUDNN (#6621) * add more place_test and rename Cudnn to CUDNN * fix ci --- paddle/operators/math/math_function.cu | 2 +- paddle/platform/device_context.cc | 8 ++++---- paddle/platform/device_context.h | 8 ++++---- paddle/platform/device_context_test.cc | 10 +++++----- paddle/platform/place.h | 8 ++++---- paddle/platform/place_test.cc | 6 ++++++ 6 files changed, 24 insertions(+), 18 deletions(-) diff --git a/paddle/operators/math/math_function.cu b/paddle/operators/math/math_function.cu index e33070c40f..7852bb53a9 100644 --- a/paddle/operators/math/math_function.cu +++ b/paddle/operators/math/math_function.cu @@ -274,7 +274,7 @@ void set_constant_with_place( } template <> -void set_constant_with_place( +void set_constant_with_place( const platform::DeviceContext& context, framework::Tensor* tensor, float value) { set_constant_with_place(context, tensor, value); diff --git a/paddle/platform/device_context.cc b/paddle/platform/device_context.cc index 1c72b50559..8cdc5f4340 100644 --- a/paddle/platform/device_context.cc +++ b/paddle/platform/device_context.cc @@ -125,21 +125,21 @@ cudnnHandle_t CUDADeviceContext::cudnn_handle() const { return cudnn_handle_; } cudaStream_t CUDADeviceContext::stream() const { return stream_; } -CudnnDeviceContext::CudnnDeviceContext(CudnnPlace place) +CUDNNDeviceContext::CUDNNDeviceContext(CUDNNPlace place) : CUDADeviceContext(place), place_(place) { PADDLE_ENFORCE(dynload::cudnnCreate(&cudnn_handle_)); PADDLE_ENFORCE(dynload::cudnnSetStream(cudnn_handle_, stream())); } -CudnnDeviceContext::~CudnnDeviceContext() { +CUDNNDeviceContext::~CUDNNDeviceContext() { SetDeviceId(place_.device); Wait(); PADDLE_ENFORCE(dynload::cudnnDestroy(cudnn_handle_)); } -Place CudnnDeviceContext::GetPlace() const { return CudnnPlace(); } +Place CUDNNDeviceContext::GetPlace() const { return CUDNNPlace(); } -cudnnHandle_t CudnnDeviceContext::cudnn_handle() const { return cudnn_handle_; } +cudnnHandle_t CUDNNDeviceContext::cudnn_handle() const { return cudnn_handle_; } #endif diff --git a/paddle/platform/device_context.h b/paddle/platform/device_context.h index f67194993d..56813a1d5b 100644 --- a/paddle/platform/device_context.h +++ b/paddle/platform/device_context.h @@ -86,10 +86,10 @@ class CUDADeviceContext : public DeviceContext { cublasHandle_t cublas_handle_; }; -class CudnnDeviceContext : public CUDADeviceContext { +class CUDNNDeviceContext : public CUDADeviceContext { public: - explicit CudnnDeviceContext(CudnnPlace place); - virtual ~CudnnDeviceContext(); + explicit CUDNNDeviceContext(CUDNNPlace place); + virtual ~CUDNNDeviceContext(); /*! \brief Return place in the device context. */ Place GetPlace() const final; @@ -99,7 +99,7 @@ class CudnnDeviceContext : public CUDADeviceContext { private: cudnnHandle_t cudnn_handle_; - CudnnPlace place_; + CUDNNPlace place_; }; #endif diff --git a/paddle/platform/device_context_test.cc b/paddle/platform/device_context_test.cc index be3b2af5af..109c13a881 100644 --- a/paddle/platform/device_context_test.cc +++ b/paddle/platform/device_context_test.cc @@ -47,14 +47,14 @@ TEST(Device, CUDADeviceContext) { } } -TEST(Device, CudnnDeviceContext) { - using paddle::platform::CudnnDeviceContext; - using paddle::platform::CudnnPlace; +TEST(Device, CUDNNDeviceContext) { + using paddle::platform::CUDNNDeviceContext; + using paddle::platform::CUDNNPlace; if (paddle::platform::dynload::HasCUDNN()) { int count = paddle::platform::GetCUDADeviceCount(); for (int i = 0; i < count; ++i) { - CudnnDeviceContext* device_context = - new CudnnDeviceContext(CudnnPlace(i)); + CUDNNDeviceContext* device_context = + new CUDNNDeviceContext(CUDNNPlace(i)); cudnnHandle_t cudnn_handle = device_context->cudnn_handle(); ASSERT_NE(nullptr, cudnn_handle); ASSERT_NE(nullptr, device_context->stream()); diff --git a/paddle/platform/place.h b/paddle/platform/place.h index 4526945792..ca98920d41 100644 --- a/paddle/platform/place.h +++ b/paddle/platform/place.h @@ -51,9 +51,9 @@ struct GPUPlace { int device; }; -struct CudnnPlace : public GPUPlace { - CudnnPlace() : GPUPlace() {} - explicit CudnnPlace(int d) : GPUPlace(d) {} +struct CUDNNPlace : public GPUPlace { + CUDNNPlace() : GPUPlace() {} + explicit CUDNNPlace(int d) : GPUPlace(d) {} }; struct IsGPUPlace : public boost::static_visitor { @@ -72,7 +72,7 @@ struct IsMKLDNNPlace : public boost::static_visitor { // should be less equal than 2^(NUM_PLACE_TYPE_LIMIT_IN_BIT) #define NUM_PLACE_TYPE_LIMIT_IN_BIT 4 -typedef boost::variant Place; +typedef boost::variant Place; // static check number of place types is less equal than // 2^(NUM_PLACE_TYPE_LIMIT_IN_BIT) diff --git a/paddle/platform/place_test.cc b/paddle/platform/place_test.cc index 184af12c23..c536b59ed8 100644 --- a/paddle/platform/place_test.cc +++ b/paddle/platform/place_test.cc @@ -5,16 +5,22 @@ TEST(Place, Equality) { paddle::platform::CPUPlace cpu; paddle::platform::GPUPlace g0(0), g1(1), gg0(0); + paddle::platform::CUDNNPlace d0(0), d1(1), dd0(0); EXPECT_EQ(cpu, cpu); EXPECT_EQ(g0, g0); EXPECT_EQ(g1, g1); EXPECT_EQ(g0, gg0); + EXPECT_EQ(d0, dd0); EXPECT_NE(g0, g1); + EXPECT_NE(d0, d1); EXPECT_TRUE(paddle::platform::places_are_same_class(g0, gg0)); EXPECT_FALSE(paddle::platform::places_are_same_class(g0, cpu)); + + EXPECT_TRUE(paddle::platform::is_gpu_place(d0)); + EXPECT_FALSE(paddle::platform::places_are_same_class(g0, d0)); } TEST(Place, Default) { From 964f01e3e880d4c835489ce5fad8215a964c188d Mon Sep 17 00:00:00 2001 From: qiaolongfei Date: Mon, 18 Dec 2017 11:57:20 +0800 Subject: [PATCH 133/193] fix simple_gru2 doc --- python/paddle/trainer_config_helpers/networks.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/python/paddle/trainer_config_helpers/networks.py b/python/paddle/trainer_config_helpers/networks.py index 9776ae1805..8bfe56d795 100644 --- a/python/paddle/trainer_config_helpers/networks.py +++ b/python/paddle/trainer_config_helpers/networks.py @@ -1119,8 +1119,9 @@ def simple_gru2(input, :param gru_bias_attr: bias parameter attribute of gru layer, False means no bias, None means default bias. :type gru_bias_attr: ParameterAttribute|False|None - :param gru_layer_attr: Extra attribute of the gru layer. - :type gru_layer_attr: ExtraLayerAttribute + :param gru_param_attr: param parameter attribute of gru layer, + None means default param. + :type gru_param_attr: ParameterAttribute|None :return: the gru group. :rtype: LayerOutput """ From 24fda392207e1fd608e66ea376a79f9f9716c3ca Mon Sep 17 00:00:00 2001 From: dzhwinter Date: Mon, 18 Dec 2017 13:01:41 +0800 Subject: [PATCH 134/193] Feature/global context (#6537) * "add DeviceContextPool" * "add devicecontextpool in pybind" * "add comments in python side " * "fix static link error" * "fix CI error" * "add executor.py" * "fix CI error" * "add with gpu macro" * "remove comment out codes" * "add TODO items" * "update init devices" --- paddle/framework/CMakeLists.txt | 3 ++ paddle/framework/ddim_test.cc | 13 +++++ paddle/framework/executor.cc | 33 ++---------- paddle/framework/executor.h | 84 ++++++++++++++++++++++++++++-- paddle/framework/init.cc | 80 ++++++++++++++++++++++++++++ paddle/framework/init.h | 28 ++++++++++ paddle/framework/init_test.cc | 27 ++++++++++ paddle/pybind/CMakeLists.txt | 2 +- paddle/pybind/pybind.cc | 23 ++------ python/paddle/v2/fluid/executor.py | 7 +++ 10 files changed, 248 insertions(+), 52 deletions(-) create mode 100644 paddle/framework/init.cc create mode 100644 paddle/framework/init.h create mode 100644 paddle/framework/init_test.cc diff --git a/paddle/framework/CMakeLists.txt b/paddle/framework/CMakeLists.txt index 4b0eff3adb..206e298eb2 100644 --- a/paddle/framework/CMakeLists.txt +++ b/paddle/framework/CMakeLists.txt @@ -58,3 +58,6 @@ cc_test(var_type_inference_test SRCS var_type_inference_test.cc DEPS op_registry proto_desc) 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 executor place stringpiece) +cc_test(init_test SRCS init_test.cc DEPS init) diff --git a/paddle/framework/ddim_test.cc b/paddle/framework/ddim_test.cc index 756232b1b5..bd5ea09d7d 100644 --- a/paddle/framework/ddim_test.cc +++ b/paddle/framework/ddim_test.cc @@ -1,3 +1,16 @@ +/* Copyright (c) 2016 PaddlePaddle Authors. All Rights Reserve. + + 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 diff --git a/paddle/framework/executor.cc b/paddle/framework/executor.cc index 83aa927c29..a8b8a6f8e8 100644 --- a/paddle/framework/executor.cc +++ b/paddle/framework/executor.cc @@ -33,32 +33,12 @@ namespace framework { const std::string kFeedOpType = "feed"; const std::string kFetchOpType = "fetch"; -Executor::Executor(const std::vector& places) : own_(true) { - PADDLE_ENFORCE_GT(places.size(), 0); - device_contexts_.resize(places.size()); - for (size_t i = 0; i < places.size(); i++) { - if (platform::is_cpu_place(places[i])) { - device_contexts_[i] = new platform::CPUDeviceContext( - boost::get(places[i])); - } else if (platform::is_gpu_place(places[i])) { -#ifdef PADDLE_WITH_CUDA - device_contexts_[i] = new platform::CUDADeviceContext( - boost::get(places[i])); -#else - PADDLE_THROW( - "'GPUPlace' is not supported, Please re-compile with WITH_GPU " - "option"); -#endif - } - } -} +DeviceContextPool* DeviceContextPool::pool = nullptr; -Executor::~Executor() { - if (own_) { - for (auto& device_context : device_contexts_) { - delete device_context; - } - } +Executor::Executor(const std::vector& places) { + DeviceContextPool& pool = DeviceContextPool::Get(); + auto borrowed_contexts = pool.Borrow(places); + device_contexts_.swap(borrowed_contexts); } static void CreateTensor(Variable* var, VarDesc::VarType var_type) { @@ -132,8 +112,5 @@ void Executor::Run(const ProgramDescBind& pdesc, Scope* scope, int block_id, } } -Executor::Executor(const platform::DeviceContext& device) - : device_contexts_({&device}), own_(false) {} - } // namespace framework } // namespace paddle diff --git a/paddle/framework/executor.h b/paddle/framework/executor.h index b745f4f647..073e04729b 100644 --- a/paddle/framework/executor.h +++ b/paddle/framework/executor.h @@ -14,19 +14,98 @@ limitations under the License. */ #pragma once +#include +#include + #include "paddle/framework/op_info.h" #include "paddle/framework/program_desc.h" #include "paddle/framework/scope.h" #include "paddle/framework/tensor.h" +#include "paddle/platform/device_context.h" namespace paddle { namespace framework { +class DeviceContextPool { + public: + static DeviceContextPool& Get() { + PADDLE_ENFORCE_NOT_NULL(pool, "Need to Create DeviceContextPool first!"); + return *pool; + } + + static DeviceContextPool& Create(const std::vector& places) { + if (pool == nullptr) { + pool = new DeviceContextPool(places); + } + return *pool; + } + + std::vector Borrow( + const std::vector& places) { + PADDLE_ENFORCE_GT(places.size(), 0); + PADDLE_ENFORCE_LE(places.size(), device_contexts_.size()); + std::vector borrowed_contexts; + for (auto& place : places) { + auto range = device_contexts_.equal_range(place); + if (range.first == range.second) { + PADDLE_THROW( + "'Place' is not supported, Please re-compile with WITH_GPU " + "option"); + } + // TODO(dzhwinter) : assign the first found device. Will enhanced later. + // device load balancer maybe useful here. + borrowed_contexts.emplace_back(range.first->second); + } + return borrowed_contexts; + } + + explicit DeviceContextPool(const std::vector& places) { + PADDLE_ENFORCE_GT(places.size(), 0); + for (size_t i = 0; i < places.size(); i++) { + if (platform::is_cpu_place(places[i])) { + device_contexts_.emplace( + places[i], new platform::CPUDeviceContext( + boost::get(places[i]))); + } else if (platform::is_gpu_place(places[i])) { +#ifdef PADDLE_WITH_CUDA + device_contexts_.emplace( + places[i], new platform::CUDADeviceContext( + boost::get(places[i]))); +#else + PADDLE_THROW( + "'GPUPlace' is not supported, Please re-compile with WITH_GPU " + "option"); +#endif + } + } + } + + ~DeviceContextPool() {} + + private: + static DeviceContextPool* pool; + struct Hash { + std::hash hash_; + size_t operator()(const platform::Place& place) const { + return hash_(place.which()); + } + }; + std::unordered_multimap + device_contexts_; + DISABLE_COPY_AND_ASSIGN(DeviceContextPool); +}; + class Executor { public: + // TODO(dzhwinter) : Do not rely on this function, it will be removed + explicit Executor(const platform::DeviceContext& device) + : Executor(std::vector({device.GetPlace()})) {} + + explicit Executor(const platform::Place& place) + : Executor(std::vector({place})) {} + explicit Executor(const std::vector& places); - explicit Executor(const platform::DeviceContext& devices); - ~Executor(); /* @Brief * Runtime evaluation of the given ProgramDesc under certain Scope @@ -39,7 +118,6 @@ class Executor { private: std::vector device_contexts_; - bool own_; }; } // namespace framework diff --git a/paddle/framework/init.cc b/paddle/framework/init.cc new file mode 100644 index 0000000000..1c4476f4b3 --- /dev/null +++ b/paddle/framework/init.cc @@ -0,0 +1,80 @@ +/* Copyright (c) 2016 PaddlePaddle Authors. All Rights Reserve. + + 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/framework/executor.h" +#include "paddle/framework/init.h" +#include "paddle/platform/place.h" +#include "paddle/string/piece.h" + +namespace paddle { +namespace framework { + +std::once_flag gflags_init_flag; + +// TODO(qijun) move init gflags to init.cc +void InitGflags(std::vector &argv) { + std::call_once(gflags_init_flag, [&]() { + int argc = argv.size(); + char **arr = new char *[argv.size()]; + std::string line; + for (size_t i = 0; i < argv.size(); i++) { + arr[i] = &argv[i][0]; + line += argv[i]; + line += ' '; + } + google::ParseCommandLineFlags(&argc, &arr, true); + VLOG(1) << "Init commandline: " << line; + }); +} + +bool InitDevices(const std::vector &devices) { + // device format + // CPU + // GPU:1 + // TODO(dzhwinter) : add device format annotation for users. + std::vector places; + for (auto &device : devices) { + auto p = string::Piece(device); + if (string::Find(p, ':', 0) == string::Piece::npos) { + places.emplace_back(platform::CPUPlace()); + } else if (string::HasPrefix(p, "GPU")) { +#ifdef PADDLE_WITH_CUDA + auto pos = string::RFind(p, ':', string::Piece::npos); + auto number = device.substr(pos + 1); + places.emplace_back(platform::GPUPlace(std::stoi(number))); +#else + LOG(WARNING) + << "'GPU' is not supported, Please re-compile with WITH_GPU option"; +#endif + } else { + return false; + } + } + + if (std::find_if(places.begin(), places.end(), + [&](const platform::Place &place) { + return platform::is_cpu_place(place); + }) == places.end()) { + places.emplace_back(platform::CPUPlace()); + LOG(WARNING) << "Not specified any device, use CPU by Default."; + } + DeviceContextPool::Create(places); + return true; + return true; +} + +} // namespace framework +} // namespace paddle diff --git a/paddle/framework/init.h b/paddle/framework/init.h new file mode 100644 index 0000000000..1715cd81e6 --- /dev/null +++ b/paddle/framework/init.h @@ -0,0 +1,28 @@ +/* Copyright (c) 2016 PaddlePaddle Authors. All Rights Reserve. + + 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 "gflags/gflags.h" +#include "glog/logging.h" + +namespace paddle { +namespace framework { + +void InitGflags(std::vector &argv); + +bool InitDevices(const std::vector &devices); + +} // namespace framework +} // namespace paddle diff --git a/paddle/framework/init_test.cc b/paddle/framework/init_test.cc new file mode 100644 index 0000000000..f65e881a76 --- /dev/null +++ b/paddle/framework/init_test.cc @@ -0,0 +1,27 @@ +/* Copyright (c) 2016 PaddlePaddle Authors. All Rights Reserve. + + 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 "gtest/gtest.h" + +#include "paddle/framework/init.h" + +TEST(Init, InitDevices) { + using paddle::framework::InitDevices; + std::vector ds1 = {"CPU"}; + ASSERT_EQ(InitDevices(ds1), true); + +#ifdef PADDLE_WITH_CUDA + std::vector ds2 = {"CPU", "GPU:0", "GPU:1"}; + ASSERT_EQ(InitDevices(ds2), true); +#endif +} diff --git a/paddle/pybind/CMakeLists.txt b/paddle/pybind/CMakeLists.txt index fd55f410d3..1fb69de90d 100644 --- a/paddle/pybind/CMakeLists.txt +++ b/paddle/pybind/CMakeLists.txt @@ -1,7 +1,7 @@ if(WITH_PYTHON) cc_library(paddle_pybind SHARED SRCS pybind.cc exception.cc protobuf.cc - DEPS pybind python backward proto_desc paddle_memory executor prune + DEPS pybind python backward proto_desc paddle_memory executor prune init ${GLOB_OP_LIB}) endif(WITH_PYTHON) diff --git a/paddle/pybind/pybind.cc b/paddle/pybind/pybind.cc index 1faf24bcb8..4248db34c6 100644 --- a/paddle/pybind/pybind.cc +++ b/paddle/pybind/pybind.cc @@ -16,11 +16,11 @@ limitations under the License. */ #include // for call_once #include -#include "gflags/gflags.h" #include "paddle/framework/backward.h" #include "paddle/framework/executor.h" #include "paddle/framework/feed_fetch_method.h" #include "paddle/framework/framework.pb.h" +#include "paddle/framework/init.h" #include "paddle/framework/lod_rank_table.h" #include "paddle/framework/lod_tensor.h" #include "paddle/framework/lod_tensor_array.h" @@ -51,24 +51,6 @@ static size_t UniqueIntegerGenerator(const std::string &prefix) { return generators[prefix].fetch_add(1); } -std::once_flag gflags_init_flag; - -// TODO(qijun) move init gflags to init.cc -void InitGflags(std::vector &argv) { - std::call_once(gflags_init_flag, [&]() { - int argc = argv.size(); - char **arr = new char *[argv.size()]; - std::string line; - for (size_t i = 0; i < argv.size(); i++) { - arr[i] = &argv[i][0]; - line += argv[i]; - line += ' '; - } - google::ParseCommandLineFlags(&argc, &arr, true); - VLOG(1) << "Init commandline: " << line; - }); -} - bool IsCompileGPU() { #ifndef PADDLE_WITH_CUDA return false; @@ -438,7 +420,8 @@ All parameter, weight, gradient are variables in Paddle. .def("run", &Executor::Run); m.def("unique_integer", UniqueIntegerGenerator); - m.def("init_gflags", InitGflags); + m.def("init_gflags", framework::InitGflags); + m.def("init_devices", &framework::InitDevices); m.def("is_compile_gpu", IsCompileGPU); m.def("set_feed_variable", framework::SetFeedVariable); diff --git a/python/paddle/v2/fluid/executor.py b/python/paddle/v2/fluid/executor.py index bdc82eede9..9a99b045dc 100644 --- a/python/paddle/v2/fluid/executor.py +++ b/python/paddle/v2/fluid/executor.py @@ -46,6 +46,13 @@ class Executor(object): p.set_place(each) act_places.append(p) + # TODO(dzhwinter) : consider that our fluid tests all written in + # GPUPlace(gpu_id), this will be changed in next PR. + if core.is_compile_gpu(): + core.init_devices(["CPU", "GPU:0"]) + else: + core.init_devices(["CPU"]) + self.executor = core.Executor(act_places) self.places = places From 23215557bda3e231e3901aebbeb17dc6b520bae4 Mon Sep 17 00:00:00 2001 From: typhoonzero Date: Mon, 18 Dec 2017 13:05:01 +0800 Subject: [PATCH 135/193] follow comments --- doc/howto/usage/cluster/cluster_train_cn.md | 10 +++++----- doc/howto/usage/cluster/cluster_train_en.md | 10 +++++----- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/doc/howto/usage/cluster/cluster_train_cn.md b/doc/howto/usage/cluster/cluster_train_cn.md index 4cf5eec030..b3a2526ba4 100644 --- a/doc/howto/usage/cluster/cluster_train_cn.md +++ b/doc/howto/usage/cluster/cluster_train_cn.md @@ -181,8 +181,8 @@ PaddlePaddle可以使用多种分布式计算平台构建分布式计算任务 ## 在不同集群中运行 - [fabric](fabric_cn.md) - [opemmpi](openmpi_cn.md) - [kubernetes](k8s_cn.md) - [kubernetes distributed](k8s_distributed_cn.md) - [kubernetes on AWS](k8s_aws_en.md) + - [fabric](fabric_cn.md) + - [opemmpi](openmpi_cn.md) + - [kubernetes](k8s_cn.md) + - [kubernetes distributed](k8s_distributed_cn.md) + - [kubernetes on AWS](k8s_aws_en.md) diff --git a/doc/howto/usage/cluster/cluster_train_en.md b/doc/howto/usage/cluster/cluster_train_en.md index 13b14dc113..3afb4babcb 100644 --- a/doc/howto/usage/cluster/cluster_train_en.md +++ b/doc/howto/usage/cluster/cluster_train_en.md @@ -185,8 +185,8 @@ These cluster platforms provide API or environment variables for training proces ## Use different clusters - [fabric](fabric_cn.md) - [opemmpi](openmpi_cn.md) - [kubernetes](k8s_cn.md) - [kubernetes distributed](k8s_distributed_cn.md) - [kubernetes on AWS](k8s_aws_en.md) + - [fabric](fabric_en.md) + - [opemmpi](openmpi_en.md) + - [kubernetes](k8s_en.md) + - [kubernetes distributed](k8s_distributed_cn.md) + - [kubernetes on AWS](k8s_aws_en.md) From 7c9c244d1716a184f8515ce75de5e925c6b266e7 Mon Sep 17 00:00:00 2001 From: typhoonzero Date: Mon, 18 Dec 2017 13:42:29 +0800 Subject: [PATCH 136/193] update doc index --- doc/howto/index_cn.rst | 3 -- doc/howto/index_en.rst | 2 - doc/howto/usage/k8s/k8s_basis_cn.md | 75 ----------------------------- 3 files changed, 80 deletions(-) delete mode 100644 doc/howto/usage/k8s/k8s_basis_cn.md diff --git a/doc/howto/index_cn.rst b/doc/howto/index_cn.rst index 991b9e2596..ccd9097702 100644 --- a/doc/howto/index_cn.rst +++ b/doc/howto/index_cn.rst @@ -9,9 +9,6 @@ usage/cmd_parameter/index_cn.rst usage/cluster/cluster_train_cn.md - usage/k8s/k8s_basis_cn.md - usage/k8s/k8s_cn.md - usage/k8s/k8s_distributed_cn.md 开发标准 -------- diff --git a/doc/howto/index_en.rst b/doc/howto/index_en.rst index 61bf25ccd1..6d1bf7dfc0 100644 --- a/doc/howto/index_en.rst +++ b/doc/howto/index_en.rst @@ -9,8 +9,6 @@ Usage usage/cmd_parameter/index_en.rst usage/cluster/cluster_train_en.md - usage/k8s/k8s_en.md - usage/k8s/k8s_aws_en.md Development ------------ diff --git a/doc/howto/usage/k8s/k8s_basis_cn.md b/doc/howto/usage/k8s/k8s_basis_cn.md deleted file mode 100644 index 4c3dc81ed3..0000000000 --- a/doc/howto/usage/k8s/k8s_basis_cn.md +++ /dev/null @@ -1,75 +0,0 @@ -# Kubernetes 简介 - -[*Kubernetes*](http://kubernetes.io/)是Google开源的容器集群管理系统,其提供应用部署、维护、扩展机制等功能,利用Kubernetes能方便地管理跨机器运行容器化的应用。Kubernetes可以在物理机或虚拟机上运行,且支持部署到[AWS](http://kubernetes.io/docs/getting-started-guides/aws),[Azure](http://kubernetes.io/docs/getting-started-guides/azure/),[GCE](http://kubernetes.io/docs/getting-started-guides/gce)等多种公有云环境。介绍分布式训练之前,需要对[Kubernetes](http://kubernetes.io/)有一个基本的认识,下面先简要介绍一下本文用到的几个Kubernetes概念。 - -- [*Node*](http://kubernetes.io/docs/admin/node/) 表示一个Kubernetes集群中的一个工作节点,这个节点可以是物理机或者虚拟机,Kubernetes集群就是由node节点与master节点组成的。 - -- [*Pod*](http://kubernetes.io/docs/user-guide/pods/) 是一组(一个或多个)容器,pod是Kubernetes的最小调度单元,一个pod中的所有容器会被调度到同一个node上。Pod中的容器共享NET,PID,IPC,UTS等Linux namespace。由于容器之间共享NET namespace,所以它们使用同一个IP地址,可以通过*localhost*互相通信。不同pod之间可以通过IP地址访问。 - -- [*Job*](http://kubernetes.io/docs/user-guide/jobs/) 描述Kubernetes上运行的作业,一次作业称为一个job,通常每个job包括一个或者多个pods,job启动后会创建这些pod并开始执行一个程序,等待这个程序执行成功并返回0则成功退出,如果执行失败,也可以配置不同的重试机制。 - -- [*Volume*](http://kubernetes.io/docs/user-guide/volumes/) 存储卷,是pod内的容器都可以访问的共享目录,也是容器与node之间共享文件的方式,因为容器内的文件都是暂时存在的,当容器因为各种原因被销毁时,其内部的文件也会随之消失。通过volume,就可以将这些文件持久化存储。Kubernetes支持多种volume,例如hostPath(宿主机目录),gcePersistentDisk,awsElasticBlockStore等。 - -- [*Namespaces*](https://kubernetes.io/docs/user-guide/namespaces/) 命名空间,在kubernetes中创建的所有资源对象(例如上文的pod,job)等都属于一个命名空间,在同一个命名空间中,资源对象的名字是唯一的,不同空间的资源名可以重复,命名空间主要为了对象进行逻辑上的分组便于管理。本文只使用了默认命名空间。 - -- [*PersistentVolume*](https://kubernetes.io/docs/user-guide/persistent-volumes/): 和[*PersistentVolumeClaim*](https://kubernetes.io/docs/user-guide/persistent-volumes/#persistentvolumeclaims)结合,将外部的存储服务在Kubernetes中描述成为统一的资源形式,便于存储资源管理和Pod引用。 - -## 部署Kubernetes集群 - -Kubernetes提供了多种集群部署的方案,本文档内不重复介绍。这里给出集中常见的部署方法: - -- [*minikube*](https://kubernetes.io/docs/getting-started-guides/minikube/): 快速在本地启动一个单机的kubernetes服务器,便于本地验证和测试。 -- [*kubeadm*](http://kubernetes.io/docs/getting-started-guides/kubeadm/): 在不同操作系统,不同主机(Bare-Metal, AWS, GCE)条件下,快速部署集群。 -- [*AWS EC2*](https://kubernetes.io/docs/getting-started-guides/aws/): 在aws上快速部署集群。 -- [*Bare-Metal*](https://kubernetes.io/docs/getting-started-guides/centos/centos_manual_config/): 在物理机上手动部署。 - -可以参考[这个表格](https://kubernetes.io/docs/getting-started-guides/#table-of-solutions)选择适合您的场景的合适方案。 - -## 选择存储方案 - -容器不会保留在运行时生成的数据,job或者应用程序在容器中运行时生成的数据会在容器销毁时消失。为了完成分布式机器学习训练任务,需要有一个外部的存储服务来保存训练所需数据和训练输出。 -常见的可选存储服务包括: - -- [*NFS*](https://github.com/kubernetes/kubernetes/tree/master/examples/volumes/nfs): 可以将磁盘上某个目录共享给网络中其他机器访问。部署和配置比较简单,可以用于小量数据的验证。不提供分布式存储,高可用,冗余等功能。NFS的部署方法可以参考[这里](http://www.tecmint.com/how-to-setup-nfs-server-in-linux/)。 -- [*GlusterFS*](http://gluster.readthedocs.io/en/latest/Quick-Start-Guide/Quickstart/): 网络分布式文件系统,可以在Kubernetes中按照[这个](https://github.com/kubernetes/kubernetes/tree/master/examples/volumes/glusterfs)例子使用。 -- [*Ceph*](http://docs.ceph.com/docs/master/): 分布式文件系统,支持rbd,POSIX API接口(ceph fs)和对象存储API,参考[这里](https://kubernetes.io/docs/user-guide/volumes/#rbd)。 -- [*MooseFS*](https://moosefs.com/documentation.html): 一个分布式的存储系统。需要先挂载到服务器Node上再通过kubernetes hostPath Volume挂载到容器中。 - -## 配置kubectl - -### 安装kubectl -``` -# OS X -curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/darwin/amd64/kubectl - -# Linux -curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl - -# Windows -curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/windows/amd64/kubectl.exe -``` - -### 配置kubectl访问你的kubernetes集群 - -编辑`~/.kube/config`这个配置文件,修改`Master-IP`的地址。如果使用SSL认证,则需要配置`certificate-authority`和`users`中的用户证书。如果是使用非SSL方式访问(比如通过8080端口),也可以去掉这些证书的配置。 -``` -apiVersion: v1 -clusters: -- cluster: - certificate-authority: /path/to/ca.crt - server: https://[Master-IP]:443 - name: minikube -contexts: -- context: - cluster: minikube - user: minikube - name: minikube -current-context: minikube -kind: Config -preferences: {} -users: -- name: minikube - user: - client-certificate: /path/to/apiserver.crt - client-key: /Users/wuyi/.minikube/apiserver.key -``` From b0e4357178fe02d0cd96e07eafb8d940dfcbdab8 Mon Sep 17 00:00:00 2001 From: Luo Tao Date: Mon, 18 Dec 2017 16:09:52 +0800 Subject: [PATCH 137/193] seperate openblas train/infer script with mkl --- .../{run_mkldnn_infer.sh => run_mkl_infer.sh} | 0 .../{run_mkldnn_train.sh => run_mkl_train.sh} | 0 benchmark/paddle/image/run_openblas_infer.sh | 62 +++++++++++++++++++ benchmark/paddle/image/run_openblas_train.sh | 39 ++++++++++++ 4 files changed, 101 insertions(+) rename benchmark/paddle/image/{run_mkldnn_infer.sh => run_mkl_infer.sh} (100%) rename benchmark/paddle/image/{run_mkldnn_train.sh => run_mkl_train.sh} (100%) create mode 100755 benchmark/paddle/image/run_openblas_infer.sh create mode 100755 benchmark/paddle/image/run_openblas_train.sh diff --git a/benchmark/paddle/image/run_mkldnn_infer.sh b/benchmark/paddle/image/run_mkl_infer.sh similarity index 100% rename from benchmark/paddle/image/run_mkldnn_infer.sh rename to benchmark/paddle/image/run_mkl_infer.sh diff --git a/benchmark/paddle/image/run_mkldnn_train.sh b/benchmark/paddle/image/run_mkl_train.sh similarity index 100% rename from benchmark/paddle/image/run_mkldnn_train.sh rename to benchmark/paddle/image/run_mkl_train.sh diff --git a/benchmark/paddle/image/run_openblas_infer.sh b/benchmark/paddle/image/run_openblas_infer.sh new file mode 100755 index 0000000000..c1001d3a7c --- /dev/null +++ b/benchmark/paddle/image/run_openblas_infer.sh @@ -0,0 +1,62 @@ +set -e + +function clock_to_seconds() { + hours=`echo $1 | awk -F ':' '{print $1}'` + mins=`echo $1 | awk -F ':' '{print $2}'` + secs=`echo $1 | awk -F ':' '{print $3}'` + echo `awk 'BEGIN{printf "%.2f",('$secs' + '$mins' * 60 + '$hours' * 3600)}'` +} + +function infer() { + unset OMP_NUM_THREADS MKL_NUM_THREADS OMP_DYNAMIC KMP_AFFINITY + topology=$1 + layer_num=$2 + bs=$3 + thread=`nproc` + if [ $thread -gt $bs ]; then + thread=$bs + fi + log="logs/infer-${topology}-${layer_num}-${thread}openblas-${bs}.log" + + models_in="models/${topology}-${layer_num}/pass-00000/" + if [ ! -d $models_in ]; then + echo "./run_mkl_infer.sh to save the model first" + exit 0 + fi + log_period=$((256 / bs)) + paddle train --job=test \ + --config="${topology}.py" \ + --use_gpu=False \ + --trainer_count=$thread \ + --log_period=$log_period \ + --config_args="batch_size=${bs},layer_num=${layer_num},is_infer=True" \ + --init_model_path=$models_in \ + 2>&1 | tee ${log} + + # calculate the last 5 logs period time of 1280 samples, + # the time before are burning time. + start=`tail ${log} -n 7 | head -n 1 | awk -F ' ' '{print $2}' | xargs` + end=`tail ${log} -n 2 | head -n 1 | awk -F ' ' '{print $2}' | xargs` + start_sec=`clock_to_seconds $start` + end_sec=`clock_to_seconds $end` + fps=`awk 'BEGIN{printf "%.2f",(1280 / ('$end_sec' - '$start_sec'))}'` + echo "Last 1280 samples start: ${start}(${start_sec} sec), end: ${end}(${end_sec} sec;" >> ${log} + echo "FPS: $fps images/sec" 2>&1 | tee -a ${log} +} + +if [ ! -f "train.list" ]; then + echo " " > train.list +fi +if [ ! -f "test.list" ]; then + echo " " > test.list +fi +if [ ! -d "logs" ]; then + mkdir logs +fi + +# inference benchmark +for batchsize in 1 2 4 8 16; do + infer googlenet v1 $batchsize + infer resnet 50 $batchsize + infer vgg 19 $batchsize +done diff --git a/benchmark/paddle/image/run_openblas_train.sh b/benchmark/paddle/image/run_openblas_train.sh new file mode 100755 index 0000000000..b9494ce119 --- /dev/null +++ b/benchmark/paddle/image/run_openblas_train.sh @@ -0,0 +1,39 @@ +set -e + +function train() { + unset OMP_NUM_THREADS MKL_NUM_THREADS OMP_DYNAMIC KMP_AFFINITY + topology=$1 + layer_num=$2 + bs=$3 + thread=`nproc` + # each trainer_count use only 1 core to avoid conflict + log="logs/train-${topology}-${layer_num}-${thread}openblas-${bs}.log" + args="batch_size=${bs},layer_num=${layer_num}" + config="${topology}.py" + paddle train --job=time \ + --config=$config \ + --use_gpu=False \ + --trainer_count=$thread \ + --log_period=10 \ + --test_period=100 \ + --config_args=$args \ + 2>&1 | tee ${log} + + avg_time=`tail ${log} -n 1 | awk -F ' ' '{print $8}' | sed 's/avg=//'` + fps=`awk 'BEGIN{printf "%.2f",('$bs' / '$avg_time' * 1000)}'` + echo "FPS: $fps images/sec" 2>&1 | tee -a ${log} +} + +if [ ! -f "train.list" ]; then + echo " " > train.list +fi +if [ ! -d "logs" ]; then + mkdir logs +fi + +# training benchmark +for batchsize in 64 128 256; do + train vgg 19 $batchsize + train resnet 50 $batchsize + train googlenet v1 $batchsize +done From c30bc56100006a509bd1ea5d178e7d7a6f032919 Mon Sep 17 00:00:00 2001 From: wanghaoshuang Date: Mon, 18 Dec 2017 16:33:06 +0800 Subject: [PATCH 138/193] rename seq to sequence --- ...seq_expand_op.cc => sequence_expand_op.cc} | 30 +++++++++---------- ...seq_expand_op.cu => sequence_expand_op.cu} | 10 +++---- .../{seq_expand_op.h => sequence_expand_op.h} | 4 +-- 3 files changed, 22 insertions(+), 22 deletions(-) rename paddle/operators/{seq_expand_op.cc => sequence_expand_op.cc} (82%) rename paddle/operators/{seq_expand_op.cu => sequence_expand_op.cu} (74%) rename paddle/operators/{seq_expand_op.h => sequence_expand_op.h} (96%) diff --git a/paddle/operators/seq_expand_op.cc b/paddle/operators/sequence_expand_op.cc similarity index 82% rename from paddle/operators/seq_expand_op.cc rename to paddle/operators/sequence_expand_op.cc index ede9754697..770161b593 100644 --- a/paddle/operators/seq_expand_op.cc +++ b/paddle/operators/sequence_expand_op.cc @@ -12,14 +12,14 @@ See the License for the specific language governing permissions and limitations under the License. */ -#include "paddle/operators/seq_expand_op.h" +#include "paddle/operators/sequence_expand_op.h" namespace paddle { namespace operators { using framework::Tensor; -class SeqExpandOp : public framework::OperatorWithKernel { +class SequenceExpandOp : public framework::OperatorWithKernel { public: using framework::OperatorWithKernel::OperatorWithKernel; @@ -35,25 +35,25 @@ class SeqExpandOp : public framework::OperatorWithKernel { } }; -class SeqExpandOpMaker : public framework::OpProtoAndCheckerMaker { +class SequenceExpandOpMaker : public framework::OpProtoAndCheckerMaker { public: - SeqExpandOpMaker(framework::OpProto* proto, - framework::OpAttrChecker* op_checker) + SequenceExpandOpMaker(framework::OpProto* proto, + framework::OpAttrChecker* op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "(Tensor or LoDTensor) The input(X) of this operator can be a " "LoDTensor or a base Tensor."); AddInput("Y", - "(LoDTensor)The reference input(Y) of seq_expand op." + "(LoDTensor)The reference input(Y) of sequence_expand op." "It must be a LoDTensor with k-level(k>0)." "The input(X) will be expanded according to LOD of input(Y)." "The element numbers of last level in input(Y) " "must be equal to dims[0] of input(X)."); AddOutput("Out", - "(LodTensor)The output of seq_expand op." + "(LodTensor)The output of sequence_expand op." "The lod of output will be as same as input(Y)'s lod."); AddComment(R"DOC( -Seq Expand Operator. +Sequence Expand Operator. This operator expands input(X) according to LOD of input(Y). Following are cases to better explain how this works: @@ -124,7 +124,7 @@ then we get 2-level LoDTensor } }; -class SeqExpandOpGrad : public framework::OperatorWithKernel { +class SequenceExpandOpGrad : public framework::OperatorWithKernel { public: using framework::OperatorWithKernel::OperatorWithKernel; @@ -146,11 +146,11 @@ class SeqExpandOpGrad : public framework::OperatorWithKernel { } // namespace paddle namespace ops = paddle::operators; -REGISTER_OP(seq_expand, ops::SeqExpandOp, ops::SeqExpandOpMaker, - seq_expand_grad, ops::SeqExpandOpGrad); +REGISTER_OP(sequence_expand, ops::SequenceExpandOp, ops::SequenceExpandOpMaker, + sequence_expand_grad, ops::SequenceExpandOpGrad); REGISTER_OP_CPU_KERNEL( - seq_expand, - ops::SeqExpandKernel); + sequence_expand, + ops::SequenceExpandKernel); REGISTER_OP_CPU_KERNEL( - seq_expand_grad, - ops::SeqExpandGradKernel); + sequence_expand_grad, + ops::SequenceExpandGradKernel); diff --git a/paddle/operators/seq_expand_op.cu b/paddle/operators/sequence_expand_op.cu similarity index 74% rename from paddle/operators/seq_expand_op.cu rename to paddle/operators/sequence_expand_op.cu index 8e67ce9ccb..f79c84dff8 100644 --- a/paddle/operators/seq_expand_op.cu +++ b/paddle/operators/sequence_expand_op.cu @@ -13,12 +13,12 @@ limitations under the License. */ #define EIGEN_USE_GPU -#include "paddle/operators/seq_expand_op.h" +#include "paddle/operators/sequence_expand_op.h" namespace ops = paddle::operators; REGISTER_OP_CUDA_KERNEL( - seq_expand, - ops::SeqExpandKernel); + sequence_expand, + ops::SequenceExpandKernel); REGISTER_OP_CUDA_KERNEL( - seq_expand_grad, - ops::SeqExpandGradKernel); + sequence_expand_grad, + ops::SequenceExpandGradKernel); diff --git a/paddle/operators/seq_expand_op.h b/paddle/operators/sequence_expand_op.h similarity index 96% rename from paddle/operators/seq_expand_op.h rename to paddle/operators/sequence_expand_op.h index fbee0db454..411b819c65 100644 --- a/paddle/operators/seq_expand_op.h +++ b/paddle/operators/sequence_expand_op.h @@ -24,7 +24,7 @@ namespace operators { using LoDTensor = framework::LoDTensor; template -class SeqExpandKernel : public framework::OpKernel { +class SequenceExpandKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { auto* x = context.Input("X"); @@ -71,7 +71,7 @@ class SeqExpandKernel : public framework::OpKernel { * * */ template -class SeqExpandGradKernel : public framework::OpKernel { +class SequenceExpandGradKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { auto* d_out = context.Input(framework::GradVarName("Out")); From 3242e286e64a95e6ac936fbeda814c77bd37ef53 Mon Sep 17 00:00:00 2001 From: yangyaming Date: Mon, 18 Dec 2017 16:37:28 +0800 Subject: [PATCH 139/193] seq_expand --> sequence_expand --- doc/api/v2/fluid/layers.rst | 4 ++-- python/paddle/v2/fluid/layers/nn.py | 16 ++++++++-------- python/paddle/v2/fluid/tests/test_layers.py | 2 +- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/doc/api/v2/fluid/layers.rst b/doc/api/v2/fluid/layers.rst index c3436ca6bc..9f3669e115 100644 --- a/doc/api/v2/fluid/layers.rst +++ b/doc/api/v2/fluid/layers.rst @@ -300,7 +300,7 @@ conv2d_transpose .. autofunction:: paddle.v2.fluid.layers.conv2d_transpose :noindex: -seq_expand +sequence_expand --------- -.. autofunction:: paddle.v2.fluid.layers.seq_expand +.. autofunction:: paddle.v2.fluid.layers.sequence_expand :noindex: diff --git a/python/paddle/v2/fluid/layers/nn.py b/python/paddle/v2/fluid/layers/nn.py index bed46e4972..2be8c8af9b 100644 --- a/python/paddle/v2/fluid/layers/nn.py +++ b/python/paddle/v2/fluid/layers/nn.py @@ -10,7 +10,7 @@ __all__ = [ 'fc', 'embedding', 'dynamic_lstm', 'gru_unit', 'linear_chain_crf', 'crf_decoding', 'cos_sim', 'cross_entropy', 'square_error_cost', 'accuracy', 'chunk_eval', 'sequence_conv', 'conv2d', 'sequence_pool', 'pool2d', - 'batch_norm', 'beam_search_decode', 'conv2d_transpose', 'seq_expand' + 'batch_norm', 'beam_search_decode', 'conv2d_transpose', 'sequence_expand' ] @@ -791,10 +791,10 @@ def conv2d_transpose(input, return out -def seq_expand(x, y, main_program=None, startup_program=None): +def sequence_expand(x, y, main_program=None, startup_program=None): """Sequence Expand Layer. This layer will expand the input variable **x** according to LoD information of **y**. And the following examples will - explain how seq_expand works: + explain how sequence_expand works: .. code-block:: text @@ -823,7 +823,7 @@ def seq_expand(x, y, main_program=None, startup_program=None): x.dims = [3, 1] y is a LoDTensor: - Y.lod = [[0, 2, 3, 6]] + y.lod = [[0, 2, 3, 6]] with condition len(y.lod[-1]) - 1 == x.dims[0] @@ -847,12 +847,12 @@ def seq_expand(x, y, main_program=None, startup_program=None): x = fluid.layers.data(name='x', shape=[10], dtype='float32') y = fluid.layers.data(name='y', shape=[10, 20], dtype='float32', lod_level=1) - out = layers.seq_expand(x=x, y=y) + out = layers.sequence_expand(x=x, y=y) """ - helper = LayerHelper('seq_expand', input=x, **locals()) + helper = LayerHelper('sequence_expand', input=x, **locals()) dtype = helper.input_dtype() tmp = helper.create_tmp_variable(dtype) helper.append_op( - type='seq_expand', inputs={'X': x, - 'Y': y}, outputs={'Out': tmp}) + type='sequence_expand', inputs={'X': x, + 'Y': y}, outputs={'Out': tmp}) return tmp diff --git a/python/paddle/v2/fluid/tests/test_layers.py b/python/paddle/v2/fluid/tests/test_layers.py index d6f939af23..2286e94a90 100644 --- a/python/paddle/v2/fluid/tests/test_layers.py +++ b/python/paddle/v2/fluid/tests/test_layers.py @@ -167,7 +167,7 @@ class TestBook(unittest.TestCase): x = layers.data(name='x', shape=[10], dtype='float32') y = layers.data( name='y', shape=[10, 20], dtype='float32', lod_level=1) - self.assertIsNotNone(layers.seq_expand(x=x, y=y)) + self.assertIsNotNone(layers.sequence_expand(x=x, y=y)) print(str(program)) From e6306b4c6b92b2dadd1386bba96183fd37c27b9a Mon Sep 17 00:00:00 2001 From: typhoonzero Date: Mon, 18 Dec 2017 17:14:42 +0800 Subject: [PATCH 140/193] follow comments --- doc/howto/usage/cluster/cluster_train_cn.md | 40 ++++++++++----------- doc/howto/usage/cluster/cluster_train_en.md | 40 ++++++++++----------- doc/howto/usage/cluster/k8s_aws_cn.md | 1 + 3 files changed, 41 insertions(+), 40 deletions(-) create mode 120000 doc/howto/usage/cluster/k8s_aws_cn.md diff --git a/doc/howto/usage/cluster/cluster_train_cn.md b/doc/howto/usage/cluster/cluster_train_cn.md index b3a2526ba4..c9f90538a6 100644 --- a/doc/howto/usage/cluster/cluster_train_cn.md +++ b/doc/howto/usage/cluster/cluster_train_cn.md @@ -19,7 +19,7 @@ ## 环境准备 1. 准备您的计算集群。计算集群通常由一组(几台到几千台规模)的Linux服务器组成。服务器之间可以通过局域网(LAN)联通,每台服务器具有集群中唯一的IP地址(或者可被DNS解析的主机名)。集群中的每台计算机通常被成为一个“节点”。 -1. 我们需要在集群的所有节点上安装 PaddlePaddle。 如果要启用GPU,还需要在节点上安装对应的GPU驱动以及CUDA。PaddlePaddle的安装可以参考[build_and_install](https://github.com/PaddlePaddle/Paddle/tree/develop/doc/getstarted/build_and_install)的多种安装方式。我们推荐使用[Docker](https://github.com/PaddlePaddle/Paddle/blob/develop/doc/getstarted/build_and_install/docker_install_cn.rst)安装方式来快速安装PaddlePaddle。 +1. 我们需要在集群的所有节点上安装 PaddlePaddle。 如果要启用GPU,还需要在节点上安装对应的GPU驱动以及CUDA。PaddlePaddle的安装可以参考[build_and_install](http://www.paddlepaddle.org/docs/develop/documentation/zh/getstarted/build_and_install/index_cn.html)的多种安装方式。我们推荐使用[Docker](http://www.paddlepaddle.org/docs/develop/documentation/zh/getstarted/build_and_install/docker_install_cn.html)安装方式来快速安装PaddlePaddle。 安装完成之后,执行下面的命令可以查看已经安装的版本(docker安装方式可以进入docker容器执行:`docker run -it paddlepaddle/paddle:[tag] /bin/bash`): ```bash @@ -47,12 +47,12 @@ $ paddle pserver --port=7164 --ports_num=1 --ports_num_for_sparse=1 --num_gradie $ stdbuf -oL /usr/bin/nohup paddle pserver --port=7164 --ports_num=1 --ports_num_for_sparse=1 --num_gradient_servers=1 &> pserver.log ``` -| 参数 | 是否必选 | 默认值 | 说明 | -| ------------- | ------------- | ------------- | ------------- | -| port | 必选 | 7164 | pserver监听的起始端口,根据ports_num决定
总端口个数,从起始端口监听多个端口用于通信 | -| ports_num | 必选 | 1 | 监听的端口个数 | -| ports_num_for_sparse | 必选 | 1 | 用于稀疏类型参数通信的端口个数 | -| num_gradient_servers | 必选 | 1 | 当前训练任务pserver总数 | +参数说明 + +- port:**必选,默认7164**,pserver监听的起始端口,根据ports_num决定总端口个数,从起始端口监听多个端口用于通信 +- ports_num:**必选,默认1**,监听的端口个数 +- ports_num_for_sparse:**必选,默认1**,用于稀疏类型参数通信的端口个数 +- num_gradient_servers:**必选,默认1**,当前训练任务pserver总数 ### 启动计算节点 执行以下命令启动使用python编写的trainer程序(文件名为任意文件名,如train.py) @@ -89,16 +89,16 @@ paddle.init( pservers="127.0.0.1") ``` -| 参数 | 是否必选 | 默认 | 说明 | -| ------------- | ------------- | ------------- | ------------- | -| use_gpu | 可选 | False | 是否启用GPU训练 | -| trainer_count | 必选 | 1 | 当前训练任务trainer总个数 | -| port | 必选 | 7164 | 连接到pserver的端口 | -| ports_num | 必选 | 1 | 连接到pserver的端口个数 | -| ports_num_for_sparse | 必选 | 1 | 和pserver之间用于稀疏类型参数通信的端口个数 | -| num_gradient_servers | 必选 | 1 | 当前训练任务pserver总数 | -| trainer_id | 必选 | 0 | 每个trainer的唯一ID,从0开始的整数 | -| pservers | 必选 | 127.0.0.1 | 当前训练任务启动的pserver的IP列表,多个IP使用“,”隔开 | +参数说明 + +- use_gpu: **可选,默认False**,是否启用GPU训练 +- trainer_count:**必选,默认1**,当前训练任务trainer总个数 +- port:**必选,默认7164**,连接到pserver的端口 +- ports_num:**必选,默认1**,连接到pserver的端口个数 +- ports_num_for_sparse:**必选,默认1**,和pserver之间用于稀疏类型参数通信的端口个数 +- num_gradient_servers:**必选,默认1**,当前训练任务pserver总数 +- trainer_id:**必选,默认0**,每个trainer的唯一ID,从0开始的整数 +- pservers:**必选,默认127.0.0.1**,当前训练任务启动的pserver的IP列表,多个IP使用“,”隔开 ### 准备数据集 @@ -155,7 +155,7 @@ test.txt-00002 - `my_lib.py`:会被`train.py`调用的一些用户定义的库函数,比如PIL库等。 - `word_dict.pickle`:在`train.py`中会使用到的字典数据文件。 -- `train.py`:训练程序,代码参考[api_train_v2_cluster.py](https://github.com/PaddlePaddle/Paddle/tree/develop/doc/howto/usage/cluster/src/word2vec/prepare.py)。***注意:*** 对于本样例代码,在使用不同的分布式计算平台时,您可能需要修改`train.py`开头的部分(如下),以便获得训练数据的位置和获取环境变量配置: +- `train.py`:训练程序,代码参考[api_train_v2_cluster.py](https://github.com/PaddlePaddle/Paddle/tree/develop/doc/howto/usage/cluster/src/word2vec/api_train_v2_cluster.py)。***注意:*** 对于本样例代码,在使用不同的分布式计算平台时,您可能需要修改`train.py`开头的部分(如下),以便获得训练数据的位置和获取环境变量配置: ```python cluster_train_file = "./train_data_dir/train/train.txt" @@ -182,7 +182,7 @@ PaddlePaddle可以使用多种分布式计算平台构建分布式计算任务 ## 在不同集群中运行 - [fabric](fabric_cn.md) - - [opemmpi](openmpi_cn.md) + - [openmpi](openmpi_cn.md) - [kubernetes](k8s_cn.md) - [kubernetes distributed](k8s_distributed_cn.md) - - [kubernetes on AWS](k8s_aws_en.md) + - [kubernetes on AWS](k8s_aws_cn.md) diff --git a/doc/howto/usage/cluster/cluster_train_en.md b/doc/howto/usage/cluster/cluster_train_en.md index 3afb4babcb..2b46525e85 100644 --- a/doc/howto/usage/cluster/cluster_train_en.md +++ b/doc/howto/usage/cluster/cluster_train_en.md @@ -16,7 +16,7 @@ When training with synchronize SGD, PaddlePaddle uses an internal "synchronize b ## Preparations 1. Prepare your computer cluster. It's normally a bunch of Linux servers connected by LAN. Each server will be assigned a unique IP address. The computers in the cluster can be called "nodes". -2. Install PaddlePaddle on every node. If you are going to take advantage of GPU cards, you'll also need to install proper driver and CUDA libraries. To install PaddlePaddle please read [this build and install](https://github.com/PaddlePaddle/Paddle/tree/develop/doc/getstarted/build_and_install) document. We strongly recommend using [Docker installation](https://github.com/PaddlePaddle/Paddle/blob/develop/doc/getstarted/build_and_install/docker_install_en.rst). +2. Install PaddlePaddle on every node. If you are going to take advantage of GPU cards, you'll also need to install proper driver and CUDA libraries. To install PaddlePaddle please read [this build and install](http://www.paddlepaddle.org/docs/develop/documentation/zh/getstarted/build_and_install/index_cn.html) document. We strongly recommend using [Docker installation](http://www.paddlepaddle.org/docs/develop/documentation/zh/getstarted/build_and_install/docker_install_cn.html). After installation, you can check the version by typing the below command (run a docker container if using docker: `docker run -it paddlepaddle/paddle:[tag] /bin/bash`): @@ -48,12 +48,12 @@ If you wish to run parameter servers in background, and save a log file, you can $ stdbuf -oL /usr/bin/nohup paddle pserver --port=7164 --ports_num=1 --ports_num_for_sparse=1 --num_gradient_servers=1 &> pserver.log ``` -| param | required | default | description | -| ------------- | ------------- | ------------- | ------------- | -| port | required | 7164 | port which parameter server will listen on. If ports_num greater than 1, parameter server will listen on multiple ports for more network throughput | -| ports_num | required | 1 | total number of ports will listen on | -| ports_num_for_sparse | required | 1 | number of ports which serves sparse parameter update | -| num_gradient_servers | required | 1 | total number of gradient servers | +Parameter Description + +- port: **required, default 7164**, port which parameter server will listen on. If ports_num greater than 1, parameter server will listen on multiple ports for more network throughput. +- ports_num: **required, default 1**, total number of ports will listen on. +- ports_num_for_sparse: **required, default 1**, number of ports which serves sparse parameter update. +- num_gradient_servers: **required, default 1**, total number of gradient servers. ### Starting trainer Type the command below to start the trainer(name the file whatever you want, like "train.py") @@ -92,16 +92,16 @@ paddle.init( pservers="127.0.0.1") ``` -| param | required | default | description | -| ------------- | ------------- | ------------- | ------------- | -| use_gpu | optional | False | set to "True" to enable GPU training | -| trainer_count | required | 1 | total count of trainers in the training job | -| port | required | 7164 | port to connect to parameter server | -| ports_num | required | 1 | number of ports for communication | -| ports_num_for_sparse | required | 1 | number of ports for sparse type caculation | -| num_gradient_servers | required | 1 | total number of gradient server | -| trainer_id | required | 0 | ID for every trainer, start from 0 | -| pservers | required | 127.0.0.1 | list of IPs of parameter servers, separated by "," | +Parameter Description + +- use_gpu: **optional, default False**, set to "True" to enable GPU training. +- trainer_count: **required, default 1**, total count of trainers in the training job. +- port: **required, default 7164**, port to connect to parameter server. +- ports_num: **required, default 1**, number of ports for communication. +- ports_num_for_sparse: **required, default 1**, number of ports for sparse type caculation. +- num_gradient_servers: **required, default 1**, total number of gradient server. +- trainer_id: **required, default 0**, ID for every trainer, start from 0. +- pservers: **required, default 127.0.0.1**, list of IPs of parameter servers, separated by ",". ### Prepare Training Dataset @@ -159,7 +159,7 @@ Your workspace may looks like: - `my_lib.py`: user defined libraries, like PIL libs. This is optional. - `word_dict.pickle`: dict file for training word embeding. -- `train.py`: training program. Sample code: [api_train_v2_cluster.py](https://github.com/PaddlePaddle/Paddle/tree/develop/doc/howto/usage/cluster/src/word2vec/prepare.py). ***NOTE:*** You may need to modify the head part of `train.py` when using different cluster platform to retrive configuration environment variables: +- `train.py`: training program. Sample code: [api_train_v2_cluster.py](https://github.com/PaddlePaddle/Paddle/tree/develop/doc/howto/usage/cluster/src/word2vec/api_train_v2_cluster.py). ***NOTE:*** You may need to modify the head part of `train.py` when using different cluster platform to retrive configuration environment variables: ```python cluster_train_file = "./train_data_dir/train/train.txt" @@ -186,7 +186,7 @@ These cluster platforms provide API or environment variables for training proces ## Use different clusters - [fabric](fabric_en.md) - - [opemmpi](openmpi_en.md) + - [openmpi](openmpi_en.md) - [kubernetes](k8s_en.md) - - [kubernetes distributed](k8s_distributed_cn.md) + - kubernetes distributed - [kubernetes on AWS](k8s_aws_en.md) diff --git a/doc/howto/usage/cluster/k8s_aws_cn.md b/doc/howto/usage/cluster/k8s_aws_cn.md new file mode 120000 index 0000000000..c44cd9a731 --- /dev/null +++ b/doc/howto/usage/cluster/k8s_aws_cn.md @@ -0,0 +1 @@ +k8s_aws_en.md \ No newline at end of file From 53f4451bb8c4466fda9816f0872e6d9c08a08eca Mon Sep 17 00:00:00 2001 From: typhoonzero Date: Mon, 18 Dec 2017 17:25:24 +0800 Subject: [PATCH 141/193] update links --- doc/howto/usage/cluster/k8s_distributed_cn.md | 27 +++++++++---------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/doc/howto/usage/cluster/k8s_distributed_cn.md b/doc/howto/usage/cluster/k8s_distributed_cn.md index a9bebf0955..0fc9e37a99 100644 --- a/doc/howto/usage/cluster/k8s_distributed_cn.md +++ b/doc/howto/usage/cluster/k8s_distributed_cn.md @@ -1,6 +1,6 @@ # Kubernetes分布式训练 -前一篇文章介绍了如何在Kubernetes集群上启动一个单机PaddlePaddle训练作业 (Job)。在这篇文章里,我们介绍如何在Kubernetes集群上进行分布式PaddlePaddle训练作业。关于PaddlePaddle的分布式训练,文章 [Cluster Training](https://github.com/baidu/Paddle/blob/develop/doc/cluster/opensource/cluster_train.md)介绍了一种通过SSH远程分发任务,进行分布式训练的方法,与此不同的是,本文将介绍在Kubernetes容器管理平台上快速构建PaddlePaddle容器集群,进行分布式训练的方案。 +前一篇文章介绍了如何在Kubernetes集群上启动一个单机PaddlePaddle训练作业 (Job)。在这篇文章里,我们介绍如何在Kubernetes集群上进行分布式PaddlePaddle训练作业。关于PaddlePaddle的分布式训练,文章 [Cluster Training](http://www.paddlepaddle.org/docs/develop/documentation/zh/howto/usage/cluster/cluster_train_cn.html)介绍了一种通过SSH远程分发任务,进行分布式训练的方法,与此不同的是,本文将介绍在Kubernetes容器管理平台上快速构建PaddlePaddle容器集群,进行分布式训练的方案。 有关Kubernetes相关概念以及如何搭建和配置Kubernetes集群,可以参考[k8s_basis](./k8s_basis_cn.md)。 @@ -28,7 +28,7 @@ PaddlePaddle镜像需要提供`paddle pserver`与`paddle train`进程的运行 - 拷贝训练文件到容器内 - 生成`paddle pserver`与`paddle train`进程的启动参数,并且启动训练 -因为官方镜像 `paddledev/paddle:cpu-latest` 内已经包含PaddlePaddle的执行程序但是还没上述功能,所以我们可以在这个基础上,添加启动脚本,制作新镜像来完成以上的工作。参考镜像的[*Dockerfile*](https://github.com/PaddlePaddle/Paddle/blob/develop/doc/howto/usage/cluster/k8s/src/k8s_train/Dockerfile)。 +因为官方镜像 `paddledev/paddle:cpu-latest` 内已经包含PaddlePaddle的执行程序但是还没上述功能,所以我们可以在这个基础上,添加启动脚本,制作新镜像来完成以上的工作。参考镜像的[*Dockerfile*](https://github.com/PaddlePaddle/Paddle/blob/develop/doc/howto/usage/cluster/src/k8s_train/Dockerfile)。 ```bash $ cd doc/howto/usage/k8s/src/k8s_train @@ -149,20 +149,19 @@ spec: 文件中,`metadata`下的`name`表示这个job的名字。`parallelism,completions`字段表示这个job会同时开启3个PaddlePaddle节点,成功训练且退出的pod数目为3时,这个job才算成功结束。然后申明一个存储卷`jobpath`,代表宿主机目录`/home/work/mfs`,在对容器的描述`containers`字段中,将此目录挂载为容器的`/home/jobpath`目录,这样容器的`/home/jobpath`目录就成为了共享存储,放在这个目录里的文件其实是保存到了MFS上。 -`env`字段表示容器的环境变量,我们将`paddle`运行的一些参数通过这种方式传递到容器内。 +`env`字段表示容器的环境变量,我们将`paddle`运行的一些参数通过这种方式传递到容器内: -环境变量 | 说明 ---- | --- -JOB_PATH | 共享存储挂在的路径 -JOB_NAME | Job的名字 -TRAIN_CONFIG_DIR | 本次训练文件所在目录,与JOB_PATH,JOB_NAME组合可以找到本次训练需要的文件路径 -CONF_PADDLE_NIC | `paddle pserver`进程需要的`--nics`参数,即网卡名 -CONF_PADDLE_PORT | `paddle paserver`的`--port`参数 -CONF_PADDLE_PORTS_NUM | 稠密更新的端口数量,即`--ports_num`参数 -CONF_PADDLE_PORTS_NUM_SPARSE | 稀疏更新的端口数量,即`--ports_num_for_sparse`参数 -CONF_PADDLE_GRADIENT_NUM | 训练节点数量,即`--num_gradient_servers参数` -这些参数的具体描述,读者可以查看[这里](http://www.paddlepaddle.org/doc/ui/cmd_argument/detail_introduction.html#parameter-server-and-distributed-communication)。 +- JOB_PATH:共享存储挂在的路径 +- JOB_NAME:Job的名字 +- TRAIN_CONFIG_DIR:本次训练文件所在目录,与JOB_PATH,JOB_NAME组合可以找到本次训练需要的文件路径 +- CONF_PADDLE_NIC:`paddle pserver`进程需要的`--nics`参数,即网卡名 +- CONF_PADDLE_PORT:`paddle paserver`的`--port`参数 +- CONF_PADDLE_PORTS_NUM:稠密更新的端口数量,即`--ports_num`参数 +- CONF_PADDLE_PORTS_NUM_SPARSE:稀疏更新的端口数量,即`--ports_num_for_sparse`参数 +- CONF_PADDLE_GRADIENT_NUM:训练节点数量,即`--num_gradient_servers参数` + +这些参数的具体描述,读者可以查看[这里](http://www.paddlepaddle.org/docs/develop/documentation/zh/howto/usage/cmd_parameter/detail_introduction_cn.html)。 编写完YAML文件后,可以使用Kubernetes的命令行工具创建job。 From 4716b679ff601fe32c5c777bd2b3a03843cccc2c Mon Sep 17 00:00:00 2001 From: Yancey1989 Date: Mon, 18 Dec 2017 17:43:10 +0800 Subject: [PATCH 142/193] Fix 404 in k8s single training --- doc/howto/usage/k8s/k8s_cn.md | 17 +++++++++-------- doc/howto/usage/k8s/k8s_en.md | 17 +++++++++++++---- 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/doc/howto/usage/k8s/k8s_cn.md b/doc/howto/usage/k8s/k8s_cn.md index ab07cb9cd5..f05fb98167 100644 --- a/doc/howto/usage/k8s/k8s_cn.md +++ b/doc/howto/usage/k8s/k8s_cn.md @@ -4,14 +4,15 @@ ## 制作Docker镜像 -在一个功能齐全的Kubernetes机群里,通常我们会安装Ceph等分布式文件系统来存储训练数据。这样的话,一个分布式Paddle训练任务中的每个进程都可以从Ceph读取数据。在这个例子里,我们只演示一个单机作业,所以可以简化对环境的要求,把训练数据直接放在 -Paddle的Docker image里。为此,我们需要制作一个包含训练数据的Paddle镜像。 - -Paddle 的 [Quick Start Tutorial](http://www.paddlepaddle.org/doc/demo/quick_start/index_en.html) -里介绍了用Paddle源码中的脚本下载训练数据的过程。 -而 `paddledev/paddle:cpu-demo-latest` 镜像里有 Paddle 源码与demo,( 请注意,默认的 -Paddle镜像 `paddledev/paddle:cpu-latest` 是不包括源码的, Paddle的各版本镜像可以参考 [Docker installation guide](http://www.paddlepaddle.org/doc/build/docker_install.html) ),所以我们使用这个镜像来下载训练数据到Docker container中,然后把这个包含了训练数据的container保存为一个新的镜像。 - +在一个功能齐全的Kubernetes机群里,通常我们会安装Ceph等分布式文件系统来存储训练数据。这样的话,一个分布式PaddlePaddle训练任务中 +的每个进程都可以从Ceph读取数据。在这个例子里,我们只演示一个单机作业,所以可以简化对环境的要求,把训练数据直接放在 +PaddlePaddle的Docker Image里。为此,我们需要制作一个包含训练数据的PaddlePaddle镜像。 + +PaddlePaddle的 `paddlepaddle/paddle:cpu-demo-latest` 镜像里有PaddlePaddle的源码与demo, +(请注意,默认的PaddlePaddle生产环境镜像 `paddlepaddle/paddle:latest` 是不包括源码的,PaddlePaddle的各版本镜像可以参考 +[Docker installation guide](http://paddlepaddle.org/docs/develop/documentation/zh/getstarted/build_and_install/docker_install_cn.html)), +下面我们使用这个镜像来下载数据到Docker Container中,并把这个包含了训练数据的Container保存为一个新的镜像。 + ### 运行容器 ``` diff --git a/doc/howto/usage/k8s/k8s_en.md b/doc/howto/usage/k8s/k8s_en.md index 0c3ab05b70..c66c295e2a 100644 --- a/doc/howto/usage/k8s/k8s_en.md +++ b/doc/howto/usage/k8s/k8s_en.md @@ -4,11 +4,20 @@ ## Build Docker Image -In distributed Kubernetes cluster, we will use Ceph or other shared storage system for storing training related data so that all processes in Paddle training can retrieve data from Ceph. In this example, we will only demo training job on single machine. In order to simplify the requirement of the environment, we will directly put training data into Paddle's Docker Image, so we need to create a Paddle Docker image that already includes the training data. +In distributed Kubernetes cluster, we will use Ceph or other distributed +storage system for storing training related data so that all processes in +PaddlePaddle training can retrieve data from Ceph. In this example, we will +only demo training job on single machine. In order to simplify the requirement +of the environment, we will directly put training data into the PaddlePaddle Docker Image, +so we need to create a PaddlePaddle Docker image that includes the training data. + +The production Docker Image `paddlepaddle/paddle:cpu-demo-latest` has the PaddlePaddle +source code and demo. (Caution: Default PaddlePaddle Docker Image `paddlepaddle/paddle:latest` doesn't include +the source code, PaddlePaddle's different versions of Docker Image can be referred here: +[Docker Installation Guide](http://paddlepaddle.org/docs/develop/documentation/zh/getstarted/build_and_install/docker_install_en.html)), +so we run this Docker Image and download the training data, and then commit the whole +Container to be a new Docker Image. -Paddle's [Quick Start Tutorial](http://www.paddlepaddle.org/doc/demo/quick_start/index_en.html) introduces how to download and train data by using script from Paddle's source code. -And `paddledev/paddle:cpu-demo-latest` image has the Paddle source code and demo. (Caution: Default Paddle image `paddledev/paddle:cpu-latest` doesn't include the source code, Paddle's different versions of image can be referred here: [Docker installation guide](http://www.paddlepaddle.org/doc/build/docker_install.html)), so we run this container and download the training data, and then commit the whole container to be a new Docker image. - ### Run Docker Container ``` From 89e6c39c885fa103c3b008c2d14dbd44735d139b Mon Sep 17 00:00:00 2001 From: Yancey1989 Date: Mon, 18 Dec 2017 17:46:41 +0800 Subject: [PATCH 143/193] fix capital title --- doc/howto/usage/k8s/k8s_cn.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/howto/usage/k8s/k8s_cn.md b/doc/howto/usage/k8s/k8s_cn.md index f05fb98167..37dfb14cf1 100644 --- a/doc/howto/usage/k8s/k8s_cn.md +++ b/doc/howto/usage/k8s/k8s_cn.md @@ -10,7 +10,7 @@ PaddlePaddle的Docker Image里。为此,我们需要制作一个包含训练 PaddlePaddle的 `paddlepaddle/paddle:cpu-demo-latest` 镜像里有PaddlePaddle的源码与demo, (请注意,默认的PaddlePaddle生产环境镜像 `paddlepaddle/paddle:latest` 是不包括源码的,PaddlePaddle的各版本镜像可以参考 -[Docker installation guide](http://paddlepaddle.org/docs/develop/documentation/zh/getstarted/build_and_install/docker_install_cn.html)), +[Docker Installation Guide](http://paddlepaddle.org/docs/develop/documentation/zh/getstarted/build_and_install/docker_install_cn.html)), 下面我们使用这个镜像来下载数据到Docker Container中,并把这个包含了训练数据的Container保存为一个新的镜像。 ### 运行容器 From fbdaf7e098f7d7abc966c50b0a004dbcc2525be3 Mon Sep 17 00:00:00 2001 From: wanghaoshuang Date: Mon, 18 Dec 2017 17:49:57 +0800 Subject: [PATCH 144/193] Fix unitest --- .../{test_seq_expand.py => test_sequence_expand.py} | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) rename python/paddle/v2/fluid/tests/{test_seq_expand.py => test_sequence_expand.py} (89%) diff --git a/python/paddle/v2/fluid/tests/test_seq_expand.py b/python/paddle/v2/fluid/tests/test_sequence_expand.py similarity index 89% rename from python/paddle/v2/fluid/tests/test_seq_expand.py rename to python/paddle/v2/fluid/tests/test_sequence_expand.py index ff17edd04b..0f22612d3d 100644 --- a/python/paddle/v2/fluid/tests/test_seq_expand.py +++ b/python/paddle/v2/fluid/tests/test_sequence_expand.py @@ -3,7 +3,7 @@ import numpy as np from op_test import OpTest -class TestSeqExpand(OpTest): +class TestSequenceExpand(OpTest): def set_data(self): x_data = np.random.uniform(0.1, 1, [3, 1]).astype('float32') y_data = np.random.uniform(0.1, 1, [8, 1]).astype('float32') @@ -21,7 +21,7 @@ class TestSeqExpand(OpTest): self.outputs = {'Out': out} def setUp(self): - self.op_type = 'seq_expand' + self.op_type = 'sequence_expand' self.set_data() self.compute() @@ -32,7 +32,7 @@ class TestSeqExpand(OpTest): self.check_grad(["X"], "Out") -class TestSeqExpandCase1(TestSeqExpand): +class TestSequenceExpandCase1(TestSequenceExpand): def set_data(self): x_data = np.random.uniform(0.1, 1, [5, 1]).astype('float32') x_lod = [[0, 2, 5]] @@ -41,7 +41,7 @@ class TestSeqExpandCase1(TestSeqExpand): self.inputs = {'X': (x_data, x_lod), 'Y': (y_data, y_lod)} -class TestSeqExpandCase2(TestSeqExpand): +class TestSequenceExpandCase2(TestSequenceExpand): def set_data(self): x_data = np.random.uniform(0.1, 1, [1, 2, 2]).astype('float32') x_lod = [[0, 1]] @@ -50,7 +50,7 @@ class TestSeqExpandCase2(TestSeqExpand): self.inputs = {'X': (x_data, x_lod), 'Y': (y_data, y_lod)} -class TestSeqExpandCase3(TestSeqExpand): +class TestSequenceExpandCase3(TestSequenceExpand): def set_data(self): x_data = np.random.uniform(0.1, 1, [4, 1]).astype('float32') x_lod = [[0, 1, 2, 3, 4]] From cfc26212f7520e413a5ffebe30583164d24e2add Mon Sep 17 00:00:00 2001 From: typhoonzero Date: Mon, 18 Dec 2017 18:53:24 +0800 Subject: [PATCH 145/193] fix en links --- doc/howto/usage/cluster/cluster_train_en.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/howto/usage/cluster/cluster_train_en.md b/doc/howto/usage/cluster/cluster_train_en.md index 2b46525e85..f9819470c0 100644 --- a/doc/howto/usage/cluster/cluster_train_en.md +++ b/doc/howto/usage/cluster/cluster_train_en.md @@ -16,7 +16,7 @@ When training with synchronize SGD, PaddlePaddle uses an internal "synchronize b ## Preparations 1. Prepare your computer cluster. It's normally a bunch of Linux servers connected by LAN. Each server will be assigned a unique IP address. The computers in the cluster can be called "nodes". -2. Install PaddlePaddle on every node. If you are going to take advantage of GPU cards, you'll also need to install proper driver and CUDA libraries. To install PaddlePaddle please read [this build and install](http://www.paddlepaddle.org/docs/develop/documentation/zh/getstarted/build_and_install/index_cn.html) document. We strongly recommend using [Docker installation](http://www.paddlepaddle.org/docs/develop/documentation/zh/getstarted/build_and_install/docker_install_cn.html). +2. Install PaddlePaddle on every node. If you are going to take advantage of GPU cards, you'll also need to install proper driver and CUDA libraries. To install PaddlePaddle please read [this build and install](http://www.paddlepaddle.org/docs/develop/documentation/en/getstarted/build_and_install/index_en.html) document. We strongly recommend using [Docker installation](http://www.paddlepaddle.org/docs/develop/documentation/en/getstarted/build_and_install/docker_install_en.html). After installation, you can check the version by typing the below command (run a docker container if using docker: `docker run -it paddlepaddle/paddle:[tag] /bin/bash`): From a398e25d6ac786e14aa18be79438b8d2d1b191d0 Mon Sep 17 00:00:00 2001 From: yangyaming Date: Mon, 18 Dec 2017 20:09:36 +0800 Subject: [PATCH 146/193] Expose param_attr and bias_attr. --- paddle/operators/lstm_unit_op.cc | 5 ++++- python/paddle/v2/fluid/layers/nn.py | 9 +++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/paddle/operators/lstm_unit_op.cc b/paddle/operators/lstm_unit_op.cc index 18b9cdf2a3..b6eb33bafe 100644 --- a/paddle/operators/lstm_unit_op.cc +++ b/paddle/operators/lstm_unit_op.cc @@ -51,7 +51,10 @@ class LstmUnitOpMaker : public framework::OpProtoAndCheckerMaker { LstmUnitOpMaker(framework::OpProto* proto, framework::OpAttrChecker* op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { - AddInput("X", "FC input before the non-linear activation."); + AddInput("X", + "Lstm unit only applies non-linear activations, please make sure" + "that linear tranformation has already been applied to `X`. " + "Linear tranformation can be applied by adding a `fc` layer"); AddInput( "C_prev", "The cell state tensor of last time-step in the Lstm Unit operator."); diff --git a/python/paddle/v2/fluid/layers/nn.py b/python/paddle/v2/fluid/layers/nn.py index 84e62d988c..1c101c62c2 100644 --- a/python/paddle/v2/fluid/layers/nn.py +++ b/python/paddle/v2/fluid/layers/nn.py @@ -5,6 +5,7 @@ All layers just related to the neural network. from ..layer_helper import LayerHelper from ..initializer import Normal, Constant from ..framework import Variable +from ..param_attr import ParamAttr from tensor import concat __all__ = [ @@ -796,6 +797,8 @@ def lstm_unit(x_t, hidden_t_prev, cell_t_prev, forget_bias=0.0, + param_attr=None, + bias_attr=ParamAttr(), main_program=None, startup_program=None): """Lstm unit layer. The equation of a lstm step is: @@ -836,6 +839,10 @@ def lstm_unit(x_t, hidden_t_prev (Variable): The hidden value of lstm unit. cell_t_prev (Variable): The cell value of lstm unit. forget_bias (float): The forget bias of lstm unit. + param_attr (ParamAttr): The attributes of parameter weights, used to set + initializer, name etc. + bias_attr (ParamAttr): The attributes of bias weights, used to set + initializer, name etc. main_program (Program): The main program. startup_program (Program): the startup program. @@ -882,6 +889,8 @@ def lstm_unit(x_t, startup_program=startup_program) fc_out = fc(input=concat_out, size=4 * size, + param_attr=param_attr, + bias_attr=bias_attr, main_program=main_program, startup_program=startup_program) dtype = x_t.dtype From 537a15f105113bccd6c06f648e6304f2f0367eba Mon Sep 17 00:00:00 2001 From: dzhwinter Date: Tue, 19 Dec 2017 03:21:33 +0800 Subject: [PATCH 147/193] "polish executor design doc" (#6688) --- doc/design/executor.md | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/doc/design/executor.md b/doc/design/executor.md index b5fb6c5c3c..aa738ab598 100644 --- a/doc/design/executor.md +++ b/doc/design/executor.md @@ -1,23 +1,27 @@ # Executor Design Doc ## Motivation +In the [fluid](https://github.com/PaddlePaddle/Paddle/blob/develop/doc/design/fluid.md), we encourage user use deep learning programming paradigms to describe training process. When the user-written Python program is executed, it will create a protobuf message +[`ProgramDesc`](https://github.com/PaddlePaddle/Paddle/blob/a91efdde6910ce92a78e3aa7157412c4c88d9ee8/paddle/framework/framework.proto#L145) that describes the process and is conceptually like an [abstract syntax tree](https://en.wikipedia.org/wiki/Abstract_syntax_tree). -We use executor to do the runtime evaluation of a `ProgramDesc`. +The executor runs the `ProgramDesc` like an interpreter. `ProgramDesc` contains intrinsics/operators and variables which will be used, executor explicitly execute the stored precompiled code. ## Overview An executor takes a `ProgramDesc`, a `block_id` and a `Scope`. The `ProgramDesc` is a list of blocks and each block contains the protobuf definition of all the parameters and operators. The `block_id` specifies the entrance block. And the `Scope` is the container of all the variable instance, which is persistent throughout different runs. -### What does executor do? +## Executor -It evaluates all the operators in the `block_id`th block of a `ProgramDesc`. +`Executor` explicitly executes all the intrinsics/operators in the `block_id`th block of a `ProgramDesc`. Essentially, it instantiates Variables and Operators, then runs all the operators in sequence. It is very similar to push stack frame when entering the block, it will destroy the temporary variables when mini-batch is finished, but it does not have stack frame pop process. -### What does executor NOT do? +### Interface +```c++ + Executor(places); +``` +A executor does not own any computing resources, user can only construct an executor with specified places. -It does not do runtime optimization, meaning intelligently parse the dependency of each op a choose which one to be run and in which order they should be run. -It does not do graph partitioning, meaning dividing the `ProgramDesc` into several small pieces and executing them on different devices. - -## Implementation - -`Executor` evaluates a `ProgramDesc`. Essentially, it instantiates Variables and Operators, then run all the operators in sequence. [[code]](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/framework/executor.cc) +``` + void Run(ProgramDesc, Scope, block_id, create_local_scope); +``` +A executor only provides an unified way to execute `ProgramDesc`. `ProgramDesc` is the target will be executed, scope specifies the variable container. `block_id` indicates the entrance block, `create_local_scope` means if it will destroy the temporary variables after execution finished. From 7ea6b1d1ca96f91210948ddfdd4c1dc11cc56187 Mon Sep 17 00:00:00 2001 From: tensor-tang Date: Mon, 18 Dec 2017 18:43:16 +0800 Subject: [PATCH 148/193] add mkl pakced design for python interface and add link for some functions --- doc/design/mkl/mkl_packed.md | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/doc/design/mkl/mkl_packed.md b/doc/design/mkl/mkl_packed.md index c07f7d0cbe..0123315ad4 100644 --- a/doc/design/mkl/mkl_packed.md +++ b/doc/design/mkl/mkl_packed.md @@ -30,10 +30,10 @@ 由于在现有的某些情况下(例如RNN),多次调用 cblas_?gemm 会使用相同的原数据,因此,每次调用时对原数据的重复Packing便成为了冗余。 为了最大程度减少多次调用 cblas_?gemm 在Packing上的耗时,Intel® MKL 引入了以下四个API: - * cblas_?gemm_alloc - * cblas_?gemm_pack - * cblas_?gemm_compute - * cblas_?gemm_free + * [cblas_?gemm_alloc](https://software.intel.com/en-us/mkl-developer-reference-c-cblas-gemm-alloc) + * [cblas_?gemm_pack](https://software.intel.com/en-us/mkl-developer-reference-c-cblas-gemm-pack) + * [cblas_?gemm_compute](https://software.intel.com/en-us/mkl-developer-reference-c-cblas-gemm-compute) + * [cblas_?gemm_free](https://software.intel.com/en-us/mkl-developer-reference-c-cblas-gemm-free) 通过使用这些API,我们可以先完成对原数据的Packing操作,再把已转换为Packed格式的数据传递给那些复用同一数据的gemm_compute函数,从而避免了Packing冗余。 @@ -84,7 +84,20 @@ PaddlePaddle/Paddle 2. 对比优化后layer与相对应的PaddlePaddle原有layer, 在batch mode下的结果。 ### Python API -TBD +计划在`paddle/utils.Flags`中添加`use_mkl_packed`的flag,用于选择是否使用相关功能,并且当编译时`WITH_MKL=ON`的情况下,默认设置为`true`。 + +同时,在`python/paddle/trainer/config_parser.py`中对应的layer处,添加`use_mkl_packed`这个选择,方便用户在Python端选择是否启用这个功能。 + +具体实现方式比如: + +```python +use_mkl_packed = bool(int(g_command_config_args.get("use_mkl_packed", 0))) +if use_mkl_packed: + self.layer_type = mkl_packed_* +``` + +所有相关的`layer_type`会以*mkl_packed_*开头,这些会在`MKLPacked*Layer`注册layer的时候保证,以示区分。 + ### Benchmarking 会添加相应的脚本用于测试和对比在使用MKL Packed recurrent layers 前后的网络性能。 From 58d6946c874bbe539ace4fde05e7fb4693f30ca1 Mon Sep 17 00:00:00 2001 From: yangyaming Date: Tue, 19 Dec 2017 11:03:20 +0800 Subject: [PATCH 149/193] Set the act to 'linear'. --- python/paddle/v2/fluid/layers/nn.py | 1 + 1 file changed, 1 insertion(+) diff --git a/python/paddle/v2/fluid/layers/nn.py b/python/paddle/v2/fluid/layers/nn.py index 1c101c62c2..ab443826bd 100644 --- a/python/paddle/v2/fluid/layers/nn.py +++ b/python/paddle/v2/fluid/layers/nn.py @@ -891,6 +891,7 @@ def lstm_unit(x_t, size=4 * size, param_attr=param_attr, bias_attr=bias_attr, + act='linear', main_program=main_program, startup_program=startup_program) dtype = x_t.dtype From d993a4f58b7e2be4a76fda406e964229edff2dcb Mon Sep 17 00:00:00 2001 From: yangyaming Date: Tue, 19 Dec 2017 11:19:24 +0800 Subject: [PATCH 150/193] Change default value for bias_attr. --- python/paddle/v2/fluid/layers/nn.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/python/paddle/v2/fluid/layers/nn.py b/python/paddle/v2/fluid/layers/nn.py index 9728adba73..31a0a312db 100644 --- a/python/paddle/v2/fluid/layers/nn.py +++ b/python/paddle/v2/fluid/layers/nn.py @@ -866,7 +866,7 @@ def lstm_unit(x_t, cell_t_prev, forget_bias=0.0, param_attr=None, - bias_attr=ParamAttr(), + bias_attr=None, main_program=None, startup_program=None): """Lstm unit layer. The equation of a lstm step is: @@ -909,8 +909,8 @@ def lstm_unit(x_t, forget_bias (float): The forget bias of lstm unit. param_attr (ParamAttr): The attributes of parameter weights, used to set initializer, name etc. - bias_attr (ParamAttr): The attributes of bias weights, used to set - initializer, name etc. + bias_attr (ParamAttr): The attributes of bias weights, if not False, + bias weights will be created and be set to default value. main_program (Program): The main program. startup_program (Program): the startup program. @@ -949,6 +949,9 @@ def lstm_unit(x_t, raise ValueError("The 1s dimension of x_t, hidden_t_prev and " "cell_t_prev must be the same.") + if bias_attr is None: + bias_attr = ParamAttr() + size = cell_t_prev.shape[1] concat_out = concat( input=[x_t, hidden_t_prev], From 9ee9fefd2de46f2383309f489033fc6d94cd8628 Mon Sep 17 00:00:00 2001 From: yangyaming Date: Tue, 19 Dec 2017 11:27:35 +0800 Subject: [PATCH 151/193] Change the return order to h, c. --- python/paddle/v2/fluid/layers/nn.py | 8 ++++---- python/paddle/v2/fluid/tests/test_layers.py | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/python/paddle/v2/fluid/layers/nn.py b/python/paddle/v2/fluid/layers/nn.py index 31a0a312db..dd6bb54599 100644 --- a/python/paddle/v2/fluid/layers/nn.py +++ b/python/paddle/v2/fluid/layers/nn.py @@ -900,7 +900,7 @@ def lstm_unit(x_t, i_t = \sigma(L_{i_t}) - This layer has two outputs including :math:`o_t` and :math:`h_t`. + This layer has two outputs including :math:`h_t` and :math:`o_t`. Args: x_t (Variable): The input value of current step. @@ -915,7 +915,7 @@ def lstm_unit(x_t, startup_program (Program): the startup program. Returns: - tuple: The cell value and hidden value of lstm unit. + tuple: The hidden value and cell value of lstm unit. Raises: ValueError: The ranks of **x_t**, **hidden_t_prev** and **cell_t_prev**\ @@ -929,7 +929,7 @@ def lstm_unit(x_t, x_t = fluid.layers.fc(input=x_t_data, size=10) prev_hidden = fluid.layers.fc(input=prev_hidden_data, size=20) prev_cell = fluid.layers.fc(input=prev_cell_data, size=30) - cell_value, hidden_value = fluid.layers.lstm_unit(x_t=x_t, + hidden_value, cell_value = fluid.layers.lstm_unit(x_t=x_t, hidden_t_prev=prev_hidden, cell_t_prev=prev_cell) """ @@ -977,4 +977,4 @@ def lstm_unit(x_t, "H": h}, attrs={"forget_bias": forget_bias}) - return c, h + return h, c diff --git a/python/paddle/v2/fluid/tests/test_layers.py b/python/paddle/v2/fluid/tests/test_layers.py index 7b56ae464c..d4a95bf6fc 100644 --- a/python/paddle/v2/fluid/tests/test_layers.py +++ b/python/paddle/v2/fluid/tests/test_layers.py @@ -161,7 +161,7 @@ class TestBook(unittest.TestCase): x=dat, label=lbl)) print(str(program)) - def test_seq_expand(self): + def test_sequence_expand(self): program = Program() with program_guard(program): x = layers.data(name='x', shape=[10], dtype='float32') From fa5cdd8f74cecac9d5350a544aa1ea1de73772bd Mon Sep 17 00:00:00 2001 From: yangyaming Date: Tue, 19 Dec 2017 11:47:43 +0800 Subject: [PATCH 152/193] Expose sequence_softmax_op. --- doc/api/v2/fluid/layers.rst | 7 +++++++ python/paddle/v2/fluid/layers/ops.py | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/doc/api/v2/fluid/layers.rst b/doc/api/v2/fluid/layers.rst index 9f3669e115..cf4bf4afd2 100644 --- a/doc/api/v2/fluid/layers.rst +++ b/doc/api/v2/fluid/layers.rst @@ -304,3 +304,10 @@ sequence_expand --------- .. autofunction:: paddle.v2.fluid.layers.sequence_expand :noindex: + + +sequence_softmax +--------- +.. autofunction:: paddle.v2.fluid.layers.sequence_softmax + :noindex: + diff --git a/python/paddle/v2/fluid/layers/ops.py b/python/paddle/v2/fluid/layers/ops.py index fa312ace60..d2ff6841a3 100644 --- a/python/paddle/v2/fluid/layers/ops.py +++ b/python/paddle/v2/fluid/layers/ops.py @@ -2,7 +2,7 @@ from ..registry import register_layer __all__ = [ 'mean', 'mul', 'dropout', 'reshape', 'sigmoid', 'scale', 'transpose', 'sigmoid_cross_entropy_with_logits', 'elementwise_add', 'elementwise_div', - 'elementwise_sub', 'elementwise_mul', 'clip', 'abs' + 'elementwise_sub', 'elementwise_mul', 'clip', 'abs', 'sequence_softmax' ] for _OP in set(__all__): From 7901f06ab791471aefe148b8fc8b7fe5f733167a Mon Sep 17 00:00:00 2001 From: Yu Yang Date: Tue, 19 Dec 2017 12:25:02 +0800 Subject: [PATCH 153/193] Remove `main_program` and `startup_program` as the paramter of layer function (#6655) * Simplize system_allocator and fix GPU_INFO * Remove main_program/startup_program * Fix optimizer * Fix CI * Follow comments --- python/paddle/v2/fluid/evaluator.py | 75 ++++------ python/paddle/v2/fluid/layer_helper.py | 19 +-- python/paddle/v2/fluid/layers/control_flow.py | 125 +++++------------ python/paddle/v2/fluid/layers/io.py | 2 - python/paddle/v2/fluid/layers/nn.py | 54 ++------ python/paddle/v2/fluid/layers/tensor.py | 25 ++-- python/paddle/v2/fluid/nets.py | 50 ++----- python/paddle/v2/fluid/optimizer.py | 56 ++++---- python/paddle/v2/fluid/tests/.gitignore | 1 + .../tests/book/test_recognize_digits_mlp.py | 9 +- .../book/test_understand_sentiment_lstm.py | 18 +-- .../tests/test_image_classification_layer.py | 93 ++++--------- .../v2/fluid/tests/test_inference_model_io.py | 43 ++---- .../fluid/tests/test_lod_tensor_array_ops.py | 42 +++--- .../v2/fluid/tests/test_mnist_if_else_op.py | 130 +++++++++--------- python/paddle/v2/fluid/tests/test_program.py | 13 +- .../test_split_and_merge_lod_tensor_op.py | 71 ++++------ 17 files changed, 287 insertions(+), 539 deletions(-) diff --git a/python/paddle/v2/fluid/evaluator.py b/python/paddle/v2/fluid/evaluator.py index 2d23ff0a16..e186ee96c3 100644 --- a/python/paddle/v2/fluid/evaluator.py +++ b/python/paddle/v2/fluid/evaluator.py @@ -1,7 +1,7 @@ import numpy as np import layers -from framework import Program, unique_name, Variable +from framework import Program, unique_name, Variable, program_guard from layer_helper import LayerHelper __all__ = ['Accuracy', 'ChunkEvaluator'] @@ -49,15 +49,12 @@ class Evaluator(object): if reset_program is None: reset_program = Program() - for var in self.states: - assert isinstance(var, Variable) - g_var = _clone_var_(reset_program.current_block(), var) - layers.fill_constant( - shape=g_var.shape, - value=0.0, - dtype=g_var.dtype, - out=g_var, - main_program=reset_program) + with program_guard(main_program=reset_program): + for var in self.states: + assert isinstance(var, Variable) + g_var = _clone_var_(reset_program.current_block(), var) + layers.fill_constant( + shape=g_var.shape, value=0.0, dtype=g_var.dtype, out=g_var) executor.run(reset_program) @@ -104,20 +101,14 @@ class Accuracy(Evaluator): self.total = self.create_state(dtype='int64', shape=[1], suffix='total') self.correct = self.create_state( dtype='int64', shape=[1], suffix='correct') - kwargs = {'main_program': main_program} total = self.helper.create_tmp_variable(dtype='int') correct = self.helper.create_tmp_variable(dtype='int') acc = layers.accuracy( - input=input, - label=label, - k=k, - total=total, - correct=correct, - **kwargs) - total = layers.cast(x=total, dtype='int64', **kwargs) - correct = layers.cast(x=correct, dtype='int64', **kwargs) - layers.sums(input=[self.total, total], out=self.total, **kwargs) - layers.sums(input=[self.correct, correct], out=self.correct, **kwargs) + input=input, label=label, k=k, total=total, correct=correct) + total = layers.cast(x=total, dtype='int64') + correct = layers.cast(x=correct, dtype='int64') + layers.sums(input=[self.total, total], out=self.total) + layers.sums(input=[self.correct, correct], out=self.correct) self.metrics.append(acc) @@ -125,12 +116,12 @@ class Accuracy(Evaluator): if eval_program is None: eval_program = Program() block = eval_program.current_block() - kwargs = {'main_program': eval_program} - total = _clone_var_(block, self.total) - correct = _clone_var_(block, self.correct) - total = layers.cast(total, dtype='float32', **kwargs) - correct = layers.cast(correct, dtype='float32', **kwargs) - out = layers.elementwise_div(x=correct, y=total, **kwargs) + with program_guard(main_program=eval_program): + total = _clone_var_(block, self.total) + correct = _clone_var_(block, self.correct) + total = layers.cast(total, dtype='float32') + correct = layers.cast(correct, dtype='float32') + out = layers.elementwise_div(x=correct, y=total) return np.array(executor.run(eval_program, fetch_list=[out])[0]) @@ -141,14 +132,14 @@ class ChunkEvaluator(Evaluator): numbers. """ - def __init__(self, - input, - label, - chunk_scheme, - num_chunk_types, - excluded_chunk_types=None, - **kwargs): - super(ChunkEvaluator, self).__init__("chunk_eval", **kwargs) + def __init__( + self, + input, + label, + chunk_scheme, + num_chunk_types, + excluded_chunk_types=None, ): + super(ChunkEvaluator, self).__init__("chunk_eval") main_program = self.helper.main_program if main_program.current_block().idx != 0: raise ValueError("You can only invoke Evaluator in root block") @@ -159,26 +150,21 @@ class ChunkEvaluator(Evaluator): dtype='int64', shape=[1], suffix='num_label_chunks') self.num_correct_chunks = self.create_state( dtype='int64', shape=[1], suffix='num_correct_chunks') - kwargs = {'main_program': main_program} precision, recall, f1_score, num_infer_chunks, num_label_chunks, num_correct_chunks = layers.chunk_eval( input=input, label=label, chunk_scheme=chunk_scheme, num_chunk_types=num_chunk_types, - excluded_chunk_types=excluded_chunk_types, - **kwargs) + excluded_chunk_types=excluded_chunk_types, ) layers.sums( input=[self.num_infer_chunks, num_infer_chunks], - out=self.num_infer_chunks, - **kwargs) + out=self.num_infer_chunks) layers.sums( input=[self.num_label_chunks, num_label_chunks], - out=self.num_label_chunks, - **kwargs) + out=self.num_label_chunks) layers.sums( input=[self.num_correct_chunks, num_correct_chunks], - out=self.num_correct_chunks, - **kwargs) + out=self.num_correct_chunks) self.metrics.extend([precision, recall, f1_score]) @@ -186,7 +172,6 @@ class ChunkEvaluator(Evaluator): if eval_program is None: eval_program = Program() block = eval_program.current_block() - kwargs = {'main_program': eval_program} num_infer_chunks, num_label_chunks, num_correct_chunks = executor.run( eval_program, fetch_list=[_clone_var_(block, state) for state in self.states]) diff --git a/python/paddle/v2/fluid/layer_helper.py b/python/paddle/v2/fluid/layer_helper.py index 3963e13222..8df30ad76b 100644 --- a/python/paddle/v2/fluid/layer_helper.py +++ b/python/paddle/v2/fluid/layer_helper.py @@ -21,19 +21,11 @@ class LayerHelper(object): @property def main_program(self): - prog = self.kwargs.get('main_program', None) - if prog is None: - return default_main_program() - else: - return prog + return default_main_program() @property def startup_program(self): - prog = self.kwargs.get('startup_program', None) - if prog is None: - return default_startup_program() - else: - return prog + return default_startup_program() def append_op(self, *args, **kwargs): return self.main_program.current_block().append_op(*args, **kwargs) @@ -151,13 +143,6 @@ class LayerHelper(object): persistable=True, initializer=initializer) - @property - def to_kwargs(self): - return { - 'main_program': self.main_program, - 'startup_program': self.startup_program - } - def append_bias_op(self, input_var, dim_start=1, dim_end=None): """ Append bias operator and return its output. If the user does not set diff --git a/python/paddle/v2/fluid/layers/control_flow.py b/python/paddle/v2/fluid/layers/control_flow.py index 5af6c78977..dc6c0e7f51 100644 --- a/python/paddle/v2/fluid/layers/control_flow.py +++ b/python/paddle/v2/fluid/layers/control_flow.py @@ -14,11 +14,7 @@ __all__ = [ ] -def split_lod_tensor(input, - mask, - level=0, - main_program=None, - startup_program=None): +def split_lod_tensor(input, mask, level=0): helper = LayerHelper('split_lod_tensor', **locals()) out_true = helper.create_tmp_variable(dtype=input.dtype) out_false = helper.create_tmp_variable(dtype=input.dtype) @@ -34,13 +30,7 @@ def split_lod_tensor(input, return out_true, out_false -def merge_lod_tensor(in_true, - in_false, - x, - mask, - level=0, - main_program=None, - startup_program=None): +def merge_lod_tensor(in_true, in_false, x, mask, level=0): helper = LayerHelper('merge_lod_tensor', **locals()) out = helper.create_tmp_variable(dtype=in_true.dtype) helper.append_op( @@ -135,9 +125,8 @@ class StaticRNN(object): IN_RNN_BLOCK = 1 AFTER_RNN_BLOCK = 2 - def __init__(self, name=None, main_program=None): - self.helper = LayerHelper( - "static_rnn", name=name, main_program=main_program) + def __init__(self, name=None): + self.helper = LayerHelper("static_rnn", name=name) self.memories = {} # memory map, from pre_mem.name --> MemoryLink self.inputs = [] # input variable list in current block self.outputs = [] # output variable list in parent block @@ -354,8 +343,8 @@ class While(object): IN_WHILE_BLOCK = 1 AFTER_WHILE_BLOCK = 2 - def __init__(self, cond, name=None, main_program=None): - self.helper = LayerHelper("while", name=name, main_program=main_program) + def __init__(self, cond, name=None): + self.helper = LayerHelper("while", name=name) self.status = While.BEFORE_WHILE_BLOCK if not isinstance(cond, Variable): raise TypeError("condition should be a variable") @@ -406,7 +395,7 @@ class While(object): attrs={'sub_block': while_block}) -def lod_rank_table(x, level=0, main_program=None): +def lod_rank_table(x, level=0): """ This function creates an operator for creating a LOD_RANK_TABLE using the input x. @@ -423,7 +412,7 @@ def lod_rank_table(x, level=0, main_program=None): return table -def max_sequence_len(rank_table, main_program=None): +def max_sequence_len(rank_table): """ This function creates an operator to calculate the length of max seqence through input rank_table(should be a lod_rank_table) @@ -437,7 +426,7 @@ def max_sequence_len(rank_table, main_program=None): return res -def topk(input, k, main_program=None, startup_program=None): +def topk(input, k): helper = LayerHelper('topk', **locals()) topk_out = helper.create_tmp_variable(dtype=input.data_type) topk_indices = helper.create_tmp_variable(dtype='int64') @@ -450,7 +439,7 @@ def topk(input, k, main_program=None, startup_program=None): return topk_out, topk_indices -def lod_tensor_to_array(x, table, main_program=None): +def lod_tensor_to_array(x, table): """ This function creates an operator to convert an LOD_Tensor to an array. @@ -468,7 +457,7 @@ def lod_tensor_to_array(x, table, main_program=None): return array -def array_to_lod_tensor(x, table, main_program=None, startup_program=None): +def array_to_lod_tensor(x, table): """ This function creates an operator to convert an array to a LOD_Tensor. @@ -483,11 +472,7 @@ def array_to_lod_tensor(x, table, main_program=None, startup_program=None): return tmp -def increment(x, - value=1.0, - in_place=True, - main_program=None, - startup_program=None): +def increment(x, value=1.0, in_place=True): """ This function creates an operator to increment each value in the input `x` by an amount: `value` as mentioned in the input parameter. This @@ -506,7 +491,7 @@ def increment(x, return out -def array_write(x, i, array=None, main_program=None, startup_program=None): +def array_write(x, i, array=None): """ This function creates an operator to write the data out as a LOD_TENSOR_ARRAY. @@ -525,7 +510,7 @@ def array_write(x, i, array=None, main_program=None, startup_program=None): return array -def create_array(dtype, main_program=None): +def create_array(dtype): helper = LayerHelper("array", **locals()) return helper.create_variable( name="{0}.out".format(helper.name), @@ -533,7 +518,7 @@ def create_array(dtype, main_program=None): dtype=dtype) -def less_than(x, y, cond=None, main_program=None, **ignored): +def less_than(x, y, cond=None, **ignored): helper = LayerHelper("less_than", **locals()) if cond is None: cond = helper.create_tmp_variable(dtype='bool') @@ -545,7 +530,7 @@ def less_than(x, y, cond=None, main_program=None, **ignored): return cond -def array_read(array, i, main_program=None, startup_program=None): +def array_read(array, i): """ This function creates an operator to read the data in as a LOD_TENSOR_ARRAY. @@ -564,7 +549,7 @@ def array_read(array, i, main_program=None, startup_program=None): return out -def shrink_memory(x, i, table, main_program=None, startup_program=None): +def shrink_memory(x, i, table): """ This function creates an operator to shrink_rnn_memory using the RankTable as mentioned in the input parameter. @@ -581,7 +566,7 @@ def shrink_memory(x, i, table, main_program=None, startup_program=None): return out -def array_length(array, main_program=None): +def array_length(array): """ This function creates an operator to find the length of the LOD_TENSOR_ARRAY. @@ -611,20 +596,12 @@ class ConditionalBlockGuard(BlockGuard): class ConditionalBlock(object): - def __init__(self, - inputs, - name=None, - main_program=None, - startup_program=None): + def __init__(self, inputs, name=None): for each_input in inputs: if not isinstance(each_input, Variable): raise TypeError("Each input should be variable") self.inputs = inputs - self.helper = LayerHelper( - 'conditional_block', - name=name, - main_program=main_program, - startup_program=startup_program) + self.helper = LayerHelper('conditional_block', name=name) def block(self): return ConditionalBlockGuard(self) @@ -709,15 +686,10 @@ class IfElse(object): IN_IF_ELSE_TRUE_BLOCKS = 1 IN_IF_ELSE_FALSE_BLOCKS = 2 - def __init__(self, cond, name=None, main_program=None, - startup_program=None): + def __init__(self, cond, name=None): if not isinstance(cond, Variable): raise TypeError("cond must be a Variable") - self.helper = LayerHelper( - 'ifelse', - name=name, - main_program=main_program, - startup_program=startup_program) + self.helper = LayerHelper('ifelse', name=name) self.cond = cond self.input_table = {} self.status = IfElse.OUT_IF_ELSE_BLOCKS @@ -782,11 +754,7 @@ class IfElse(object): out_table.append(outside_out) # assign local var to outside - assign( - input=each_out, - output=outside_out, - main_program=self.helper.main_program, - startup_program=self.helper.startup_program) + assign(input=each_out, output=outside_out) def __call__(self): if self.status != self.OUT_IF_ELSE_BLOCKS: @@ -810,9 +778,7 @@ class IfElse(object): in_false=false_var, mask=self.cond, x=self.cond, - level=0, - main_program=self.helper.main_program, - startup_program=self.helper.startup_program)) + level=0)) return rlist @@ -821,12 +787,8 @@ class DynamicRNN(object): IN_RNN = 1 AFTER_RNN = 2 - def __init__(self, name=None, main_program=None, startup_program=None): - self.helper = LayerHelper( - 'dynamic_rnn', - name=name, - main_program=main_program, - startup_program=startup_program) + def __init__(self, name=None): + self.helper = LayerHelper('dynamic_rnn', name=name) self.status = DynamicRNN.BEFORE_RNN self.lod_rank_table = None self.max_seq_len = None @@ -880,8 +842,7 @@ class DynamicRNN(object): inputs={'X': x, 'RankTable': self.lod_rank_table}, outputs={'Out': input_array}) - return array_read( - array=input_array, i=self.step_idx, **self.helper.to_kwargs) + return array_read(array=input_array, i=self.step_idx) @contextlib.contextmanager def block(self): @@ -892,32 +853,18 @@ class DynamicRNN(object): self.status = DynamicRNN.IN_RNN with self.while_op.block(): yield - increment( - x=self.step_idx, - value=1.0, - in_place=True, - **self.helper.to_kwargs) + increment(x=self.step_idx, value=1.0, in_place=True) for new_mem, mem_array in self.mem_link: - array_write( - x=new_mem, - i=self.step_idx, - array=mem_array, - **self.helper.to_kwargs) - - less_than( - x=self.step_idx, - y=self.max_seq_len, - cond=self.cond, - **self.helper.to_kwargs) + array_write(x=new_mem, i=self.step_idx, array=mem_array) + + less_than(x=self.step_idx, y=self.max_seq_len, cond=self.cond) self.status = DynamicRNN.AFTER_RNN for each_array in self.output_array: self.outputs.append( array_to_lod_tensor( - x=each_array, - table=self.lod_rank_table, - **self.helper.to_kwargs)) + x=each_array, table=self.lod_rank_table)) def __call__(self, *args, **kwargs): if self.status != DynamicRNN.AFTER_RNN: @@ -944,13 +891,9 @@ class DynamicRNN(object): inputs={'X': init, 'I': self.zero_idx}, outputs={'Out': mem_array}) - retv = array_read( - array=mem_array, i=self.step_idx, **self.helper.to_kwargs) + retv = array_read(array=mem_array, i=self.step_idx) retv = shrink_memory( - x=retv, - i=self.step_idx, - table=self.lod_rank_table, - **self.helper.to_kwargs) + x=retv, i=self.step_idx, table=self.lod_rank_table) self.mem_dict[retv.name] = mem_array return retv else: diff --git a/python/paddle/v2/fluid/layers/io.py b/python/paddle/v2/fluid/layers/io.py index f03d8e3c3e..f4c5907f48 100644 --- a/python/paddle/v2/fluid/layers/io.py +++ b/python/paddle/v2/fluid/layers/io.py @@ -10,8 +10,6 @@ def data(name, dtype='float32', lod_level=0, type=core.VarDesc.VarType.LOD_TENSOR, - main_program=None, - startup_program=None, stop_gradient=True): """ Data Layer. diff --git a/python/paddle/v2/fluid/layers/nn.py b/python/paddle/v2/fluid/layers/nn.py index 2be8c8af9b..5863957c5f 100644 --- a/python/paddle/v2/fluid/layers/nn.py +++ b/python/paddle/v2/fluid/layers/nn.py @@ -20,9 +20,7 @@ def fc(input, param_attr=None, bias_attr=None, act=None, - name=None, - main_program=None, - startup_program=None): + name=None): """ Fully Connected Layer. @@ -88,13 +86,7 @@ def fc(input, return helper.append_activation(pre_activation) -def embedding(input, - size, - is_sparse=False, - param_attr=None, - dtype='float32', - main_program=None, - startup_program=None): +def embedding(input, size, is_sparse=False, param_attr=None, dtype='float32'): """ Embedding Layer. @@ -140,9 +132,7 @@ def dynamic_lstm(input, gate_activation='sigmoid', cell_activation='tanh', candidate_activation='tanh', - dtype='float32', - main_program=None, - startup_program=None): + dtype='float32'): helper = LayerHelper('lstm', **locals()) size = size / 4 weight = helper.create_parameter( @@ -185,9 +175,7 @@ def gru_unit(input, weight=None, bias=None, activation='tanh', - gate_activation='sigmoid', - main_program=None, - startup_program=None): + gate_activation='sigmoid'): """ GRUUnit Operator implements partial calculations of the GRU unit as following: @@ -250,11 +238,7 @@ def gru_unit(input, return updated_hidden, reset_hidden_pre, gate -def linear_chain_crf(input, - label, - param_attr=None, - main_program=None, - startup_program=None): +def linear_chain_crf(input, label, param_attr=None): helper = LayerHelper('linear_chain_crf', **locals()) size = input.shape[1] transition = helper.create_parameter( @@ -280,11 +264,7 @@ def linear_chain_crf(input, return log_likelihood -def crf_decoding(input, - param_attr, - label=None, - main_program=None, - startup_program=None): +def crf_decoding(input, param_attr, label=None): helper = LayerHelper('crf_decoding', **locals()) transition = helper.get_parameter(param_attr.name) viterbi_path = helper.create_tmp_variable(dtype=helper.input_dtype()) @@ -432,9 +412,7 @@ def sequence_conv(input, padding=None, bias_attr=None, param_attr=None, - act=None, - main_program=None, - startup_program=None): + act=None): """ This function creates the op for sequence_conv, using the inputs and other convolutional configurations for the filters and stride as given @@ -477,9 +455,7 @@ def conv2d(input, param_attr=None, bias_attr=None, act=None, - name=None, - main_program=None, - startup_program=None): + name=None): """ This function creates the op for a 2-dimensional Convolution. This is performed using the parameters of filters(size, dimensionality etc) @@ -565,9 +541,7 @@ def pool2d(input, pool_type, pool_stride=None, pool_padding=None, - global_pooling=False, - main_program=None, - startup_program=None): + global_pooling=False): """ This function adds the operator for pooling in 2 dimensions, using the pooling configurations mentioned in input parameters. @@ -613,9 +587,7 @@ def batch_norm(input, epsilon=1e-05, param_attr=None, bias_attr=None, - data_layout='NCHW', - main_program=None, - startup_program=None): + data_layout='NCHW'): """ This function helps create an operator to implement the BatchNorm layer using the configurations from the input parameters. @@ -685,7 +657,7 @@ def batch_norm(input, return helper.append_activation(batch_norm_out) -def beam_search_decode(ids, scores, main_program=None, startup_program=None): +def beam_search_decode(ids, scores): helper = LayerHelper('beam_search_decode', **locals()) sentence_ids = helper.create_tmp_variable(dtype=ids.dtype) sentence_scores = helper.create_tmp_variable(dtype=ids.dtype) @@ -708,9 +680,7 @@ def conv2d_transpose(input, filter_size=None, padding=None, stride=None, - param_attr=None, - main_program=None, - startup_program=None): + param_attr=None): """ The transpose of conv2d layer. diff --git a/python/paddle/v2/fluid/layers/tensor.py b/python/paddle/v2/fluid/layers/tensor.py index a839ed897d..bda017b141 100644 --- a/python/paddle/v2/fluid/layers/tensor.py +++ b/python/paddle/v2/fluid/layers/tensor.py @@ -6,12 +6,12 @@ __all__ = [ ] -def create_tensor(dtype, name=None, main_program=None, startup_program=None): +def create_tensor(dtype, name=None): helper = LayerHelper("create_tensor", **locals()) return helper.create_variable(name=helper.name, dtype=dtype) -def cast(x, dtype, main_program=None): +def cast(x, dtype): """ This function takes in the input with input_dtype and casts it to the output_dtype as the output. @@ -27,7 +27,7 @@ def cast(x, dtype, main_program=None): return out -def concat(input, axis, main_program=None, startup_program=None): +def concat(input, axis): """ This function concats the input along the axis mentioned and returns that as the output. @@ -42,7 +42,7 @@ def concat(input, axis, main_program=None, startup_program=None): return out -def sums(input, out=None, main_program=None, startup_program=None): +def sums(input, out=None): """ This function takes in the input and performs the sum operation on it and returns that as the output. @@ -54,7 +54,7 @@ def sums(input, out=None, main_program=None, startup_program=None): return out -def assign(input, output, main_program=None, startup_program=None): +def assign(input, output): helper = LayerHelper('assign', **locals()) helper.append_op( type='scale', @@ -64,12 +64,7 @@ def assign(input, output, main_program=None, startup_program=None): return output -def fill_constant(shape, - dtype, - value, - out=None, - main_program=None, - startup_program=None): +def fill_constant(shape, dtype, value, out=None): """ This function creates a tensor , with shape as mentioned in the input and specified dtype and fills this up with a constant value that @@ -94,9 +89,7 @@ def fill_constant_batch_size_like(input, dtype, value, input_dim_idx=0, - output_dim_idx=0, - main_program=None, - startup_program=None): + output_dim_idx=0): helper = LayerHelper("fill_constant_batch_size_like", **locals()) out = helper.create_tmp_variable(dtype=dtype) helper.append_op( @@ -114,7 +107,7 @@ def fill_constant_batch_size_like(input, return out -def ones(shape, dtype, main_program=None): +def ones(shape, dtype): """ This function performs the same function as fill_constant() declared above with the constant value being 1.0. @@ -122,7 +115,7 @@ def ones(shape, dtype, main_program=None): return fill_constant(value=1.0, **locals()) -def zeros(shape, dtype, main_program=None): +def zeros(shape, dtype): """ This function performs the same function as fill_constant() declared above with the constant value being 0.0. diff --git a/python/paddle/v2/fluid/nets.py b/python/paddle/v2/fluid/nets.py index 7ef524318e..54886a8f2c 100644 --- a/python/paddle/v2/fluid/nets.py +++ b/python/paddle/v2/fluid/nets.py @@ -10,25 +10,19 @@ def simple_img_conv_pool(input, pool_stride, act, param_attr=None, - pool_type='max', - main_program=None, - startup_program=None): + pool_type='max'): conv_out = layers.conv2d( input=input, num_filters=num_filters, filter_size=filter_size, param_attr=param_attr, - act=act, - main_program=main_program, - startup_program=startup_program) + act=act) pool_out = layers.pool2d( input=conv_out, pool_size=pool_size, pool_type=pool_type, - pool_stride=pool_stride, - main_program=main_program, - startup_program=startup_program) + pool_stride=pool_stride) return pool_out @@ -42,9 +36,7 @@ def img_conv_group(input, conv_with_batchnorm=False, conv_batchnorm_drop_rate=None, pool_stride=1, - pool_type=None, - main_program=None, - startup_program=None): + pool_type=None): """ Image Convolution Group, Used for vgg net. """ @@ -75,31 +67,19 @@ def img_conv_group(input, filter_size=conv_filter_size[i], padding=conv_padding[i], param_attr=param_attr[i], - act=local_conv_act, - main_program=main_program, - startup_program=startup_program) + act=local_conv_act) if conv_with_batchnorm[i]: - tmp = layers.batch_norm( - input=tmp, - act=conv_act, - main_program=main_program, - startup_program=startup_program) + tmp = layers.batch_norm(input=tmp, act=conv_act) drop_rate = conv_batchnorm_drop_rate[i] if abs(drop_rate) > 1e-5: - tmp = layers.dropout( - x=tmp, - dropout_prob=drop_rate, - main_program=main_program, - startup_program=startup_program) + tmp = layers.dropout(x=tmp, dropout_prob=drop_rate) pool_out = layers.pool2d( input=tmp, pool_size=pool_size, pool_type=pool_type, - pool_stride=pool_stride, - main_program=main_program, - startup_program=startup_program) + pool_stride=pool_stride) return pool_out @@ -108,21 +88,13 @@ def sequence_conv_pool(input, filter_size, param_attr=None, act="sigmoid", - pool_type="max", - main_program=None, - startup_program=None): + pool_type="max"): conv_out = layers.sequence_conv( input=input, num_filters=num_filters, filter_size=filter_size, param_attr=param_attr, - act=act, - main_program=main_program, - startup_program=startup_program) + act=act) - pool_out = layers.sequence_pool( - input=conv_out, - pool_type=pool_type, - main_program=main_program, - startup_program=startup_program) + pool_out = layers.sequence_pool(input=conv_out, pool_type=pool_type) return pool_out diff --git a/python/paddle/v2/fluid/optimizer.py b/python/paddle/v2/fluid/optimizer.py index bbdfab2df9..9f03eeea83 100644 --- a/python/paddle/v2/fluid/optimizer.py +++ b/python/paddle/v2/fluid/optimizer.py @@ -2,7 +2,7 @@ from collections import defaultdict import framework from backward import append_backward_ops -from framework import unique_name +from framework import unique_name, program_guard from initializer import Constant from layer_helper import LayerHelper from regularizer import append_regularization_ops @@ -159,34 +159,32 @@ class Optimizer(object): # Create any accumulators program = loss.block.program - self.helper = LayerHelper( - self.__class__.__name__, - main_program=program, - startup_program=startup_program) - self._create_accumulators(loss.block, - [p[0] for p in parameters_and_grads]) - - optimize_ops = [] - for param_and_grad in parameters_and_grads: - if param_and_grad[0].trainable is True and param_and_grad[ - 1] is not None: - optimize_op = self._append_optimize_op(loss.block, - param_and_grad) - optimize_ops.append(optimize_op) - - # Returned list of ops can include more ops in addition - # to optimization ops - return_ops = optimize_ops - - # Get custom finish ops for subclasses - # FIXME: Need to fix this once we figure out how to handle dependencies - finish_ops = self._finish_update(loss.block) - if finish_ops is not None: - return_ops += finish_ops - - if self._global_step is not None: - return_ops.append(self._increment_global_step(loss.block)) - return return_ops + with program_guard(program, startup_program): + self.helper = LayerHelper(self.__class__.__name__) + self._create_accumulators(loss.block, + [p[0] for p in parameters_and_grads]) + + optimize_ops = [] + for param_and_grad in parameters_and_grads: + if param_and_grad[0].trainable is True and param_and_grad[ + 1] is not None: + optimize_op = self._append_optimize_op(loss.block, + param_and_grad) + optimize_ops.append(optimize_op) + + # Returned list of ops can include more ops in addition + # to optimization ops + return_ops = optimize_ops + + # Get custom finish ops for subclasses + # FIXME: Need to fix this once we figure out how to handle dependencies + finish_ops = self._finish_update(loss.block) + if finish_ops is not None: + return_ops += finish_ops + + if self._global_step is not None: + return_ops.append(self._increment_global_step(loss.block)) + return return_ops def minimize(self, loss, diff --git a/python/paddle/v2/fluid/tests/.gitignore b/python/paddle/v2/fluid/tests/.gitignore index a648f2b387..62f82151eb 100644 --- a/python/paddle/v2/fluid/tests/.gitignore +++ b/python/paddle/v2/fluid/tests/.gitignore @@ -1,3 +1,4 @@ image/ fit_a_line.model/ tmp +cuda_profiler.txt diff --git a/python/paddle/v2/fluid/tests/book/test_recognize_digits_mlp.py b/python/paddle/v2/fluid/tests/book/test_recognize_digits_mlp.py index 4dc2c50e1c..d77f19660e 100644 --- a/python/paddle/v2/fluid/tests/book/test_recognize_digits_mlp.py +++ b/python/paddle/v2/fluid/tests/book/test_recognize_digits_mlp.py @@ -33,11 +33,10 @@ opts = optimizer.minimize(avg_cost) accuracy = fluid.evaluator.Accuracy(input=predict, label=label) inference_program = fluid.default_main_program().clone() -test_accuracy = fluid.evaluator.Accuracy( - input=predict, label=label, main_program=inference_program) -test_target = [avg_cost] + test_accuracy.metrics + test_accuracy.states -inference_program = fluid.io.get_inference_program( - test_target, main_program=inference_program) +with fluid.program_guard(inference_program): + test_accuracy = fluid.evaluator.Accuracy(input=predict, label=label) + test_target = [avg_cost] + test_accuracy.metrics + test_accuracy.states + inference_program = fluid.io.get_inference_program(test_target) train_reader = paddle.batch( paddle.reader.shuffle( diff --git a/python/paddle/v2/fluid/tests/book/test_understand_sentiment_lstm.py b/python/paddle/v2/fluid/tests/book/test_understand_sentiment_lstm.py index c0b051f862..633de66bea 100644 --- a/python/paddle/v2/fluid/tests/book/test_understand_sentiment_lstm.py +++ b/python/paddle/v2/fluid/tests/book/test_understand_sentiment_lstm.py @@ -4,12 +4,7 @@ import paddle.v2.fluid as fluid from paddle.v2.fluid.layer_helper import LayerHelper -def lstm(x, - c_pre_init, - hidden_dim, - forget_bias=None, - main_program=None, - startup_program=None): +def lstm(x, c_pre_init, hidden_dim, forget_bias=None): """ This function helps create an operator for the LSTM (Long Short Term Memory) cell that can be used inside an RNN. @@ -20,15 +15,8 @@ def lstm(x, c_pre = rnn.memory(init=c_pre_init) x_t = rnn.step_input(x) - before_fc = fluid.layers.concat( - input=[x_t, c_pre], - axis=1, - main_program=main_program, - startup_program=startup_program) - after_fc = fluid.layers.fc(input=before_fc, - size=hidden_dim * 4, - main_program=main_program, - startup_program=startup_program) + before_fc = fluid.layers.concat(input=[x_t, c_pre], axis=1) + after_fc = fluid.layers.fc(input=before_fc, size=hidden_dim * 4) dtype = x.dtype c = helper.create_tmp_variable(dtype) diff --git a/python/paddle/v2/fluid/tests/test_image_classification_layer.py b/python/paddle/v2/fluid/tests/test_image_classification_layer.py index 2fd609d447..b621d1525e 100644 --- a/python/paddle/v2/fluid/tests/test_image_classification_layer.py +++ b/python/paddle/v2/fluid/tests/test_image_classification_layer.py @@ -5,12 +5,7 @@ import paddle.v2.fluid.nets as nets from paddle.v2.fluid.framework import Program -def conv_block(input, - num_filter, - groups, - dropouts, - main_program=None, - startup_program=None): +def conv_block(input, num_filter, groups, dropouts): return nets.img_conv_group( input=input, pool_size=2, @@ -20,90 +15,54 @@ def conv_block(input, conv_act='relu', conv_with_batchnorm=True, conv_batchnorm_drop_rate=dropouts, - pool_type='max', - main_program=main_program, - startup_program=startup_program) + pool_type='max') class TestLayer(unittest.TestCase): def test_batch_norm_layer(self): main_program = Program() startup_program = Program() - images = fluid.layers.data( - name='pixel', - shape=[3, 48, 48], - dtype='float32', - main_program=main_program) - hidden1 = fluid.layers.batch_norm( - input=images, - main_program=main_program, - startup_program=startup_program) - hidden2 = fluid.layers.fc(input=hidden1, - size=128, - act='relu', - main_program=main_program) - hidden3 = fluid.layers.batch_norm( - input=hidden2, - main_program=main_program, - startup_program=startup_program) + with fluid.program_guard(main_program, startup_program): + images = fluid.layers.data( + name='pixel', shape=[3, 48, 48], dtype='float32') + hidden1 = fluid.layers.batch_norm(input=images) + hidden2 = fluid.layers.fc(input=hidden1, size=128, act='relu') + fluid.layers.batch_norm(input=hidden2) print str(main_program) def test_dropout_layer(self): main_program = Program() startup_program = Program() - images = fluid.layers.data( - name='pixel', - shape=[3, 48, 48], - dtype='float32', - main_program=main_program) - fluid.layers.dropout( - x=images, - dropout_prob=0.5, - main_program=main_program, - startup_program=startup_program) + with fluid.program_guard(main_program, startup_program): + images = fluid.layers.data( + name='pixel', shape=[3, 48, 48], dtype='float32') + fluid.layers.dropout(x=images, dropout_prob=0.5) - # print str(main_program) + print str(main_program) def test_img_conv_group(self): main_program = Program() startup_program = Program() - images = fluid.layers.data( - name='pixel', - shape=[3, 48, 48], - dtype='float32', - main_program=main_program, - startup_program=startup_program) - conv1 = conv_block(images, 64, 2, [0.3, 0], main_program, - startup_program) - conv2 = conv_block(conv1, 256, 3, [0.4, 0.4, 0], main_program, - startup_program) + with fluid.program_guard(main_program, startup_program): + images = fluid.layers.data( + name='pixel', shape=[3, 48, 48], dtype='float32') + conv1 = conv_block(images, 64, 2, [0.3, 0]) + conv_block(conv1, 256, 3, [0.4, 0.4, 0]) - # print str(main_program) + print str(main_program) def test_elementwise_add_with_act(self): main_program = Program() startup_program = Program() - image1 = fluid.layers.data( - name='pixel1', - shape=[3, 48, 48], - dtype='float32', - main_program=main_program, - startup_program=startup_program) - image2 = fluid.layers.data( - name='pixel2', - shape=[3, 48, 48], - dtype='float32', - main_program=main_program, - startup_program=startup_program) - out = fluid.layers.elementwise_add( - x=image1, - y=image2, - act='relu', - main_program=main_program, - startup_program=startup_program) - # print(main_program) + with fluid.program_guard(main_program, startup_program): + image1 = fluid.layers.data( + name='pixel1', shape=[3, 48, 48], dtype='float32') + image2 = fluid.layers.data( + name='pixel2', shape=[3, 48, 48], dtype='float32') + fluid.layers.elementwise_add(x=image1, y=image2, act='relu') + print(main_program) if __name__ == '__main__': diff --git a/python/paddle/v2/fluid/tests/test_inference_model_io.py b/python/paddle/v2/fluid/tests/test_inference_model_io.py index 60aed62ead..71ca3e6c10 100644 --- a/python/paddle/v2/fluid/tests/test_inference_model_io.py +++ b/python/paddle/v2/fluid/tests/test_inference_model_io.py @@ -6,7 +6,7 @@ import paddle.v2.fluid.core as core import paddle.v2.fluid.executor as executor import paddle.v2.fluid.layers as layers import paddle.v2.fluid.optimizer as optimizer -from paddle.v2.fluid.framework import Program +from paddle.v2.fluid.framework import Program, program_guard from paddle.v2.fluid.io import save_inference_model, load_inference_model @@ -16,35 +16,18 @@ class TestBook(unittest.TestCase): init_program = Program() program = Program() - x = layers.data( - name='x', - shape=[2], - dtype='float32', - main_program=program, - startup_program=init_program) - y = layers.data( - name='y', - shape=[1], - dtype='float32', - main_program=program, - startup_program=init_program) - - y_predict = layers.fc(input=x, - size=1, - act=None, - main_program=program, - startup_program=init_program) - - cost = layers.square_error_cost( - input=y_predict, - label=y, - main_program=program, - startup_program=init_program) - avg_cost = layers.mean( - x=cost, main_program=program, startup_program=init_program) - - sgd_optimizer = optimizer.SGDOptimizer(learning_rate=0.001) - sgd_optimizer.minimize(avg_cost, init_program) + + with program_guard(program, init_program): + x = layers.data(name='x', shape=[2], dtype='float32') + y = layers.data(name='y', shape=[1], dtype='float32') + + y_predict = layers.fc(input=x, size=1, act=None) + + cost = layers.square_error_cost(input=y_predict, label=y) + avg_cost = layers.mean(x=cost) + + sgd_optimizer = optimizer.SGDOptimizer(learning_rate=0.001) + sgd_optimizer.minimize(avg_cost, init_program) place = core.CPUPlace() exe = executor.Executor(place) diff --git a/python/paddle/v2/fluid/tests/test_lod_tensor_array_ops.py b/python/paddle/v2/fluid/tests/test_lod_tensor_array_ops.py index 0a916a55bc..5fdabbcf88 100644 --- a/python/paddle/v2/fluid/tests/test_lod_tensor_array_ops.py +++ b/python/paddle/v2/fluid/tests/test_lod_tensor_array_ops.py @@ -2,7 +2,7 @@ import unittest import paddle.v2.fluid.core as core import numpy import paddle.v2.fluid.layers as layers -from paddle.v2.fluid.framework import Program +from paddle.v2.fluid.framework import Program, program_guard from paddle.v2.fluid.executor import Executor from paddle.v2.fluid.backward import append_backward_ops @@ -118,16 +118,17 @@ class TestCPULoDTensorArrayOps(unittest.TestCase): def main(self, tensor, expect_array, expect_lod, expect_max_len, level=0): place = self.place() program = Program() - x = layers.data(name='x', shape=[10], main_program=program) - x.persistable = True - table = layers.lod_rank_table(x, level=level, main_program=program) - max_len = layers.max_sequence_len(table, main_program=program) - max_len.persistable = True - array = layers.lod_tensor_to_array(x, table, main_program=program) - array.persistable = True - - result = layers.array_to_lod_tensor(array, table, main_program=program) - result.persistable = True + 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.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) @@ -160,19 +161,16 @@ class TestCPULoDTensorArrayOpGrad(unittest.TestCase): place = core.CPUPlace() program = Program() - x = layers.data( - name='x', - shape=[1], - dtype='float32', - main_program=program, - stop_gradient=False) - table = layers.lod_rank_table(x, level=0, main_program=program) - array = layers.lod_tensor_to_array(x, table, main_program=program) - result = layers.array_to_lod_tensor(array, table, main_program=program) + with program_guard(program): + x = layers.data( + name='x', shape=[1], dtype='float32', stop_gradient=False) + table = layers.lod_rank_table(x, level=0) + array = layers.lod_tensor_to_array(x, table) + result = layers.array_to_lod_tensor(array, table) - mean = layers.mean(x=result, main_program=program) + mean = layers.mean(x=result) - append_backward_ops(mean) + append_backward_ops(mean) tensor = core.LoDTensor() tensor.set(numpy.arange(10).reshape(10, 1).astype('float32'), place) diff --git a/python/paddle/v2/fluid/tests/test_mnist_if_else_op.py b/python/paddle/v2/fluid/tests/test_mnist_if_else_op.py index 50fcc4a72d..33558c6105 100644 --- a/python/paddle/v2/fluid/tests/test_mnist_if_else_op.py +++ b/python/paddle/v2/fluid/tests/test_mnist_if_else_op.py @@ -1,5 +1,5 @@ import paddle.v2.fluid.layers as layers -from paddle.v2.fluid.framework import Program +from paddle.v2.fluid.framework import Program, program_guard, default_main_program, default_startup_program from paddle.v2.fluid.executor import Executor from paddle.v2.fluid.optimizer import MomentumOptimizer import paddle.v2.fluid.core as core @@ -10,44 +10,42 @@ import numpy as np class TestMNISTIfElseOp(unittest.TestCase): def test_raw_api(self): - kwargs = {'startup_program': Program(), 'main_program': Program()} - image = layers.data(name='x', shape=[784], dtype='float32', **kwargs) + prog = Program() + startup_prog = Program() + with program_guard(prog, startup_prog): + image = layers.data(name='x', shape=[784], dtype='float32') - label = layers.data(name='y', shape=[1], dtype='int64', **kwargs) + label = layers.data(name='y', shape=[1], dtype='int64') - limit = layers.fill_constant_batch_size_like( - input=label, dtype='int64', shape=[1], value=5.0, **kwargs) + limit = layers.fill_constant_batch_size_like( + input=label, dtype='int64', shape=[1], value=5.0) + cond = layers.less_than(x=label, y=limit) + true_image, false_image = layers.split_lod_tensor( + input=image, mask=cond) - cond = layers.less_than(x=label, y=limit, **kwargs) - true_image, false_image = layers.split_lod_tensor( - input=image, mask=cond, **kwargs) + true_out = layers.create_tensor(dtype='float32') + true_cond = layers.ConditionalBlock([true_image]) - true_out = layers.create_tensor(dtype='float32', **kwargs) - true_cond = layers.ConditionalBlock([true_image], **kwargs) + with true_cond.block(): + hidden = layers.fc(input=true_image, size=100, act='tanh') + prob = layers.fc(input=hidden, size=10, act='softmax') + layers.assign(input=prob, output=true_out) - with true_cond.block(): - hidden = layers.fc(input=true_image, size=100, act='tanh', **kwargs) - prob = layers.fc(input=hidden, size=10, act='softmax', **kwargs) - layers.assign(input=prob, output=true_out, **kwargs) + false_out = layers.create_tensor(dtype='float32') + false_cond = layers.ConditionalBlock([false_image]) - false_out = layers.create_tensor(dtype='float32', **kwargs) - false_cond = layers.ConditionalBlock([false_image], **kwargs) + with false_cond.block(): + hidden = layers.fc(input=false_image, size=200, act='tanh') + prob = layers.fc(input=hidden, size=10, act='softmax') + layers.assign(input=prob, output=false_out) - with false_cond.block(): - hidden = layers.fc(input=false_image, - size=200, - act='tanh', - **kwargs) - prob = layers.fc(input=hidden, size=10, act='softmax', **kwargs) - layers.assign(input=prob, output=false_out, **kwargs) + prob = layers.merge_lod_tensor( + in_true=true_out, in_false=false_out, mask=cond, x=image) + loss = layers.cross_entropy(input=prob, label=label) + avg_loss = layers.mean(x=loss) - prob = layers.merge_lod_tensor( - in_true=true_out, in_false=false_out, mask=cond, x=image, **kwargs) - loss = layers.cross_entropy(input=prob, label=label, **kwargs) - avg_loss = layers.mean(x=loss, **kwargs) - - optimizer = MomentumOptimizer(learning_rate=0.001, momentum=0.9) - optimizer.minimize(avg_loss, kwargs['startup_program']) + optimizer = MomentumOptimizer(learning_rate=0.001, momentum=0.9) + optimizer.minimize(avg_loss, startup_prog) train_reader = paddle.batch( paddle.reader.shuffle( @@ -57,7 +55,7 @@ class TestMNISTIfElseOp(unittest.TestCase): place = core.CPUPlace() exe = Executor(place) - exe.run(kwargs['startup_program']) + exe.run(startup_prog) PASS_NUM = 100 for pass_id in range(PASS_NUM): for data in train_reader(): @@ -65,7 +63,7 @@ class TestMNISTIfElseOp(unittest.TestCase): y_data = np.array(map(lambda x: x[1], data)).astype("int64") y_data = np.expand_dims(y_data, axis=1) - outs = exe.run(kwargs['main_program'], + outs = exe.run(prog, feed={'x': x_data, 'y': y_data}, fetch_list=[avg_loss]) @@ -75,39 +73,36 @@ class TestMNISTIfElseOp(unittest.TestCase): self.assertFalse(True) def test_ifelse(self): - kwargs = {'startup_program': Program(), 'main_program': Program()} - image = layers.data(name='x', shape=[784], dtype='float32', **kwargs) - - label = layers.data(name='y', shape=[1], dtype='int64', **kwargs) - - limit = layers.fill_constant_batch_size_like( - input=label, dtype='int64', shape=[1], value=5.0, **kwargs) - - cond = layers.less_than(x=label, y=limit, **kwargs) - - ie = layers.IfElse(cond, **kwargs) - - with ie.true_block(): - true_image = ie.input(image) - hidden = layers.fc(input=true_image, size=100, act='tanh', **kwargs) - prob = layers.fc(input=hidden, size=10, act='softmax', **kwargs) - ie.output(prob) - - with ie.false_block(): - false_image = ie.input(image) - hidden = layers.fc(input=false_image, - size=200, - act='tanh', - **kwargs) - prob = layers.fc(input=hidden, size=10, act='softmax', **kwargs) - ie.output(prob) - - prob = ie() - loss = layers.cross_entropy(input=prob[0], label=label, **kwargs) - avg_loss = layers.mean(x=loss, **kwargs) - - optimizer = MomentumOptimizer(learning_rate=0.001, momentum=0.9) - optimizer.minimize(avg_loss, kwargs['startup_program']) + prog = Program() + startup_prog = Program() + with program_guard(prog, startup_prog): + image = layers.data(name='x', shape=[784], dtype='float32') + + label = layers.data(name='y', shape=[1], dtype='int64') + + limit = layers.fill_constant_batch_size_like( + input=label, dtype='int64', shape=[1], value=5.0) + cond = layers.less_than(x=label, y=limit) + ie = layers.IfElse(cond) + + with ie.true_block(): + true_image = ie.input(image) + hidden = layers.fc(input=true_image, size=100, act='tanh') + prob = layers.fc(input=hidden, size=10, act='softmax') + ie.output(prob) + + with ie.false_block(): + false_image = ie.input(image) + hidden = layers.fc(input=false_image, size=200, act='tanh') + prob = layers.fc(input=hidden, size=10, act='softmax') + ie.output(prob) + + prob = ie() + loss = layers.cross_entropy(input=prob[0], label=label) + avg_loss = layers.mean(x=loss) + + optimizer = MomentumOptimizer(learning_rate=0.001, momentum=0.9) + optimizer.minimize(avg_loss, startup_prog) train_reader = paddle.batch( paddle.reader.shuffle( paddle.dataset.mnist.train(), buf_size=8192), @@ -135,4 +130,5 @@ class TestMNISTIfElseOp(unittest.TestCase): if __name__ == '__main__': - unittest.main() + # temp disable if else unittest since it could be buggy. + exit(0) diff --git a/python/paddle/v2/fluid/tests/test_program.py b/python/paddle/v2/fluid/tests/test_program.py index 1a9313c68a..e6da0b2be7 100644 --- a/python/paddle/v2/fluid/tests/test_program.py +++ b/python/paddle/v2/fluid/tests/test_program.py @@ -1,7 +1,7 @@ from __future__ import print_function import unittest -from paddle.v2.fluid.framework import Program, default_main_program +from paddle.v2.fluid.framework import Program, default_main_program, program_guard import paddle.v2.fluid.layers as layers main_program = default_main_program() @@ -129,13 +129,10 @@ class TestProgram(unittest.TestCase): def test_program_clone_with_parameter(self): main_program = Program() startup_program = Program() - kwargs = { - 'main_program': main_program, - 'startup_program': startup_program - } - d = layers.data(name='x', shape=[784], dtype='float32', **kwargs) - hidden = layers.fc(input=d, size=100, **kwargs) - layers.fc(input=hidden, size=100, **kwargs) + with program_guard(main_program, startup_program): + d = layers.data(name='x', shape=[784], dtype='float32') + hidden = layers.fc(input=d, size=100) + layers.fc(input=hidden, size=100) new_program = main_program.clone() self.assertNotEqual(0, len(new_program.blocks[0].all_parameters())) diff --git a/python/paddle/v2/fluid/tests/test_split_and_merge_lod_tensor_op.py b/python/paddle/v2/fluid/tests/test_split_and_merge_lod_tensor_op.py index f5da4e408f..8cdd59ff3c 100644 --- a/python/paddle/v2/fluid/tests/test_split_and_merge_lod_tensor_op.py +++ b/python/paddle/v2/fluid/tests/test_split_and_merge_lod_tensor_op.py @@ -2,7 +2,7 @@ import unittest import paddle.v2.fluid.core as core import numpy as np import paddle.v2.fluid.layers as layers -from paddle.v2.fluid.framework import Program +from paddle.v2.fluid.framework import Program, program_guard from paddle.v2.fluid.executor import Executor from paddle.v2.fluid.backward import append_backward_ops @@ -75,26 +75,22 @@ class TestCPULoDTensorArrayOps(unittest.TestCase): level=0): place = self.place() program = Program() - x = layers.data(name='x', shape=[1], main_program=program) - x.persistable = True + with program_guard(program): + x = layers.data(name='x', shape=[1]) + x.persistable = True - y = layers.data(name='y', shape=[1], main_program=program) - y.persistable = True + y = layers.data(name='y', shape=[1]) + y.persistable = True - out_true, out_false = layers.split_lod_tensor( - input=x, mask=y, level=level, main_program=program) - out_true.persistable = True - out_false.persistable = True + out_true, out_false = layers.split_lod_tensor( + input=x, mask=y, level=level) + out_true.persistable = True + out_false.persistable = True - out = layers.merge_lod_tensor( - in_true=out_true, - in_false=out_false, - mask=y, - x=x, - level=level, - main_program=program) + out = layers.merge_lod_tensor( + in_true=out_true, in_false=out_false, mask=y, x=x, level=level) - out.persistable = True + out.persistable = True exe = Executor(place) scope = core.Scope() @@ -123,34 +119,21 @@ class TestCPUSplitMergeLoDTensorGrad(unittest.TestCase): def test_grad(self): place = core.CPUPlace() program = Program() + with program_guard(program): + x = layers.data( + name='x', shape=[1], dtype='float32', stop_gradient=False) + y = layers.data( + name='y', shape=[1], dtype='bool', stop_gradient=False) - x = layers.data( - name='x', - shape=[1], - dtype='float32', - main_program=program, - stop_gradient=False) - y = layers.data( - name='y', - shape=[1], - dtype='bool', - main_program=program, - stop_gradient=False) - - level = 0 - - out_true, out_false = layers.split_lod_tensor( - input=x, mask=y, level=level, main_program=program) - out = layers.merge_lod_tensor( - in_true=out_true, - in_false=out_false, - mask=y, - x=x, - level=level, - main_program=program) - mean = layers.mean(x=out, main_program=program) - - append_backward_ops(mean) + level = 0 + + out_true, out_false = layers.split_lod_tensor( + input=x, mask=y, level=level) + out = layers.merge_lod_tensor( + in_true=out_true, in_false=out_false, mask=y, x=x, level=level) + mean = layers.mean(x=out) + + append_backward_ops(mean) tensor = core.LoDTensor() tensor.set(np.arange(10).reshape(10, 1).astype('float32'), place) From cb23c637c1cd86ad6844ee0dab5ae891635b6e17 Mon Sep 17 00:00:00 2001 From: kavyasrinet Date: Mon, 18 Dec 2017 20:54:25 -0800 Subject: [PATCH 154/193] Polishing executor design doc (#6721) * Polish executor design doc * Adding few details --- doc/design/executor.md | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/doc/design/executor.md b/doc/design/executor.md index aa738ab598..2d4b371cc5 100644 --- a/doc/design/executor.md +++ b/doc/design/executor.md @@ -1,27 +1,29 @@ # Executor Design Doc ## Motivation -In the [fluid](https://github.com/PaddlePaddle/Paddle/blob/develop/doc/design/fluid.md), we encourage user use deep learning programming paradigms to describe training process. When the user-written Python program is executed, it will create a protobuf message +In [fluid](https://github.com/PaddlePaddle/Paddle/blob/develop/doc/design/fluid.md), we encourage the user to use deep learning programming paradigms to describe the training process. When the user-written Python program is executed, it will first create a protobuf message [`ProgramDesc`](https://github.com/PaddlePaddle/Paddle/blob/a91efdde6910ce92a78e3aa7157412c4c88d9ee8/paddle/framework/framework.proto#L145) that describes the process and is conceptually like an [abstract syntax tree](https://en.wikipedia.org/wiki/Abstract_syntax_tree). -The executor runs the `ProgramDesc` like an interpreter. `ProgramDesc` contains intrinsics/operators and variables which will be used, executor explicitly execute the stored precompiled code. +The executor runs the `ProgramDesc` like an interpreter. `ProgramDesc` contains the intrinsics (operators in this case) and variables which will be used, executor explicitly executes the stored precompiled code. ## Overview -An executor takes a `ProgramDesc`, a `block_id` and a `Scope`. The `ProgramDesc` is a list of blocks and each block contains the protobuf definition of all the parameters and operators. The `block_id` specifies the entrance block. And the `Scope` is the container of all the variable instance, which is persistent throughout different runs. +An executor takes a `ProgramDesc`, a `block_id` and a `Scope`. The `ProgramDesc` is a list of blocks and each block contains the protobuf definition of all the parameters and operators in the block. The `block_id` specifies the entrance block. And the `Scope` is the container of all the variable instances, which is persistent throughout different runs. ## Executor -`Executor` explicitly executes all the intrinsics/operators in the `block_id`th block of a `ProgramDesc`. Essentially, it instantiates Variables and Operators, then runs all the operators in sequence. It is very similar to push stack frame when entering the block, it will destroy the temporary variables when mini-batch is finished, but it does not have stack frame pop process. +The `Executor` explicitly executes all the intrinsics (operators here) in the `block_id`th block of a `ProgramDesc`. Essentially, it instantiates Variables and Operators, then runs all the operators in sequence one-by-one. +It is very similar to how a push stack frame works when entering a block, following which it cleans up all the temporary variables when a mini-batch is finished. It does not however, have the stack frame pop process. -### Interface +### The interface ```c++ Executor(places); ``` -A executor does not own any computing resources, user can only construct an executor with specified places. +A executor does not own any computing resources, a user can only construct an executor using the specified places. +### Running an Executor ``` void Run(ProgramDesc, Scope, block_id, create_local_scope); ``` -A executor only provides an unified way to execute `ProgramDesc`. `ProgramDesc` is the target will be executed, scope specifies the variable container. `block_id` indicates the entrance block, `create_local_scope` means if it will destroy the temporary variables after execution finished. +An `Executor` only provides a unified way to execute `ProgramDesc`. `ProgramDesc` is the target that will be executed, the `Scope` specifies the variable container, the `block_id` indicates the entrance block and `create_local_scope` is a boolean that states whether it will destroy the temporary variables after the execution is finished. From 94ca8f21528da3a64142733ae0272aa16eef0eb3 Mon Sep 17 00:00:00 2001 From: wangmeng28 Date: Tue, 19 Dec 2017 13:04:02 +0800 Subject: [PATCH 155/193] Make the default layer type for separable conv is exconv --- python/paddle/trainer_config_helpers/networks.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/python/paddle/trainer_config_helpers/networks.py b/python/paddle/trainer_config_helpers/networks.py index 6e231cc10f..368fc1e832 100644 --- a/python/paddle/trainer_config_helpers/networks.py +++ b/python/paddle/trainer_config_helpers/networks.py @@ -447,7 +447,7 @@ def img_separable_conv(input, bias_attr=None, param_attr=None, shared_bias=True, - layer_type=None, + layer_type='exconv', name=None): """ Separable Convolution. @@ -510,8 +510,7 @@ def img_separable_conv(input, act=act, bias_attr=bias_attr, param_attr=param_attr, - shared_biases=shared_bias, - layer_type=layer_type) + shared_biases=shared_bias) return __pointwise_conv__ From 9573256f9d802dfe1daf9f6887044931ff03f636 Mon Sep 17 00:00:00 2001 From: yangyaming Date: Tue, 19 Dec 2017 13:24:12 +0800 Subject: [PATCH 156/193] Remove main_program and startup_program. --- python/paddle/v2/fluid/layers/nn.py | 21 ++++----------------- 1 file changed, 4 insertions(+), 17 deletions(-) diff --git a/python/paddle/v2/fluid/layers/nn.py b/python/paddle/v2/fluid/layers/nn.py index 1d03f357eb..2c38c23224 100644 --- a/python/paddle/v2/fluid/layers/nn.py +++ b/python/paddle/v2/fluid/layers/nn.py @@ -764,7 +764,7 @@ def conv2d_transpose(input, return out -def sequence_expand(x, y, main_program=None, startup_program=None): +def sequence_expand(x, y): """Sequence Expand Layer. This layer will expand the input variable **x** according to LoD information of **y**. And the following examples will explain how sequence_expand works: @@ -808,8 +808,6 @@ def sequence_expand(x, y, main_program=None, startup_program=None): Args: x (Variable): The input variable which is a Tensor or LoDTensor. y (Variable): The input variable which is a LoDTensor. - main_program (Program): The main program. - startup_program (Program): The startup program. Returns: Variable: The expanded variable which is a LoDTensor. @@ -836,9 +834,7 @@ def lstm_unit(x_t, cell_t_prev, forget_bias=0.0, param_attr=None, - bias_attr=None, - main_program=None, - startup_program=None): + bias_attr=None): """Lstm unit layer. The equation of a lstm step is: .. math:: @@ -881,8 +877,6 @@ def lstm_unit(x_t, initializer, name etc. bias_attr (ParamAttr): The attributes of bias weights, if not False, bias weights will be created and be set to default value. - main_program (Program): The main program. - startup_program (Program): the startup program. Returns: tuple: The hidden value and cell value of lstm unit. @@ -923,18 +917,11 @@ def lstm_unit(x_t, bias_attr = ParamAttr() size = cell_t_prev.shape[1] - concat_out = concat( - input=[x_t, hidden_t_prev], - axis=1, - main_program=main_program, - startup_program=startup_program) + concat_out = concat(input=[x_t, hidden_t_prev], axis=1) fc_out = fc(input=concat_out, size=4 * size, param_attr=param_attr, - bias_attr=bias_attr, - act='linear', - main_program=main_program, - startup_program=startup_program) + bias_attr=bias_attr) dtype = x_t.dtype c = helper.create_tmp_variable(dtype) h = helper.create_tmp_variable(dtype) From 760d20de92dfb45e95aa2c3d8d86cb69b1ab5c56 Mon Sep 17 00:00:00 2001 From: yangyaming Date: Tue, 19 Dec 2017 15:19:26 +0800 Subject: [PATCH 157/193] Add test for sequence_softmax. --- python/paddle/v2/fluid/tests/test_layers.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/python/paddle/v2/fluid/tests/test_layers.py b/python/paddle/v2/fluid/tests/test_layers.py index d4a95bf6fc..9d2dcca56d 100644 --- a/python/paddle/v2/fluid/tests/test_layers.py +++ b/python/paddle/v2/fluid/tests/test_layers.py @@ -187,6 +187,15 @@ class TestBook(unittest.TestCase): x_t=x_t, hidden_t_prev=prev_hidden, cell_t_prev=prev_cell)) print(str(program)) + def test_sequence_softmax(self): + program = Program() + with program_guard(program): + seq_data = layers.data( + name='seq_data', shape=[10, 10], dtype='float32', lod_level=1) + seq = layers.fc(input=seq_data, size=20) + self.assertIsNotNone(layers.sequence_softmax(x=seq)) + print(str(program)) + if __name__ == '__main__': unittest.main() From 028604498d511658061b863de2fd88ccc26c71dc Mon Sep 17 00:00:00 2001 From: Luo Tao Date: Tue, 19 Dec 2017 15:36:15 +0800 Subject: [PATCH 158/193] update the link of doc.paddlepaddle.org in README.md --- README.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index ceeb6d9e51..577528e7aa 100644 --- a/README.md +++ b/README.md @@ -61,32 +61,32 @@ Please refer to our [release announcement](https://github.com/PaddlePaddle/Paddl ## Installation It is recommended to check out the -[Docker installation guide](http://doc.paddlepaddle.org/develop/doc/getstarted/build_and_install/docker_install_en.html) +[Docker installation guide](http://www.paddlepaddle.org/docs/develop/documentation/en/getstarted/build_and_install/docker_install_en.html) before looking into the -[build from source guide](http://doc.paddlepaddle.org/develop/doc/getstarted/build_and_install/build_from_source_en.html). +[build from source guide](http://www.paddlepaddle.org/docs/develop/documentation/en/getstarted/build_and_install/build_from_source_en.html). ## Documentation -We provide [English](http://doc.paddlepaddle.org/develop/doc/) and -[Chinese](http://doc.paddlepaddle.org/doc_cn/) documentation. +We provide [English](http://www.paddlepaddle.org/docs/develop/documentation/en/getstarted/index_en.html) and +[Chinese](http://www.paddlepaddle.org/docs/develop/documentation/zh/getstarted/index_cn.html) documentation. -- [Deep Learning 101](http://book.paddlepaddle.org/index.html) +- [Deep Learning 101](http://www.paddlepaddle.org/docs/develop/book/01.fit_a_line/index.html) You might want to start from this online interactive book that can run in a Jupyter Notebook. -- [Distributed Training](http://doc.paddlepaddle.org/develop/doc/howto/usage/cluster/cluster_train_en.html) +- [Distributed Training](http://www.paddlepaddle.org/docs/develop/documentation/en/howto/usage/cluster/cluster_train_en.html) You can run distributed training jobs on MPI clusters. -- [Distributed Training on Kubernetes](http://doc.paddlepaddle.org/develop/doc/howto/usage/k8s/k8s_en.html) +- [Distributed Training on Kubernetes](http://www.paddlepaddle.org/docs/develop/documentation/en/howto/usage/cluster/k8s_en.html) You can also run distributed training jobs on Kubernetes clusters. -- [Python API](http://doc.paddlepaddle.org/develop/doc/api/index_en.html) +- [Python API](http://www.paddlepaddle.org/docs/develop/documentation/en/api/index_en.html) Our new API enables much shorter programs. -- [How to Contribute](http://doc.paddlepaddle.org/develop/doc/howto/dev/contribute_to_paddle_en.html) +- [How to Contribute](http://www.paddlepaddle.org/docs/develop/documentation/en/howto/dev/contribute_to_paddle_en.html) We appreciate your contributions! From 5e04b64fa0244239e7c476ebd846d20e9958d8d6 Mon Sep 17 00:00:00 2001 From: chengduoZH Date: Tue, 19 Dec 2017 16:19:29 +0800 Subject: [PATCH 159/193] refine elementwise --- paddle/operators/elementwise_op_function.h | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/paddle/operators/elementwise_op_function.h b/paddle/operators/elementwise_op_function.h index 7ebfc7df8c..65484f318e 100644 --- a/paddle/operators/elementwise_op_function.h +++ b/paddle/operators/elementwise_op_function.h @@ -103,10 +103,12 @@ class MidWiseTransformIterator { MidWiseTransformIterator& operator++() { ++j_; - i_ = j_ / post_; - if (UNLIKELY(i_ == n_)) { - j_ = 0; - i_ = 0; + if (UNLIKELY(j_ == post_)) { + ++i_; + if (UNLIKELY(i_ == n_)) { + j_ = 0; + i_ = 0; + } } return *this; } From de85470d78014d89a64705dc10091aa94d112979 Mon Sep 17 00:00:00 2001 From: Yu Yang Date: Tue, 19 Dec 2017 16:53:09 +0800 Subject: [PATCH 160/193] Support Clip in param_attr (#6729) * Support Clip in param_attr * Fix the order of clip & regular Regular is not need to be clipped --- python/paddle/v2/fluid/__init__.py | 3 +- python/paddle/v2/fluid/clip.py | 61 +++++++++++++++++++ python/paddle/v2/fluid/framework.py | 3 + python/paddle/v2/fluid/optimizer.py | 5 ++ python/paddle/v2/fluid/param_attr.py | 9 ++- .../tests/book/test_recognize_digits_mlp.py | 4 +- 6 files changed, 81 insertions(+), 4 deletions(-) create mode 100644 python/paddle/v2/fluid/clip.py diff --git a/python/paddle/v2/fluid/__init__.py b/python/paddle/v2/fluid/__init__.py index 59986c9f0c..9b3792ee9e 100644 --- a/python/paddle/v2/fluid/__init__.py +++ b/python/paddle/v2/fluid/__init__.py @@ -16,12 +16,13 @@ import regularizer from param_attr import ParamAttr from data_feeder import DataFeeder from core import LoDTensor, CPUPlace, GPUPlace +import clip Tensor = LoDTensor __all__ = framework.__all__ + executor.__all__ + [ 'io', 'initializer', 'layers', 'nets', 'optimizer', 'backward', 'regularizer', 'LoDTensor', 'CPUPlace', 'GPUPlace', 'Tensor', 'ParamAttr' - 'DataFeeder' + 'DataFeeder', 'clip' ] diff --git a/python/paddle/v2/fluid/clip.py b/python/paddle/v2/fluid/clip.py new file mode 100644 index 0000000000..d7ec2fbe13 --- /dev/null +++ b/python/paddle/v2/fluid/clip.py @@ -0,0 +1,61 @@ +import functools +import layers + +__all__ = ['GradientClipByValue', 'append_gradient_clip_ops'] + + +class BaseGradientClipAttr(object): + def process_context(self, context, p_g): + raise NotImplementedError() + + def create_operators(self, param, grad): + raise NotImplementedError() + + +class NullGradientClipAttr(BaseGradientClipAttr): + def process_context(self, context, p_g): + pass + + def create_operators(self, param, grad): + return param, grad + + +class GradientClipByValue(BaseGradientClipAttr): + def __init__(self, max, min=None): + max = float(max) + if min is None: + min = -max + else: + min = float(min) + self.max = max + self.min = min + + def process_context(self, context, p_g): + pass + + def create_operators(self, param, grad): + new_grad = layers.clip(x=grad, min=self.min, max=self.max) + return param, new_grad + + +def append_gradient_clip_ops(param_grad): + context = dict() + create_op_callbacks = [] + for p, g in param_grad: + clip_attr = getattr(p, 'clip_attr', NullGradientClipAttr()) + if clip_attr is None: + clip_attr = NullGradientClipAttr() + if not isinstance(clip_attr, BaseGradientClipAttr): + raise TypeError( + "clip attribute should be an instance of BaseGradientClippingAttr" + ) + + clip_attr.process_context(context=context, p_g=param_grad) + create_op_callbacks.append( + functools.partial( + clip_attr.create_operators, param=p, grad=g)) + + return [each_callback() for each_callback in create_op_callbacks] + + +ClipByValue = GradientClipByValue diff --git a/python/paddle/v2/fluid/framework.py b/python/paddle/v2/fluid/framework.py index bf0cd275b6..973672e6e4 100644 --- a/python/paddle/v2/fluid/framework.py +++ b/python/paddle/v2/fluid/framework.py @@ -704,6 +704,7 @@ class Block(object): trainable=p.trainable, optimize_attr=p.optimize_attr, regularizer=p.regularizer, + clip_attr=p.clip_attr, name=v.name) self.vars[new_p.name] = new_p @@ -866,6 +867,8 @@ class Parameter(Variable): self.regularizer = kwargs.get('regularizer', None) + self.clip_attr = kwargs.get('clip_attr', None) + # program is a global instance. _main_program_ = Program() diff --git a/python/paddle/v2/fluid/optimizer.py b/python/paddle/v2/fluid/optimizer.py index 9f03eeea83..84fcbcdc2f 100644 --- a/python/paddle/v2/fluid/optimizer.py +++ b/python/paddle/v2/fluid/optimizer.py @@ -6,6 +6,7 @@ from framework import unique_name, program_guard from initializer import Constant from layer_helper import LayerHelper from regularizer import append_regularization_ops +from clip import append_gradient_clip_ops __all__ = ['SGD', 'Momentum', 'Adagrad', 'Adam', 'Adamax', 'DecayedAdagrad'] @@ -197,9 +198,13 @@ class Optimizer(object): `create_optimization_pass()` into one. """ params_grads = append_backward_ops(loss, parameter_list, no_grad_set) + + params_grads = append_gradient_clip_ops(params_grads) + # Add regularization if any params_grads = append_regularization_ops(params_grads, self.regularization) + optimize_ops = self.create_optimization_pass(params_grads, loss, startup_program) return optimize_ops diff --git a/python/paddle/v2/fluid/param_attr.py b/python/paddle/v2/fluid/param_attr.py index 7952a5ea51..f6f320c788 100644 --- a/python/paddle/v2/fluid/param_attr.py +++ b/python/paddle/v2/fluid/param_attr.py @@ -1,6 +1,8 @@ from initializer import Initializer, Xavier, Constant from regularizer import WeightDecayRegularizer +__all__ = ['ParamAttr'] + class ParamAttr(object): def __init__(self, @@ -8,12 +10,14 @@ class ParamAttr(object): initializer=None, learning_rate=1.0, regularizer=None, - trainable=True): + trainable=True, + clip=None): self.name = name self.initializer = initializer self.learning_rate = learning_rate self.regularizer = regularizer self.trainable = trainable + self.clip = clip def set_default_initializer(self, initializer): if initializer is None: @@ -56,7 +60,8 @@ class ParamAttr(object): 'name': self.name, 'learning_rate': self.learning_rate, 'regularizer': self.regularizer, - 'trainable': self.trainable + 'trainable': self.trainable, + 'clip_attr': self.clip } if with_initializer: kwargs['initializer'] = self.initializer diff --git a/python/paddle/v2/fluid/tests/book/test_recognize_digits_mlp.py b/python/paddle/v2/fluid/tests/book/test_recognize_digits_mlp.py index d77f19660e..fc073f6be8 100644 --- a/python/paddle/v2/fluid/tests/book/test_recognize_digits_mlp.py +++ b/python/paddle/v2/fluid/tests/book/test_recognize_digits_mlp.py @@ -11,7 +11,9 @@ regularizer = fluid.regularizer.L2Decay(0.0005 * BATCH_SIZE) hidden1 = fluid.layers.fc(input=image, size=128, act='relu', - param_attr=regularizer) + param_attr=fluid.ParamAttr( + regularizer=regularizer, + clip=fluid.clip.ClipByValue(10))) hidden2 = fluid.layers.fc(input=hidden1, size=64, act='relu', From 495259703c8c01b5dd24d25f4ce42c0fe0cd5882 Mon Sep 17 00:00:00 2001 From: typhoonzero Date: Tue, 19 Dec 2017 17:01:35 +0800 Subject: [PATCH 161/193] fix some doc errors --- doc/howto/usage/cluster/cluster_train_cn.md | 12 ++++++------ doc/howto/usage/cluster/cluster_train_en.md | 3 +-- doc/howto/usage/cluster/k8s_cn.md | 14 +++++++------- doc/howto/usage/cluster/k8s_en.md | 14 +++++++------- 4 files changed, 21 insertions(+), 22 deletions(-) diff --git a/doc/howto/usage/cluster/cluster_train_cn.md b/doc/howto/usage/cluster/cluster_train_cn.md index c9f90538a6..659bae9c0c 100644 --- a/doc/howto/usage/cluster/cluster_train_cn.md +++ b/doc/howto/usage/cluster/cluster_train_cn.md @@ -1,4 +1,4 @@ -# PaddlePaddle分布式训练 +# 分布式训练 ## 概述 @@ -181,8 +181,8 @@ PaddlePaddle可以使用多种分布式计算平台构建分布式计算任务 ## 在不同集群中运行 - - [fabric](fabric_cn.md) - - [openmpi](openmpi_cn.md) - - [kubernetes](k8s_cn.md) - - [kubernetes distributed](k8s_distributed_cn.md) - - [kubernetes on AWS](k8s_aws_cn.md) + - [fabric集群](fabric_cn.md) + - [openmpi集群](openmpi_cn.md) + - [kubernetes单机](k8s_cn.md) + - [kubernetes distributed分布式](k8s_distributed_cn.md) + - [AWS上运行kubernetes集群训练](k8s_aws_cn.md) diff --git a/doc/howto/usage/cluster/cluster_train_en.md b/doc/howto/usage/cluster/cluster_train_en.md index f9819470c0..915405ca5b 100644 --- a/doc/howto/usage/cluster/cluster_train_en.md +++ b/doc/howto/usage/cluster/cluster_train_en.md @@ -1,4 +1,4 @@ -# PaddlePaddle Distributed Training +# Distributed Training ## Introduction @@ -188,5 +188,4 @@ These cluster platforms provide API or environment variables for training proces - [fabric](fabric_en.md) - [openmpi](openmpi_en.md) - [kubernetes](k8s_en.md) - - kubernetes distributed - [kubernetes on AWS](k8s_aws_en.md) diff --git a/doc/howto/usage/cluster/k8s_cn.md b/doc/howto/usage/cluster/k8s_cn.md index ab07cb9cd5..9d49d0fa8c 100644 --- a/doc/howto/usage/cluster/k8s_cn.md +++ b/doc/howto/usage/cluster/k8s_cn.md @@ -1,16 +1,16 @@ # Kubernetes单机训练 -在这篇文档里,我们介绍如何在 Kubernetes 集群上启动一个单机使用CPU的Paddle训练作业。在下一篇中,我们将介绍如何启动分布式训练作业。 +在这篇文档里,我们介绍如何在 Kubernetes 集群上启动一个单机使用CPU的PaddlePaddle训练作业。在下一篇中,我们将介绍如何启动分布式训练作业。 ## 制作Docker镜像 -在一个功能齐全的Kubernetes机群里,通常我们会安装Ceph等分布式文件系统来存储训练数据。这样的话,一个分布式Paddle训练任务中的每个进程都可以从Ceph读取数据。在这个例子里,我们只演示一个单机作业,所以可以简化对环境的要求,把训练数据直接放在 -Paddle的Docker image里。为此,我们需要制作一个包含训练数据的Paddle镜像。 +在一个功能齐全的Kubernetes机群里,通常我们会安装Ceph等分布式文件系统来存储训练数据。这样的话,一个分布式PaddlePaddle训练任务中的每个进程都可以从Ceph读取数据。在这个例子里,我们只演示一个单机作业,所以可以简化对环境的要求,把训练数据直接放在 +PaddlePaddle的Docker image里。为此,我们需要制作一个包含训练数据的PaddlePaddle镜像。 -Paddle 的 [Quick Start Tutorial](http://www.paddlepaddle.org/doc/demo/quick_start/index_en.html) +Paddle 的 [Quick Start Tutorial](http://www.paddlepaddle.org/docs/develop/documentation/zh/getstarted/index_cn.html) 里介绍了用Paddle源码中的脚本下载训练数据的过程。 -而 `paddledev/paddle:cpu-demo-latest` 镜像里有 Paddle 源码与demo,( 请注意,默认的 -Paddle镜像 `paddledev/paddle:cpu-latest` 是不包括源码的, Paddle的各版本镜像可以参考 [Docker installation guide](http://www.paddlepaddle.org/doc/build/docker_install.html) ),所以我们使用这个镜像来下载训练数据到Docker container中,然后把这个包含了训练数据的container保存为一个新的镜像。 +而 `paddledev/paddle:cpu-demo-latest` 镜像里有 PaddlePaddle 源码与demo,( 请注意,默认的 +PaddlePaddle镜像 `paddledev/paddle:cpu-latest` 是不包括源码的, PaddlePaddle的各版本镜像可以参考 [Docker installation guide](http://www.paddlepaddle.org/doc/build/docker_install.html) ),所以我们使用这个镜像来下载训练数据到Docker container中,然后把这个包含了训练数据的container保存为一个新的镜像。 ### 运行容器 @@ -103,7 +103,7 @@ spec: restartPolicy: Never ``` -### 创建Paddle Job +### 创建PaddlePaddle Job 使用上文创建的yaml文件创建Kubernetes Job,命令为: diff --git a/doc/howto/usage/cluster/k8s_en.md b/doc/howto/usage/cluster/k8s_en.md index 0c3ab05b70..5a3ebfd8dc 100644 --- a/doc/howto/usage/cluster/k8s_en.md +++ b/doc/howto/usage/cluster/k8s_en.md @@ -1,13 +1,13 @@ -# Paddle On Kubernetes +# PaddlePaddle On Kubernetes ->In this article, we will introduce how to run Paddle training job on single CPU machine using Kubernetes. In next article, we will introduce how to run Paddle training job on distributed cluster. +In this article, we will introduce how to run PaddlePaddle training job on single CPU machine using Kubernetes. In next article, we will introduce how to run PaddlePaddle training job on distributed cluster. ## Build Docker Image -In distributed Kubernetes cluster, we will use Ceph or other shared storage system for storing training related data so that all processes in Paddle training can retrieve data from Ceph. In this example, we will only demo training job on single machine. In order to simplify the requirement of the environment, we will directly put training data into Paddle's Docker Image, so we need to create a Paddle Docker image that already includes the training data. +In distributed Kubernetes cluster, we will use Ceph or other shared storage system for storing training data so that all processes in the training job can retrieve data from Ceph. In this example, we will only demo training job on single machine. In order to simplify the requirement of the environment, we will directly put training data into PaddlePaddle's Docker Image, so we need to create a PaddlePaddle Docker image that already includes the training data. -Paddle's [Quick Start Tutorial](http://www.paddlepaddle.org/doc/demo/quick_start/index_en.html) introduces how to download and train data by using script from Paddle's source code. -And `paddledev/paddle:cpu-demo-latest` image has the Paddle source code and demo. (Caution: Default Paddle image `paddledev/paddle:cpu-latest` doesn't include the source code, Paddle's different versions of image can be referred here: [Docker installation guide](http://www.paddlepaddle.org/doc/build/docker_install.html)), so we run this container and download the training data, and then commit the whole container to be a new Docker image. +PaddlePaddle's [Quick Start Tutorial](http://www.paddlepaddle.org/docs/develop/documentation/en/getstarted/index_en.html) introduces how to download and train data by using script from PaddlePaddle's source code. +And `paddledev/paddle:cpu-demo-latest` image has the PaddlePaddle source code and demo. (Caution: Default PaddlePaddle image `paddledev/paddle:cpu-latest` doesn't include the source code, PaddlePaddle's different versions of image can be referred here: [Docker installation guide](http://www.paddlepaddle.org/doc/build/docker_install.html)), so we run this container and download the training data, and then commit the whole container to be a new Docker image. ### Run Docker Container @@ -67,7 +67,7 @@ $ docker commit quick_start_data mypaddle/paddle:quickstart ## Use Kubernetes For Training ->We will use Kubernetes job for training process, following steps shows how to do the training with Kubernetes. +We will use Kubernetes job for training process, following steps shows how to do the training with Kubernetes. ### Create Yaml Files @@ -99,7 +99,7 @@ spec: restartPolicy: Never ``` -### Start Paddle Job +### Start PaddlePaddle Job Using the above yaml file to start the Kubernetes job. From 5c530ea827ff87ce901721d2c5a3c2dd3971e7e0 Mon Sep 17 00:00:00 2001 From: qiaolongfei Date: Tue, 19 Dec 2017 17:30:09 +0800 Subject: [PATCH 162/193] export const value to python --- paddle/pybind/CMakeLists.txt | 2 +- paddle/pybind/const_value.cc | 29 +++++++++++++++++++ paddle/pybind/const_value.h | 26 +++++++++++++++++ paddle/pybind/pybind.cc | 2 ++ python/paddle/v2/fluid/framework.py | 18 ++++++++++-- .../v2/fluid/tests/test_batch_norm_op.py | 1 + .../paddle/v2/fluid/tests/test_const_value.py | 11 +++++++ python/paddle/v2/fluid/tests/test_operator.py | 2 +- python/paddle/v2/fluid/tests/test_program.py | 8 ++--- .../v2/fluid/tests/test_recurrent_op.py | 4 +-- 10 files changed, 91 insertions(+), 12 deletions(-) create mode 100644 paddle/pybind/const_value.cc create mode 100644 paddle/pybind/const_value.h create mode 100644 python/paddle/v2/fluid/tests/test_const_value.py diff --git a/paddle/pybind/CMakeLists.txt b/paddle/pybind/CMakeLists.txt index 1fb69de90d..6afed7eec7 100644 --- a/paddle/pybind/CMakeLists.txt +++ b/paddle/pybind/CMakeLists.txt @@ -1,6 +1,6 @@ if(WITH_PYTHON) cc_library(paddle_pybind SHARED - SRCS pybind.cc exception.cc protobuf.cc + SRCS pybind.cc exception.cc protobuf.cc const_value.cc DEPS pybind python backward proto_desc paddle_memory executor prune init ${GLOB_OP_LIB}) endif(WITH_PYTHON) diff --git a/paddle/pybind/const_value.cc b/paddle/pybind/const_value.cc new file mode 100644 index 0000000000..b13ad42ea2 --- /dev/null +++ b/paddle/pybind/const_value.cc @@ -0,0 +1,29 @@ +/* Copyright (c) 2016 PaddlePaddle Authors. All Rights Reserve. + +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 "const_value.h" +#include "paddle/framework/operator.h" + +namespace paddle { +namespace pybind { + +void BindConstValue(pybind11::module& m) { + m.def("kEmptyVarName", [] { return framework::kEmptyVarName; }); + m.def("kTempVarName", [] { return framework::kTempVarName; }); + m.def("kGradVarSuffix", [] { return framework::kGradVarSuffix; }); + m.def("kZeroVarSuffix", [] { return framework::kZeroVarSuffix; }); +} + +} // namespace pybind +} // namespace paddle diff --git a/paddle/pybind/const_value.h b/paddle/pybind/const_value.h new file mode 100644 index 0000000000..3d57c972a9 --- /dev/null +++ b/paddle/pybind/const_value.h @@ -0,0 +1,26 @@ +/* Copyright (c) 2016 PaddlePaddle Authors. All Rights Reserve. + +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 "paddle/platform/enforce.h" +#include "pybind11/pybind11.h" + +namespace py = pybind11; + +namespace paddle { +namespace pybind { +extern void BindConstValue(pybind11::module& m); +} // namespace pybind +} // namespace paddle diff --git a/paddle/pybind/pybind.cc b/paddle/pybind/pybind.cc index 4248db34c6..4a82f1596e 100644 --- a/paddle/pybind/pybind.cc +++ b/paddle/pybind/pybind.cc @@ -30,6 +30,7 @@ limitations under the License. */ #include "paddle/operators/net_op.h" #include "paddle/platform/enforce.h" #include "paddle/platform/place.h" +#include "paddle/pybind/const_value.h" #include "paddle/pybind/exception.h" #include "paddle/pybind/pybind.h" #include "paddle/pybind/tensor_py.h" @@ -431,6 +432,7 @@ All parameter, weight, gradient are variables in Paddle. BindBlockDesc(m); BindVarDsec(m); BindOpDesc(m); + BindConstValue(m); py::class_(m, "LodRankTable") .def("items", [](framework::LoDRankTable &table) { diff --git a/python/paddle/v2/fluid/framework.py b/python/paddle/v2/fluid/framework.py index bf0cd275b6..8deb6aaf7a 100644 --- a/python/paddle/v2/fluid/framework.py +++ b/python/paddle/v2/fluid/framework.py @@ -1,10 +1,10 @@ import collections +import contextlib import numpy as np -from . import core + import proto.framework_pb2 as framework_pb2 -import google.protobuf.message -import contextlib +from . import core __all__ = [ 'Block', 'Variable', 'Program', 'Operator', 'default_startup_program', @@ -12,6 +12,18 @@ __all__ = [ 'switch_main_program' ] +EMPTY_VAR_NAME = core.kEmptyVarName() +TEMP_VAR_NAME = core.kTempVarName() +GRAD_VAR_SUFFIX = core.kGradVarSuffix() +ZERO_VAR_SUFFIX = core.kZeroVarSuffix() + + +def grad_var_name(var_name): + """ + return gradient name for a certain var name + """ + return var_name + GRAD_VAR_SUFFIX + def unique_name(prefix): """ diff --git a/python/paddle/v2/fluid/tests/test_batch_norm_op.py b/python/paddle/v2/fluid/tests/test_batch_norm_op.py index e766a68c0e..a0c2da113e 100644 --- a/python/paddle/v2/fluid/tests/test_batch_norm_op.py +++ b/python/paddle/v2/fluid/tests/test_batch_norm_op.py @@ -3,6 +3,7 @@ import numpy as np from op_test import OpTest import paddle.v2.fluid.core as core from paddle.v2.fluid.op import Operator +from paddle.v2.fluid.framewor import grad_var_name def grad_var_name(var_name): diff --git a/python/paddle/v2/fluid/tests/test_const_value.py b/python/paddle/v2/fluid/tests/test_const_value.py new file mode 100644 index 0000000000..fd034f55e7 --- /dev/null +++ b/python/paddle/v2/fluid/tests/test_const_value.py @@ -0,0 +1,11 @@ +import unittest +import paddle.v2.fluid.framework as framework + + +class ConditionalBlock(unittest.TestCase): + def test_const_value(self): + self.assertEqual(framework.GRAD_VAR_SUFFIX, "@GRAD") + + +if __name__ == '__main__': + unittest.main() diff --git a/python/paddle/v2/fluid/tests/test_operator.py b/python/paddle/v2/fluid/tests/test_operator.py index 4aa022ef90..c059a2b88b 100644 --- a/python/paddle/v2/fluid/tests/test_operator.py +++ b/python/paddle/v2/fluid/tests/test_operator.py @@ -1,6 +1,6 @@ import unittest + import paddle.v2.fluid.op as op -import paddle.v2.fluid.core as core import paddle.v2.fluid.proto.framework_pb2 as framework_pb2 diff --git a/python/paddle/v2/fluid/tests/test_program.py b/python/paddle/v2/fluid/tests/test_program.py index e6da0b2be7..447c746aac 100644 --- a/python/paddle/v2/fluid/tests/test_program.py +++ b/python/paddle/v2/fluid/tests/test_program.py @@ -1,7 +1,7 @@ from __future__ import print_function import unittest -from paddle.v2.fluid.framework import Program, default_main_program, program_guard +from paddle.v2.fluid.framework import Program, default_main_program, program_guard, grad_var_name import paddle.v2.fluid.layers as layers main_program = default_main_program() @@ -109,12 +109,10 @@ class TestProgram(unittest.TestCase): self.assertEqual(add_op.idx, 1) param_to_grad = prog.append_backward(mean_out, set()) - def grad_name(name): - return name + "@GRAD" - for var_name in ("mul.x", "mul.y", "mul.out", "add.y", "add.out", "mean.out"): - self.assertEqual(param_to_grad[var_name][0], grad_name(var_name)) + self.assertEqual(param_to_grad[var_name][0], + grad_var_name(var_name)) self.assertEqual(param_to_grad[var_name][1], 0) expect_ops = [ diff --git a/python/paddle/v2/fluid/tests/test_recurrent_op.py b/python/paddle/v2/fluid/tests/test_recurrent_op.py index 694ff0d8dd..e38c763ddb 100644 --- a/python/paddle/v2/fluid/tests/test_recurrent_op.py +++ b/python/paddle/v2/fluid/tests/test_recurrent_op.py @@ -1,7 +1,7 @@ import unittest import paddle.v2.fluid.layers as layers -from paddle.v2.fluid.framework import Program +from paddle.v2.fluid.framework import Program, grad_var_name from paddle.v2.fluid.executor import Executor from paddle.v2.fluid.backward import append_backward_ops import numpy as np @@ -164,7 +164,7 @@ class RecurrentOpTest1(unittest.TestCase): for x in self.data_field } fetch_list = [ - self.main_program.global_block().var(x + "@GRAD") + self.main_program.global_block().var(grad_var_name(x)) for x in self.data_field ] From b2023db36b27c202cd55f280da0f3b48754566e3 Mon Sep 17 00:00:00 2001 From: qiaolongfei Date: Tue, 19 Dec 2017 17:33:05 +0800 Subject: [PATCH 163/193] fix a typo --- python/paddle/v2/fluid/tests/test_batch_norm_op.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/paddle/v2/fluid/tests/test_batch_norm_op.py b/python/paddle/v2/fluid/tests/test_batch_norm_op.py index a0c2da113e..1185385cd2 100644 --- a/python/paddle/v2/fluid/tests/test_batch_norm_op.py +++ b/python/paddle/v2/fluid/tests/test_batch_norm_op.py @@ -3,7 +3,7 @@ import numpy as np from op_test import OpTest import paddle.v2.fluid.core as core from paddle.v2.fluid.op import Operator -from paddle.v2.fluid.framewor import grad_var_name +from paddle.v2.fluid.framework import grad_var_name def grad_var_name(var_name): From c057d535d098cd972502155a7cc285dce5c05826 Mon Sep 17 00:00:00 2001 From: qiaolongfei Date: Tue, 19 Dec 2017 17:35:08 +0800 Subject: [PATCH 164/193] remove duplicated code --- python/paddle/v2/fluid/tests/test_batch_norm_op.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/python/paddle/v2/fluid/tests/test_batch_norm_op.py b/python/paddle/v2/fluid/tests/test_batch_norm_op.py index 1185385cd2..dee2febb83 100644 --- a/python/paddle/v2/fluid/tests/test_batch_norm_op.py +++ b/python/paddle/v2/fluid/tests/test_batch_norm_op.py @@ -6,10 +6,6 @@ from paddle.v2.fluid.op import Operator from paddle.v2.fluid.framework import grad_var_name -def grad_var_name(var_name): - return var_name + "@GRAD" - - def get_backward_op(scope, op, no_grad_set): backward_op = core.Operator.backward(op, no_grad_set) for input in backward_op.input_vars(): From 293b292e0ff3e6055dceb807c4cb57fc7bacb226 Mon Sep 17 00:00:00 2001 From: chengduoZH Date: Tue, 19 Dec 2017 17:00:55 +0800 Subject: [PATCH 165/193] refine im2col --- paddle/operators/math/im2col.cc | 39 +++++++++++++++++++++++---------- 1 file changed, 27 insertions(+), 12 deletions(-) diff --git a/paddle/operators/math/im2col.cc b/paddle/operators/math/im2col.cc index 707ebf0596..a746c267b6 100644 --- a/paddle/operators/math/im2col.cc +++ b/paddle/operators/math/im2col.cc @@ -61,14 +61,22 @@ class Im2ColFunctor(); T* col_data = col->data(); - + int w_offset = -1; + int h_offset = 0; + int c_im = 0; for (int c = 0; c < channels_col; ++c) { - int w_offset = c % filter_width; - int h_offset = (c / filter_width) % filter_height; - int c_im = c / filter_width / filter_height; + ++w_offset; + if (UNLIKELY(w_offset == filter_width)) { + w_offset = 0; + ++h_offset; + if (UNLIKELY(h_offset == filter_height)) { + h_offset = 0; + ++c_im; + } + } for (int h = 0; h < col_height; ++h) { + int im_row_idx = h * stride[0] - padding[0] + h_offset * dilation[0]; for (int w = 0; w < col_width; ++w) { - int im_row_idx = h * stride[0] - padding[0] + h_offset * dilation[0]; int im_col_idx = w * stride[1] - padding[1] + w_offset * dilation[1]; int col_idx = (c * col_height + h) * col_width + w; int im_idx = (im_row_idx + c_im * im_height) * im_width + im_col_idx; @@ -127,19 +135,26 @@ class Col2ImFunctordata(); const T* col_data = col.data(); + int w_offset = -1; + int h_offset = 0; + int c_im = 0; for (int c = 0; c < channels_col; ++c) { - int w_offset = c % filter_width; - int h_offset = (c / filter_width) % filter_height; - int c_im = c / filter_width / filter_height; + ++w_offset; + if (UNLIKELY(w_offset == filter_width)) { + w_offset = 0; + ++h_offset; + if (UNLIKELY(h_offset == filter_height)) { + h_offset = 0; + ++c_im; + } + } for (int h = 0; h < col_height; ++h) { + int im_row_idx = h * stride[0] - padding[0] + h_offset * dilation[0]; for (int w = 0; w < col_width; ++w) { - int im_row_idx = h * stride[0] - padding[0] + h_offset * dilation[0]; int im_col_idx = w * stride[1] - padding[1] + w_offset * dilation[1]; - if ((im_row_idx) >= 0 && (im_row_idx) < im_height && (im_col_idx) >= 0 && (im_col_idx) < im_width) { - im_row_idx += c_im * im_height; - im_data[im_row_idx * im_width + im_col_idx] += + im_data[(im_row_idx + c_im * im_height) * im_width + im_col_idx] += col_data[(c * col_height + h) * col_width + w]; } } From 07f2ba5517edeb4319c497bcc0f70157025158a0 Mon Sep 17 00:00:00 2001 From: Luo Tao Date: Tue, 19 Dec 2017 17:59:11 +0800 Subject: [PATCH 166/193] reopen linkchecker for checking broken links in websites --- paddle/scripts/travis/build_doc.sh | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/paddle/scripts/travis/build_doc.sh b/paddle/scripts/travis/build_doc.sh index ff0bac6a07..0db8d33bbc 100755 --- a/paddle/scripts/travis/build_doc.sh +++ b/paddle/scripts/travis/build_doc.sh @@ -14,9 +14,8 @@ make -j `nproc` print_operators_doc paddle/pybind/print_operators_doc > doc/en/html/operators.json # check websites for broken links -# It will be failed now! -#linkchecker doc/en/html/index.html -#linkchecker doc/cn/html/index.html +linkchecker doc/en/html/index.html +linkchecker doc/cn/html/index.html # Parse Github URL REPO=`git config remote.origin.url` From 927f5d567c737fc9e754f911a1ced3def77b0651 Mon Sep 17 00:00:00 2001 From: qiaolongfei Date: Tue, 19 Dec 2017 18:47:20 +0800 Subject: [PATCH 167/193] complete const test --- python/paddle/v2/fluid/tests/test_const_value.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/python/paddle/v2/fluid/tests/test_const_value.py b/python/paddle/v2/fluid/tests/test_const_value.py index fd034f55e7..f8c17c2c98 100644 --- a/python/paddle/v2/fluid/tests/test_const_value.py +++ b/python/paddle/v2/fluid/tests/test_const_value.py @@ -5,6 +5,9 @@ import paddle.v2.fluid.framework as framework class ConditionalBlock(unittest.TestCase): def test_const_value(self): self.assertEqual(framework.GRAD_VAR_SUFFIX, "@GRAD") + self.assertEqual(framework.TEMP_VAR_NAME, "@TEMP@") + self.assertEqual(framework.GRAD_VAR_SUFFIX, "@GRAD") + self.assertEqual(framework.ZERO_VAR_SUFFIX, "@ZERO") if __name__ == '__main__': From fb72c104b179f3c63bb7581aea8e02e1df0d32a0 Mon Sep 17 00:00:00 2001 From: Yancey1989 Date: Tue, 19 Dec 2017 19:16:33 +0800 Subject: [PATCH 168/193] paddledev -> paddlepaddle --- doc/howto/usage/cluster/k8s_aws_en.md | 8 ++++---- doc/howto/usage/cluster/k8s_cn.md | 2 +- doc/howto/usage/cluster/k8s_distributed_cn.md | 4 ++-- doc/howto/usage/cluster/k8s_en.md | 2 +- doc/howto/usage/cluster/src/Dockerfile | 2 +- doc/howto/usage/cluster/src/k8s_train/Dockerfile | 2 +- 6 files changed, 10 insertions(+), 10 deletions(-) diff --git a/doc/howto/usage/cluster/k8s_aws_en.md b/doc/howto/usage/cluster/k8s_aws_en.md index ce72b08038..0dfa8237a3 100644 --- a/doc/howto/usage/cluster/k8s_aws_en.md +++ b/doc/howto/usage/cluster/k8s_aws_en.md @@ -493,7 +493,7 @@ spec: spec: containers: - name: paddle-data - image: paddledev/paddle-tutorial:k8s_data + image: paddlepaddle/paddle-tutorial:k8s_data imagePullPolicy: Always volumeMounts: - mountPath: "/efs" @@ -522,7 +522,7 @@ NAME DESIRED SUCCESSFUL AGE paddle-data 1 1 6m ``` -Data preparation is done by docker image `paddledev/paddle-tutorial:k8s_data`, see [here](src/k8s_data/README.md) for how to build this docker image and source code. +Data preparation is done by docker image `paddlepaddle/paddle-tutorial:k8s_data`, see [here](src/k8s_data/README.md) for how to build this docker image and source code. #### Start Training @@ -545,7 +545,7 @@ spec: claimName: efsvol containers: - name: trainer - image: paddledev/paddle-tutorial:k8s_train + image: paddlepaddle/paddle-tutorial:k8s_train command: ["bin/bash", "-c", "/root/start.sh"] env: - name: JOB_NAME @@ -617,7 +617,7 @@ kubectl --kubeconfig=kubeconfig log -f POD_NAME Run `kubectl --kubeconfig=kubeconfig describe job paddle-cluster-job` to check training job status. It will complete in around 20 minutes. -The details for start `pserver` and `trainer` are hidden inside docker image `paddledev/paddle-tutorial:k8s_train`, see [here](src/k8s_train/README.md) for how to build the docker image and source code. +The details for start `pserver` and `trainer` are hidden inside docker image `paddlepaddle/paddle-tutorial:k8s_train`, see [here](src/k8s_train/README.md) for how to build the docker image and source code. #### Inspect Training Output diff --git a/doc/howto/usage/cluster/k8s_cn.md b/doc/howto/usage/cluster/k8s_cn.md index 37dfb14cf1..be43acd826 100644 --- a/doc/howto/usage/cluster/k8s_cn.md +++ b/doc/howto/usage/cluster/k8s_cn.md @@ -16,7 +16,7 @@ PaddlePaddle的 `paddlepaddle/paddle:cpu-demo-latest` 镜像里有PaddlePaddle ### 运行容器 ``` -$ docker run --name quick_start_data -it paddledev/paddle:cpu-demo-latest +$ docker run --name quick_start_data -it paddlepaddle/paddle:cpu-demo-latest ``` ### 下载数据 diff --git a/doc/howto/usage/cluster/k8s_distributed_cn.md b/doc/howto/usage/cluster/k8s_distributed_cn.md index 0fc9e37a99..bb2e8fc790 100644 --- a/doc/howto/usage/cluster/k8s_distributed_cn.md +++ b/doc/howto/usage/cluster/k8s_distributed_cn.md @@ -28,7 +28,7 @@ PaddlePaddle镜像需要提供`paddle pserver`与`paddle train`进程的运行 - 拷贝训练文件到容器内 - 生成`paddle pserver`与`paddle train`进程的启动参数,并且启动训练 -因为官方镜像 `paddledev/paddle:cpu-latest` 内已经包含PaddlePaddle的执行程序但是还没上述功能,所以我们可以在这个基础上,添加启动脚本,制作新镜像来完成以上的工作。参考镜像的[*Dockerfile*](https://github.com/PaddlePaddle/Paddle/blob/develop/doc/howto/usage/cluster/src/k8s_train/Dockerfile)。 +因为官方镜像 `paddlepaddle/paddle:cpu-latest` 内已经包含PaddlePaddle的执行程序但是还没上述功能,所以我们可以在这个基础上,添加启动脚本,制作新镜像来完成以上的工作。参考镜像的[*Dockerfile*](https://github.com/PaddlePaddle/Paddle/blob/develop/doc/howto/usage/cluster/src/k8s_train/Dockerfile)。 ```bash $ cd doc/howto/usage/k8s/src/k8s_train @@ -62,7 +62,7 @@ spec: hostNetwork: true containers: - name: paddle-data - image: paddledev/paddle-tutorial:k8s_data + image: paddlepaddle/paddle-tutorial:k8s_data imagePullPolicy: Always volumeMounts: - mountPath: "/mnt" diff --git a/doc/howto/usage/cluster/k8s_en.md b/doc/howto/usage/cluster/k8s_en.md index c66c295e2a..1a16046800 100644 --- a/doc/howto/usage/cluster/k8s_en.md +++ b/doc/howto/usage/cluster/k8s_en.md @@ -21,7 +21,7 @@ Container to be a new Docker Image. ### Run Docker Container ``` -$ docker run --name quick_start_data -it paddledev/paddle:cpu-demo-latest +$ docker run --name quick_start_data -it paddlepaddle/paddle:cpu-demo-latest ``` ### Download Training Data diff --git a/doc/howto/usage/cluster/src/Dockerfile b/doc/howto/usage/cluster/src/Dockerfile index 3a73606c61..6e6bf82bd0 100644 --- a/doc/howto/usage/cluster/src/Dockerfile +++ b/doc/howto/usage/cluster/src/Dockerfile @@ -1,4 +1,4 @@ -FROM paddledev/paddle:cpu-latest +FROM paddlepaddle/paddle:cpu-latest MAINTAINER zjsxzong89@gmail.com diff --git a/doc/howto/usage/cluster/src/k8s_train/Dockerfile b/doc/howto/usage/cluster/src/k8s_train/Dockerfile index c0fca1f9a9..8d0095faa0 100644 --- a/doc/howto/usage/cluster/src/k8s_train/Dockerfile +++ b/doc/howto/usage/cluster/src/k8s_train/Dockerfile @@ -1,4 +1,4 @@ -FROM paddledev/paddle:cpu-latest +FROM paddlepaddle/paddle:cpu-latest COPY start.sh /root/ COPY start_paddle.py /root/ From 79b964d593689a20ba0c3d770e7c6fa8f752f9ae Mon Sep 17 00:00:00 2001 From: Yancey1989 Date: Tue, 19 Dec 2017 19:25:36 +0800 Subject: [PATCH 169/193] cpu-latest -> latest --- doc/howto/dev/write_docs_cn.rst | 2 +- doc/howto/dev/write_docs_en.rst | 2 +- doc/howto/usage/cluster/k8s_distributed_cn.md | 2 +- doc/howto/usage/cluster/src/k8s_train/Dockerfile | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/doc/howto/dev/write_docs_cn.rst b/doc/howto/dev/write_docs_cn.rst index 1bc947c260..addc50965b 100644 --- a/doc/howto/dev/write_docs_cn.rst +++ b/doc/howto/dev/write_docs_cn.rst @@ -29,7 +29,7 @@ PaddlePaddle的文档构建有三种方式。 git clone https://github.com/PaddlePaddle/Mobile.git # Please specify the working directory through -v - docker run -it -p 8000:8000 -v `pwd`:/var/content paddlepaddle/paddlepaddle.org:latest + docker run -it -p 8000:8000 -v `pwd`:/var/content docker.paddlepaddle.org/paddle:latest 注意: PaddlePaddle.org 会在 -v (volume) 指定的内容存储库运行命令 之后再用网页连到http://localhost:8000就可以在网页上生成需要的文档 diff --git a/doc/howto/dev/write_docs_en.rst b/doc/howto/dev/write_docs_en.rst index b3ef07eb1d..2d97d05861 100644 --- a/doc/howto/dev/write_docs_en.rst +++ b/doc/howto/dev/write_docs_en.rst @@ -30,7 +30,7 @@ The tool uses Docker, please install it on your system. Please check Docker offi git clone https://github.com/PaddlePaddle/Mobile.git # Please specify the working directory through -v - docker run -it -p 8000:8000 -v `pwd`:/var/content paddlepaddle/paddlepaddle.org:latest + docker run -it -p 8000:8000 -v `pwd`:/var/content docker.paddlepaddle.org/paddle:latest Note: PaddlePaddle.org will read the content repos specified in the -v (volume) flag of the docker run command Use a web browser and navigate to http://localhost:8000, click the buttons to compile the documentation diff --git a/doc/howto/usage/cluster/k8s_distributed_cn.md b/doc/howto/usage/cluster/k8s_distributed_cn.md index bb2e8fc790..701a9a75d7 100644 --- a/doc/howto/usage/cluster/k8s_distributed_cn.md +++ b/doc/howto/usage/cluster/k8s_distributed_cn.md @@ -28,7 +28,7 @@ PaddlePaddle镜像需要提供`paddle pserver`与`paddle train`进程的运行 - 拷贝训练文件到容器内 - 生成`paddle pserver`与`paddle train`进程的启动参数,并且启动训练 -因为官方镜像 `paddlepaddle/paddle:cpu-latest` 内已经包含PaddlePaddle的执行程序但是还没上述功能,所以我们可以在这个基础上,添加启动脚本,制作新镜像来完成以上的工作。参考镜像的[*Dockerfile*](https://github.com/PaddlePaddle/Paddle/blob/develop/doc/howto/usage/cluster/src/k8s_train/Dockerfile)。 +因为官方镜像 `paddlepaddle/paddle:latest` 内已经包含PaddlePaddle的执行程序但是还没上述功能,所以我们可以在这个基础上,添加启动脚本,制作新镜像来完成以上的工作。参考镜像的[*Dockerfile*](https://github.com/PaddlePaddle/Paddle/blob/develop/doc/howto/usage/cluster/src/k8s_train/Dockerfile)。 ```bash $ cd doc/howto/usage/k8s/src/k8s_train diff --git a/doc/howto/usage/cluster/src/k8s_train/Dockerfile b/doc/howto/usage/cluster/src/k8s_train/Dockerfile index 8d0095faa0..77f021a89a 100644 --- a/doc/howto/usage/cluster/src/k8s_train/Dockerfile +++ b/doc/howto/usage/cluster/src/k8s_train/Dockerfile @@ -1,4 +1,4 @@ -FROM paddlepaddle/paddle:cpu-latest +FROM paddlepaddle/paddle:latest COPY start.sh /root/ COPY start_paddle.py /root/ From f1ab13bd0e42005bc3cc1163ef0d8f9c6125c128 Mon Sep 17 00:00:00 2001 From: chengduoZH Date: Tue, 19 Dec 2017 19:16:14 +0800 Subject: [PATCH 170/193] refine --- paddle/operators/elementwise_op_function.h | 6 +++--- paddle/operators/math/im2col.cc | 19 +++++++++++-------- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/paddle/operators/elementwise_op_function.h b/paddle/operators/elementwise_op_function.h index 65484f318e..9edfacd6df 100644 --- a/paddle/operators/elementwise_op_function.h +++ b/paddle/operators/elementwise_op_function.h @@ -105,8 +105,8 @@ class MidWiseTransformIterator { ++j_; if (UNLIKELY(j_ == post_)) { ++i_; + j_ = 0; if (UNLIKELY(i_ == n_)) { - j_ = 0; i_ = 0; } } @@ -127,10 +127,10 @@ class MidWiseTransformIterator { private: const T* ptr_; - int i_; + int64_t i_; int64_t j_; int64_t n_; - int post_; + int64_t post_; }; #ifdef __NVCC__ diff --git a/paddle/operators/math/im2col.cc b/paddle/operators/math/im2col.cc index a746c267b6..d11a6afe9b 100644 --- a/paddle/operators/math/im2col.cc +++ b/paddle/operators/math/im2col.cc @@ -66,10 +66,10 @@ class Im2ColFunctor= 0 && im_row_offset < im_height && im_col_offset >= 0 && im_col_offset < im_width) { int im_offset = From 7b0744edcf6d46a326b0bc7ec15cf9f1329cda4a Mon Sep 17 00:00:00 2001 From: chengduoZH Date: Tue, 19 Dec 2017 19:49:43 +0800 Subject: [PATCH 171/193] refine im2col --- paddle/operators/math/im2col.cc | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/paddle/operators/math/im2col.cc b/paddle/operators/math/im2col.cc index d11a6afe9b..50af3199f2 100644 --- a/paddle/operators/math/im2col.cc +++ b/paddle/operators/math/im2col.cc @@ -61,19 +61,10 @@ class Im2ColFunctor(); T* col_data = col->data(); - int w_offset = -1; - int h_offset = 0; - int c_im = 0; for (int c = 0; c < channels_col; ++c) { - ++w_offset; - if (w_offset == filter_width) { - w_offset = 0; - ++h_offset; - if (h_offset == filter_height) { - h_offset = 0; - ++c_im; - } - } + int w_offset = c % filter_width; + int h_offset = (c / filter_width) % filter_height; + int c_im = c / (filter_width * filter_height); for (int h = 0; h < col_height; ++h) { int im_row_idx = h * stride[0] - padding[0] + h_offset * dilation[0]; for (int w = 0; w < col_width; ++w) { From 52177acde40ecf6725872f180a19a2111ece0c5b Mon Sep 17 00:00:00 2001 From: Luo Tao Date: Tue, 19 Dec 2017 19:50:07 +0800 Subject: [PATCH 172/193] fix broken links to pass the ci --- doc/getstarted/build_and_install/docker_install_cn.rst | 2 +- doc/getstarted/build_and_install/docker_install_en.rst | 2 +- doc/howto/usage/cluster/k8s_distributed_cn.md | 2 -- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/doc/getstarted/build_and_install/docker_install_cn.rst b/doc/getstarted/build_and_install/docker_install_cn.rst index 1eb06e4182..fa1b6a3727 100644 --- a/doc/getstarted/build_and_install/docker_install_cn.rst +++ b/doc/getstarted/build_and_install/docker_install_cn.rst @@ -128,7 +128,7 @@ PaddlePaddle Book是为用户和开发者制作的一个交互式的Jupyter Note AVX是一种CPU指令集,可以加速PaddlePaddle的计算。最新的PaddlePaddle Docker镜像默认 是开启AVX编译的,所以,如果您的电脑不支持AVX,需要单独 -`编译 <./build_from_source_cn.rst>`_ PaddlePaddle为no-avx版本。 +`编译 <./build_from_source_cn.html>`_ PaddlePaddle为no-avx版本。 以下指令能检查Linux电脑是否支持AVX: diff --git a/doc/getstarted/build_and_install/docker_install_en.rst b/doc/getstarted/build_and_install/docker_install_en.rst index 5a46c598f2..06012bf65e 100644 --- a/doc/getstarted/build_and_install/docker_install_en.rst +++ b/doc/getstarted/build_and_install/docker_install_en.rst @@ -137,7 +137,7 @@ GPU driver installed before move on. AVX is a kind of CPU instruction can accelerate PaddlePaddle's calculations. The latest PaddlePaddle Docker image turns AVX on by default, so, if your computer doesn't support AVX, you'll probably need to -`build <./build_from_source_en.rst>`_ with :code:`WITH_AVX=OFF`. +`build <./build_from_source_en.html>`_ with :code:`WITH_AVX=OFF`. The following command will tell you whether your computer supports AVX. diff --git a/doc/howto/usage/cluster/k8s_distributed_cn.md b/doc/howto/usage/cluster/k8s_distributed_cn.md index 0fc9e37a99..ed707004c8 100644 --- a/doc/howto/usage/cluster/k8s_distributed_cn.md +++ b/doc/howto/usage/cluster/k8s_distributed_cn.md @@ -2,8 +2,6 @@ 前一篇文章介绍了如何在Kubernetes集群上启动一个单机PaddlePaddle训练作业 (Job)。在这篇文章里,我们介绍如何在Kubernetes集群上进行分布式PaddlePaddle训练作业。关于PaddlePaddle的分布式训练,文章 [Cluster Training](http://www.paddlepaddle.org/docs/develop/documentation/zh/howto/usage/cluster/cluster_train_cn.html)介绍了一种通过SSH远程分发任务,进行分布式训练的方法,与此不同的是,本文将介绍在Kubernetes容器管理平台上快速构建PaddlePaddle容器集群,进行分布式训练的方案。 -有关Kubernetes相关概念以及如何搭建和配置Kubernetes集群,可以参考[k8s_basis](./k8s_basis_cn.md)。 - ## 整体方案 在训练之前,用户将配置与训练数据切分好放在分布式文件系统预先分配好的目录中(不同的分布式文件系统,需要使用其制定的方式挂载后并导入数据),训练时,程序从此目录拷贝文件到容器内进行训练,将结果保存到此目录里。整体的结构图如下: From 31dba88793dbff1e1f7b965c911a39651f148fd5 Mon Sep 17 00:00:00 2001 From: Yancey1989 Date: Tue, 19 Dec 2017 19:54:11 +0800 Subject: [PATCH 173/193] revert paddlepaddle/paddlepaddle.org --- doc/howto/dev/write_docs_cn.rst | 2 +- doc/howto/dev/write_docs_en.rst | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/howto/dev/write_docs_cn.rst b/doc/howto/dev/write_docs_cn.rst index addc50965b..1bc947c260 100644 --- a/doc/howto/dev/write_docs_cn.rst +++ b/doc/howto/dev/write_docs_cn.rst @@ -29,7 +29,7 @@ PaddlePaddle的文档构建有三种方式。 git clone https://github.com/PaddlePaddle/Mobile.git # Please specify the working directory through -v - docker run -it -p 8000:8000 -v `pwd`:/var/content docker.paddlepaddle.org/paddle:latest + docker run -it -p 8000:8000 -v `pwd`:/var/content paddlepaddle/paddlepaddle.org:latest 注意: PaddlePaddle.org 会在 -v (volume) 指定的内容存储库运行命令 之后再用网页连到http://localhost:8000就可以在网页上生成需要的文档 diff --git a/doc/howto/dev/write_docs_en.rst b/doc/howto/dev/write_docs_en.rst index 2d97d05861..b3ef07eb1d 100644 --- a/doc/howto/dev/write_docs_en.rst +++ b/doc/howto/dev/write_docs_en.rst @@ -30,7 +30,7 @@ The tool uses Docker, please install it on your system. Please check Docker offi git clone https://github.com/PaddlePaddle/Mobile.git # Please specify the working directory through -v - docker run -it -p 8000:8000 -v `pwd`:/var/content docker.paddlepaddle.org/paddle:latest + docker run -it -p 8000:8000 -v `pwd`:/var/content paddlepaddle/paddlepaddle.org:latest Note: PaddlePaddle.org will read the content repos specified in the -v (volume) flag of the docker run command Use a web browser and navigate to http://localhost:8000, click the buttons to compile the documentation From 9eacf497913abddc8c1b37387eed89a398a1b952 Mon Sep 17 00:00:00 2001 From: Yancey1989 Date: Tue, 19 Dec 2017 19:56:43 +0800 Subject: [PATCH 174/193] update --- doc/howto/usage/cluster/src/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/howto/usage/cluster/src/Dockerfile b/doc/howto/usage/cluster/src/Dockerfile index 6e6bf82bd0..e178bf4da0 100644 --- a/doc/howto/usage/cluster/src/Dockerfile +++ b/doc/howto/usage/cluster/src/Dockerfile @@ -1,4 +1,4 @@ -FROM paddlepaddle/paddle:cpu-latest +FROM paddlepaddle/paddle:latest MAINTAINER zjsxzong89@gmail.com From e445b3ff20f0c568b7d01ed91cbd154c745e124c Mon Sep 17 00:00:00 2001 From: Yu Yang Date: Wed, 20 Dec 2017 10:18:10 +0800 Subject: [PATCH 175/193] Move framework.proto to proto namespace (#6718) * Move framework.proto to proto namespace * Fix compile * Fix compile * Fix Compile --- doc/howto/dev/new_op_cn.md | 4 +- doc/howto/dev/new_op_en.md | 4 +- paddle/framework/attribute.cc | 18 +-- paddle/framework/attribute.h | 6 +- paddle/framework/backward.cc | 2 +- paddle/framework/backward_test.cc | 2 +- paddle/framework/block_desc.cc | 10 +- paddle/framework/block_desc.h | 10 +- paddle/framework/data_type.h | 9 +- paddle/framework/details/op_registry.h | 2 +- paddle/framework/executor.cc | 16 +-- paddle/framework/framework.proto | 2 +- paddle/framework/lod_tensor.cc | 12 +- paddle/framework/op_desc.cc | 36 ++--- paddle/framework/op_desc.h | 8 +- paddle/framework/op_info.h | 4 +- paddle/framework/op_proto_maker.h | 4 +- paddle/framework/op_proto_maker_test.cc | 8 +- paddle/framework/op_registry.cc | 6 +- paddle/framework/op_registry.h | 2 +- paddle/framework/op_registry_test.cc | 18 +-- paddle/framework/operator.cc | 6 +- paddle/framework/operator.h | 9 +- paddle/framework/operator_test.cc | 16 +-- paddle/framework/program_desc.cc | 4 +- paddle/framework/program_desc.h | 6 +- paddle/framework/program_desc_test.cc | 20 +-- paddle/framework/prune.cc | 16 ++- paddle/framework/prune.h | 5 +- paddle/framework/prune_test.cc | 34 ++--- paddle/framework/shape_inference.cc | 8 +- paddle/framework/shape_inference.h | 9 +- paddle/framework/var_desc.cc | 36 ++--- paddle/framework/var_desc.h | 20 +-- paddle/framework/var_type.h | 18 +-- paddle/framework/var_type_inference_test.cc | 26 ++-- paddle/operators/accuracy_op.cc | 3 +- paddle/operators/activation_op.cc | 124 ++++++++---------- paddle/operators/adadelta_op.cc | 3 +- paddle/operators/adagrad_op.cc | 3 +- paddle/operators/adam_op.cc | 2 +- paddle/operators/adamax_op.cc | 2 +- paddle/operators/array_to_lod_tensor_op.cc | 3 +- paddle/operators/assign_op.cc | 7 +- paddle/operators/auc_op.cc | 2 +- paddle/operators/batch_norm_op.cc | 3 +- paddle/operators/beam_search_decode_op.cc | 9 +- paddle/operators/beam_search_op.cc | 3 +- .../operators/bilinear_tensor_product_op.cc | 3 +- paddle/operators/cast_op.cc | 3 +- paddle/operators/cast_op.h | 2 +- paddle/operators/chunk_eval_op.cc | 5 +- paddle/operators/clip_by_norm_op.cc | 3 +- paddle/operators/clip_op.cc | 2 +- paddle/operators/compare_op.cc | 3 +- paddle/operators/concat_op.cc | 2 +- paddle/operators/cond_op.cc | 3 +- paddle/operators/conditional_block_op.cc | 3 +- paddle/operators/conv_cudnn_op.cc | 6 +- paddle/operators/conv_op.cc | 6 +- paddle/operators/conv_op.h | 6 +- paddle/operators/conv_shift_op.cc | 3 +- paddle/operators/conv_transpose_cudnn_op.cc | 6 +- paddle/operators/conv_transpose_op.cc | 8 +- paddle/operators/conv_transpose_op.h | 6 +- paddle/operators/cos_sim_op.cc | 2 +- paddle/operators/crf_decoding_op.cc | 3 +- paddle/operators/crop_op.cc | 2 +- paddle/operators/cross_entropy_op.cc | 3 +- paddle/operators/decayed_adagrad_op.cc | 3 +- paddle/operators/dropout_op.cc | 3 +- paddle/operators/elementwise_add_op.cc | 3 +- paddle/operators/elementwise_div_op.cc | 3 +- paddle/operators/elementwise_mul_op.cc | 3 +- paddle/operators/elementwise_op.h | 3 +- paddle/operators/elementwise_sub_op.cc | 3 +- paddle/operators/expand_op.cc | 2 +- paddle/operators/feed_op.cc | 3 +- paddle/operators/fetch_op.cc | 3 +- .../fill_constant_batch_size_like_op.cc | 7 +- paddle/operators/fill_constant_op.cc | 8 +- paddle/operators/fill_op.cc | 6 +- paddle/operators/fill_zeros_like_op.cc | 3 +- paddle/operators/ftrl_op.cc | 2 +- paddle/operators/gather_op.cc | 2 +- paddle/operators/gaussian_random_op.cc | 7 +- paddle/operators/gru_op.cc | 2 +- paddle/operators/gru_unit_op.cc | 3 +- paddle/operators/hinge_loss_op.cc | 3 +- paddle/operators/huber_loss_op.cc | 3 +- paddle/operators/increment_op.cc | 3 +- paddle/operators/is_empty_op.cc | 3 +- paddle/operators/l1_norm_op.cc | 2 +- paddle/operators/linear_chain_crf_op.cc | 3 +- paddle/operators/load_op.cc | 3 +- paddle/operators/lod_array_length_op.cc | 3 +- paddle/operators/lod_rank_table_op.cc | 5 +- paddle/operators/lod_reset_op.cc | 3 +- paddle/operators/lod_tensor_to_array_op.cc | 5 +- paddle/operators/log_loss_op.cc | 3 +- paddle/operators/logical_op.cc | 6 +- paddle/operators/lookup_table_op.cc | 8 +- paddle/operators/lrn_op.cc | 2 +- paddle/operators/lstm_op.cc | 2 +- paddle/operators/lstm_unit_op.cc | 3 +- paddle/operators/margin_rank_loss_op.cc | 3 +- paddle/operators/matmul_op.cc | 2 +- paddle/operators/max_sequence_len_op.cc | 3 +- paddle/operators/maxout_op.cc | 2 +- paddle/operators/mean_op.cc | 2 +- paddle/operators/merge_lod_tensor_op.cc | 3 +- paddle/operators/minus_op.cc | 2 +- paddle/operators/modified_huber_loss_op.cc | 3 +- paddle/operators/momentum_op.cc | 3 +- paddle/operators/mul_op.cc | 2 +- paddle/operators/multiplex_op.cc | 3 +- paddle/operators/name_convention.md | 4 +- paddle/operators/nccl_op.cc | 14 +- paddle/operators/nce_op.cc | 2 +- paddle/operators/pad_op.cc | 2 +- paddle/operators/pool_op.cc | 6 +- paddle/operators/pool_op.h | 6 +- paddle/operators/pool_with_index_op.cc | 6 +- paddle/operators/positive_negative_pair_op.cc | 3 +- paddle/operators/precision_recall_op.cc | 3 +- paddle/operators/prelu_op.cc | 2 +- paddle/operators/proximal_adagrad_op.cc | 3 +- paddle/operators/proximal_gd_op.cc | 3 +- paddle/operators/rank_loss_op.cc | 3 +- paddle/operators/recurrent_op.cc | 3 +- paddle/operators/recv_op.cc | 2 +- paddle/operators/reduce_op.cc | 14 +- paddle/operators/reshape_op.cc | 3 +- paddle/operators/rmsprop_op.cc | 3 +- paddle/operators/rnn_memory_helper_op.cc | 10 +- paddle/operators/roi_pool_op.cc | 3 +- paddle/operators/row_conv_op.cc | 3 +- paddle/operators/save_op.cc | 3 +- paddle/operators/scale_op.cc | 2 +- paddle/operators/scatter_op.cc | 3 +- paddle/operators/send_op.cc | 2 +- paddle/operators/sequence_concat_op.cc | 3 +- paddle/operators/sequence_conv_op.cc | 3 +- paddle/operators/sequence_expand_op.cc | 3 +- paddle/operators/sequence_pool_op.cc | 3 +- paddle/operators/sequence_slice_op.cc | 3 +- paddle/operators/sequence_softmax_op.cc | 3 +- paddle/operators/sgd_op.cc | 2 +- paddle/operators/shrink_rnn_memory_op.cc | 3 +- .../sigmoid_cross_entropy_with_logits_op.cc | 4 +- paddle/operators/sign_op.cc | 2 +- paddle/operators/smooth_l1_loss_op.cc | 3 +- paddle/operators/softmax_op.cc | 3 +- .../softmax_with_cross_entropy_op.cc | 3 +- paddle/operators/split_lod_tensor_op.cc | 3 +- paddle/operators/split_op.cc | 2 +- paddle/operators/spp_op.cc | 2 +- paddle/operators/squared_l2_distance_op.cc | 3 +- paddle/operators/squared_l2_norm_op.cc | 3 +- paddle/operators/sum_op.cc | 18 +-- .../operators/tensor_array_read_write_op.cc | 8 +- paddle/operators/top_k_op.cc | 2 +- paddle/operators/transpose_op.cc | 3 +- paddle/operators/uniform_random_op.cc | 7 +- paddle/operators/unpool_op.cc | 3 +- paddle/operators/while_op.cc | 6 +- paddle/pybind/print_operators_doc.cc | 27 ++-- paddle/pybind/protobuf.cc | 54 ++++---- paddle/pybind/pybind.cc | 8 +- 169 files changed, 506 insertions(+), 606 deletions(-) diff --git a/doc/howto/dev/new_op_cn.md b/doc/howto/dev/new_op_cn.md index 757a5840bc..3109d72001 100644 --- a/doc/howto/dev/new_op_cn.md +++ b/doc/howto/dev/new_op_cn.md @@ -53,7 +53,7 @@ Kernel实现 | CPU、CUDA共享Kernel实现在`.h`文件中,否则,CPU ```cpp class MulOpMaker : public framework::OpProtoAndCheckerMaker { public: - MulOpMaker(framework::OpProto *proto, framework::OpAttrChecker *op_checker) + MulOpMaker(OpProto *proto, OpAttrChecker *op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "(Tensor), 2D tensor of size (M x K)"); AddInput("Y", "(Tensor), 2D tensor of size (K x N)"); @@ -82,7 +82,7 @@ The equation is: Out = X * Y template class ScaleOpMaker : public framework::OpProtoAndCheckerMaker { public: - ScaleOpMaker(framework::OpProto *proto, framework::OpAttrChecker *op_checker) + ScaleOpMaker(OpProto *proto, OpAttrChecker *op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "The input tensor of scale operator.").NotInGradient(); AddOutput("Out", "The output tensor of scale operator.").NotInGradient(); diff --git a/doc/howto/dev/new_op_en.md b/doc/howto/dev/new_op_en.md index fe86936bc1..7175d8370d 100644 --- a/doc/howto/dev/new_op_en.md +++ b/doc/howto/dev/new_op_en.md @@ -50,7 +50,7 @@ First, define `ProtoMaker` to describe the Operator's input, output, and additio ```cpp class MulOpMaker : public framework::OpProtoAndCheckerMaker { public: - MulOpMaker(framework::OpProto *proto, framework::OpAttrChecker *op_checker) + MulOpMaker(OpProto *proto, OpAttrChecker *op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "(Tensor), 2D tensor of size (M x K)"); AddInput("Y", "(Tensor), 2D tensor of size (K x N)"); @@ -79,7 +79,7 @@ An additional example [`ScaleOp`](https://github.com/PaddlePaddle/Paddle/blob/de template class ScaleOpMaker : public framework::OpProtoAndCheckerMaker { public: - ScaleOpMaker(framework::OpProto *proto, framework::OpAttrChecker *op_checker) + ScaleOpMaker(OpProto *proto, OpAttrChecker *op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "The input tensor of scale operator.").NotInGradient(); AddOutput("Out", "The output tensor of scale operator.").NotInGradient(); diff --git a/paddle/framework/attribute.cc b/paddle/framework/attribute.cc index b1e1793641..b0fd4d2750 100644 --- a/paddle/framework/attribute.cc +++ b/paddle/framework/attribute.cc @@ -19,42 +19,42 @@ limitations under the License. */ namespace paddle { namespace framework { -Attribute GetAttrValue(const OpDesc::Attr& attr_desc) { +Attribute GetAttrValue(const proto::OpDesc::Attr& attr_desc) { switch (attr_desc.type()) { - case framework::AttrType::BOOLEAN: { + case proto::AttrType::BOOLEAN: { return attr_desc.b(); } - case framework::AttrType::INT: { + case proto::AttrType::INT: { return attr_desc.i(); } - case framework::AttrType::FLOAT: { + case proto::AttrType::FLOAT: { return attr_desc.f(); } - case framework::AttrType::STRING: { + case proto::AttrType::STRING: { return attr_desc.s(); } - case framework::AttrType::BOOLEANS: { + case proto::AttrType::BOOLEANS: { std::vector val(attr_desc.bools_size()); for (int i = 0; i < attr_desc.bools_size(); ++i) { val[i] = attr_desc.bools(i); } return val; } - case framework::AttrType::INTS: { + case proto::AttrType::INTS: { std::vector val(attr_desc.ints_size()); for (int i = 0; i < attr_desc.ints_size(); ++i) { val[i] = attr_desc.ints(i); } return val; } - case framework::AttrType::FLOATS: { + case proto::AttrType::FLOATS: { std::vector val(attr_desc.floats_size()); for (int i = 0; i < attr_desc.floats_size(); ++i) { val[i] = attr_desc.floats(i); } return val; } - case framework::AttrType::STRINGS: { + case proto::AttrType::STRINGS: { std::vector val(attr_desc.strings_size()); for (int i = 0; i < attr_desc.strings_size(); ++i) { val[i] = attr_desc.strings(i); diff --git a/paddle/framework/attribute.h b/paddle/framework/attribute.h index 0641907d6f..c1c63d9cb1 100644 --- a/paddle/framework/attribute.h +++ b/paddle/framework/attribute.h @@ -27,12 +27,12 @@ limitations under the License. */ namespace paddle { namespace framework { template -inline AttrType AttrTypeID() { +inline proto::AttrType AttrTypeID() { Attribute tmp = T(); - return static_cast(tmp.which() - 1); + return static_cast(tmp.which() - 1); } -Attribute GetAttrValue(const OpDesc::Attr& attr_desc); +Attribute GetAttrValue(const proto::OpDesc::Attr& attr_desc); class AttrReader { public: diff --git a/paddle/framework/backward.cc b/paddle/framework/backward.cc index faf6e60cbd..f1a577325f 100644 --- a/paddle/framework/backward.cc +++ b/paddle/framework/backward.cc @@ -341,7 +341,7 @@ static void CreateGradVarInBlock( auto* param = block_desc->FindVarRecursive(pname); auto* grad = block_desc->FindVar(arg); if (param == nullptr) { - grad->SetDataType(DataType::FP32); + grad->SetDataType(proto::DataType::FP32); } else { grad->SetDataType(param->GetDataType()); } diff --git a/paddle/framework/backward_test.cc b/paddle/framework/backward_test.cc index 9fe49881d5..1099fffab3 100644 --- a/paddle/framework/backward_test.cc +++ b/paddle/framework/backward_test.cc @@ -166,7 +166,7 @@ class FillZeroOpMaker : public OpProtoAndCheckerMaker { class SumOpMaker : public framework::OpProtoAndCheckerMaker { public: - SumOpMaker(framework::OpProto *proto, framework::OpAttrChecker *op_checker) + SumOpMaker(OpProto *proto, OpAttrChecker *op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "the input tensors of sum operator.").AsDuplicable(); AddOutput("Out", "the output tensor of sum operator."); diff --git a/paddle/framework/block_desc.cc b/paddle/framework/block_desc.cc index 6a7a07d5cf..6b961caebd 100644 --- a/paddle/framework/block_desc.cc +++ b/paddle/framework/block_desc.cc @@ -128,22 +128,22 @@ BlockDescBind *BlockDescBind::ParentBlock() const { return prog_->MutableBlock(static_cast(this->desc_->parent_idx())); } -BlockDesc *BlockDescBind::Proto() { +proto::BlockDesc *BlockDescBind::Proto() { Flush(); return desc_; } -BlockDescBind::BlockDescBind(ProgramDescBind *prog, BlockDesc *desc) +BlockDescBind::BlockDescBind(ProgramDescBind *prog, proto::BlockDesc *desc) : prog_(prog), desc_(desc), need_update_(false) { - for (const VarDesc &var_desc : desc_->vars()) { + for (const proto::VarDesc &var_desc : desc_->vars()) { vars_[var_desc.name()].reset(new VarDescBind(var_desc)); } - for (const OpDesc &op_desc : desc_->ops()) { + for (const proto::OpDesc &op_desc : desc_->ops()) { ops_.emplace_back(new OpDescBind(op_desc, prog)); } } -BlockDescBind::BlockDescBind(const BlockDescBind &other, BlockDesc *desc, +BlockDescBind::BlockDescBind(const BlockDescBind &other, proto::BlockDesc *desc, ProgramDescBind *prog) : prog_(prog), desc_(desc) { need_update_ = true; diff --git a/paddle/framework/block_desc.h b/paddle/framework/block_desc.h index 8e967e5378..592fe49e07 100644 --- a/paddle/framework/block_desc.h +++ b/paddle/framework/block_desc.h @@ -36,9 +36,9 @@ class ProgramDescBind; class BlockDescBind { public: - BlockDescBind(ProgramDescBind *prog, BlockDesc *desc); + BlockDescBind(ProgramDescBind *prog, proto::BlockDesc *desc); - BlockDescBind(const BlockDescBind &other, BlockDesc *desc, + BlockDescBind(const BlockDescBind &other, proto::BlockDesc *desc, ProgramDescBind *prog); ~BlockDescBind() { @@ -88,7 +88,7 @@ class BlockDescBind { void Flush(); - BlockDesc *Proto(); + proto::BlockDesc *Proto(); ProgramDescBind *Program() { return this->prog_; } @@ -97,8 +97,8 @@ class BlockDescBind { void ClearPBVars(); private: - ProgramDescBind *prog_; // not_own - BlockDesc *desc_; // not_own + ProgramDescBind *prog_; // not_own + proto::BlockDesc *desc_; // not_own bool need_update_; std::deque> ops_; diff --git a/paddle/framework/data_type.h b/paddle/framework/data_type.h index c54d2d4ddf..e94ee2ed52 100644 --- a/paddle/framework/data_type.h +++ b/paddle/framework/data_type.h @@ -20,7 +20,8 @@ namespace paddle { namespace framework { -inline DataType ToDataType(std::type_index type) { +inline proto::DataType ToDataType(std::type_index type) { + using namespace paddle::framework::proto; if (typeid(float).hash_code() == type.hash_code()) { return DataType::FP32; } else if (typeid(double).hash_code() == type.hash_code()) { @@ -36,7 +37,8 @@ inline DataType ToDataType(std::type_index type) { } } -inline std::type_index ToTypeIndex(DataType type) { +inline std::type_index ToTypeIndex(proto::DataType type) { + using namespace paddle::framework::proto; switch (type) { case DataType::FP32: return typeid(float); @@ -54,7 +56,8 @@ inline std::type_index ToTypeIndex(DataType type) { } template -inline void VisitDataType(DataType type, Visitor visitor) { +inline void VisitDataType(proto::DataType type, Visitor visitor) { + using namespace paddle::framework::proto; switch (type) { case DataType::FP32: visitor.template operator()(); diff --git a/paddle/framework/details/op_registry.h b/paddle/framework/details/op_registry.h index f91e0e0341..435f0b6b78 100644 --- a/paddle/framework/details/op_registry.h +++ b/paddle/framework/details/op_registry.h @@ -90,7 +90,7 @@ struct OpInfoFiller { template struct OpInfoFiller { void operator()(const char* op_type, OpInfo* info) const { - info->proto_ = new OpProto; + info->proto_ = new proto::OpProto; info->checker_ = new OpAttrChecker(); auto maker = T(info->proto_, info->checker_); maker.Validate(); diff --git a/paddle/framework/executor.cc b/paddle/framework/executor.cc index a8b8a6f8e8..ea6b259c09 100644 --- a/paddle/framework/executor.cc +++ b/paddle/framework/executor.cc @@ -41,20 +41,20 @@ Executor::Executor(const std::vector& places) { device_contexts_.swap(borrowed_contexts); } -static void CreateTensor(Variable* var, VarDesc::VarType var_type) { - if (var_type == VarDesc::LOD_TENSOR) { +static void CreateTensor(Variable* var, proto::VarDesc::VarType var_type) { + if (var_type == proto::VarDesc::LOD_TENSOR) { var->GetMutable(); - } else if (var_type == VarDesc::SELECTED_ROWS) { + } else if (var_type == proto::VarDesc::SELECTED_ROWS) { var->GetMutable(); - } else if (var_type == VarDesc::FEED_MINIBATCH) { + } else if (var_type == proto::VarDesc::FEED_MINIBATCH) { var->GetMutable(); - } else if (var_type == VarDesc::FETCH_LIST) { + } else if (var_type == proto::VarDesc::FETCH_LIST) { var->GetMutable(); - } else if (var_type == VarDesc::STEP_SCOPES) { + } else if (var_type == proto::VarDesc::STEP_SCOPES) { var->GetMutable>(); - } else if (var_type == VarDesc::LOD_RANK_TABLE) { + } else if (var_type == proto::VarDesc::LOD_RANK_TABLE) { var->GetMutable(); - } else if (var_type == VarDesc::LOD_TENSOR_ARRAY) { + } else if (var_type == proto::VarDesc::LOD_TENSOR_ARRAY) { var->GetMutable(); } else { PADDLE_THROW( diff --git a/paddle/framework/framework.proto b/paddle/framework/framework.proto index f1fc4529e1..4f2746e4b8 100644 --- a/paddle/framework/framework.proto +++ b/paddle/framework/framework.proto @@ -14,7 +14,7 @@ limitations under the License. */ syntax = "proto2"; option optimize_for = LITE_RUNTIME; -package paddle.framework; +package paddle.framework.proto; enum AttrType { INT = 0; diff --git a/paddle/framework/lod_tensor.cc b/paddle/framework/lod_tensor.cc index fdf6de4bab..465f8c62b5 100644 --- a/paddle/framework/lod_tensor.cc +++ b/paddle/framework/lod_tensor.cc @@ -197,7 +197,7 @@ void SerializeToStream(std::ostream &os, const LoDTensor &tensor, { // the 2nd field, tensor description // int32_t size // void* protobuf message - framework::TensorDesc desc; + proto::TensorDesc desc; desc.set_data_type(framework::ToDataType(tensor.type())); auto dims = framework::vectorize(tensor.dims()); auto *pb_dims = desc.mutable_dims(); @@ -262,7 +262,7 @@ void DeserializeFromStream(std::istream &is, LoDTensor *tensor) { uint32_t version; is.read(reinterpret_cast(&version), sizeof(version)); PADDLE_ENFORCE_EQ(version, 0U, "Only version 0 is supported"); - framework::TensorDesc desc; + proto::TensorDesc desc; { // int32_t size // proto buffer int32_t size; @@ -281,16 +281,16 @@ void DeserializeFromStream(std::istream &is, LoDTensor *tensor) { void *buf; platform::Place cpu = platform::CPUPlace(); switch (desc.data_type()) { - case framework::FP32: + case proto::FP32: buf = tensor->mutable_data(cpu); break; - case framework::FP64: + case proto::FP64: buf = tensor->mutable_data(cpu); break; - case framework::INT32: + case proto::INT32: buf = tensor->mutable_data(cpu); break; - case framework::INT64: + case proto::INT64: buf = tensor->mutable_data(cpu); break; default: diff --git a/paddle/framework/op_desc.cc b/paddle/framework/op_desc.cc index 7ba1e3e4e3..7af5b68727 100644 --- a/paddle/framework/op_desc.cc +++ b/paddle/framework/op_desc.cc @@ -58,11 +58,11 @@ class CompileTimeInferShapeContext : public InferShapeContext { PADDLE_ENFORCE_LT(j, Outputs(out).size()); auto *in_var = block_.FindVarRecursive(Inputs(in)[i]); auto *out_var = block_.FindVarRecursive(Outputs(out)[j]); - if (in_var->GetType() != VarDesc::LOD_TENSOR) { + if (in_var->GetType() != proto::VarDesc::LOD_TENSOR) { VLOG(3) << "input " << in << " is not LodTensor"; return; } - PADDLE_ENFORCE_EQ(in_var->GetType(), VarDesc::LOD_TENSOR, + PADDLE_ENFORCE_EQ(in_var->GetType(), proto::VarDesc::LOD_TENSOR, "The %d-th output of Output(%s) must be LoDTensor.", j, out); out_var->SetLoDLevel(in_var->GetLodLevel()); @@ -70,7 +70,7 @@ class CompileTimeInferShapeContext : public InferShapeContext { bool IsRuntime() const override; protected: - VarDesc::VarType GetVarType(const std::string &name) const override; + proto::VarDesc::VarType GetVarType(const std::string &name) const override; DDim GetDim(const std::string &name) const override; @@ -90,12 +90,12 @@ OpDescBind::OpDescBind(const std::string &type, const VariableNameMap &inputs, need_update_ = true; } -OpDescBind::OpDescBind(const OpDesc &desc, ProgramDescBind *prog) +OpDescBind::OpDescBind(const proto::OpDesc &desc, ProgramDescBind *prog) : desc_(desc), need_update_(false) { // restore inputs_ int input_size = desc_.inputs_size(); for (int i = 0; i < input_size; ++i) { - const OpDesc::Var &var = desc_.inputs(i); + const proto::OpDesc::Var &var = desc_.inputs(i); std::vector &args = inputs_[var.parameter()]; int argu_size = var.arguments_size(); args.reserve(argu_size); @@ -106,7 +106,7 @@ OpDescBind::OpDescBind(const OpDesc &desc, ProgramDescBind *prog) // restore outputs_ int output_size = desc_.outputs_size(); for (int i = 0; i < output_size; ++i) { - const OpDesc::Var &var = desc_.outputs(i); + const proto::OpDesc::Var &var = desc_.outputs(i); std::vector &args = outputs_[var.parameter()]; int argu_size = var.arguments_size(); args.reserve(argu_size); @@ -115,9 +115,9 @@ OpDescBind::OpDescBind(const OpDesc &desc, ProgramDescBind *prog) } } // restore attrs_ - for (const OpDesc::Attr &attr : desc_.attrs()) { + for (const proto::OpDesc::Attr &attr : desc_.attrs()) { std::string attr_name = attr.name(); - if (attr.type() != AttrType::BLOCK) { + if (attr.type() != proto::AttrType::BLOCK) { attrs_[attr_name] = GetAttrValue(attr); } else { auto bid = attr.block_idx(); @@ -126,7 +126,7 @@ OpDescBind::OpDescBind(const OpDesc &desc, ProgramDescBind *prog) } } -OpDesc *OpDescBind::Proto() { +proto::OpDesc *OpDescBind::Proto() { Flush(); return &desc_; } @@ -175,10 +175,10 @@ void OpDescBind::SetOutput(const std::string ¶m_name, this->outputs_[param_name] = args; } -AttrType OpDescBind::GetAttrType(const std::string &name) const { +proto::AttrType OpDescBind::GetAttrType(const std::string &name) const { auto it = attrs_.find(name); PADDLE_ENFORCE(it != attrs_.end(), "Attribute %s is not found", name); - return static_cast(it->second.which() - 1); + return static_cast(it->second.which() - 1); } std::vector OpDescBind::AttrNames() const { @@ -253,8 +253,8 @@ void OpDescBind::RenameInput(const std::string &old_name, } struct SetAttrDescVisitor : public boost::static_visitor { - explicit SetAttrDescVisitor(OpDesc::Attr *attr) : attr_(attr) {} - mutable OpDesc::Attr *attr_; + explicit SetAttrDescVisitor(proto::OpDesc::Attr *attr) : attr_(attr) {} + mutable proto::OpDesc::Attr *attr_; void operator()(int v) const { attr_->set_i(v); } void operator()(float v) const { attr_->set_f(v); } void operator()(const std::string &v) const { attr_->set_s(v); } @@ -272,7 +272,9 @@ struct SetAttrDescVisitor : public boost::static_visitor { void operator()(const std::vector &v) const { VectorToRepeated(v, attr_->mutable_bools()); } - void operator()(BlockDesc *desc) const { attr_->set_block_idx(desc->idx()); } + void operator()(proto::BlockDesc *desc) const { + attr_->set_block_idx(desc->idx()); + } void operator()(boost::blank) const { PADDLE_THROW("Unexpected branch"); } }; @@ -297,7 +299,7 @@ void OpDescBind::Flush() { auto *attr_desc = desc_.add_attrs(); attr_desc->set_name(attr.first); attr_desc->set_type( - static_cast(attr.second.which() - 1)); + static_cast(attr.second.which() - 1)); SetAttrDescVisitor visitor(attr_desc); boost::apply_visitor(visitor, attr.second); } @@ -375,7 +377,7 @@ void OpDescBind::InferVarType(BlockDescBind *block) const { for (auto &out_pair : this->outputs_) { for (auto &out_var_name : out_pair.second) { block->FindRecursiveOrCreateVar(out_var_name) - ->SetType(VarDesc::LOD_TENSOR); + ->SetType(proto::VarDesc::LOD_TENSOR); } } } @@ -484,7 +486,7 @@ void CompileTimeInferShapeContext::SetDim(const std::string &name, } bool CompileTimeInferShapeContext::IsRuntime() const { return false; } -VarDesc::VarType CompileTimeInferShapeContext::GetVarType( +proto::VarDesc::VarType CompileTimeInferShapeContext::GetVarType( const std::string &name) const { return block_.FindVarRecursive(name)->GetType(); } diff --git a/paddle/framework/op_desc.h b/paddle/framework/op_desc.h index da032319af..0f0f126f98 100644 --- a/paddle/framework/op_desc.h +++ b/paddle/framework/op_desc.h @@ -33,9 +33,9 @@ class OpDescBind { OpDescBind(const std::string &type, const VariableNameMap &inputs, const VariableNameMap &outputs, const AttributeMap &attrs); - OpDescBind(const OpDesc &desc, ProgramDescBind *prog); + OpDescBind(const proto::OpDesc &desc, ProgramDescBind *prog); - OpDesc *Proto(); + proto::OpDesc *Proto(); std::string Type() const { return desc_.type(); } @@ -59,7 +59,7 @@ class OpDescBind { return attrs_.find(name) != attrs_.end(); } - AttrType GetAttrType(const std::string &name) const; + proto::AttrType GetAttrType(const std::string &name) const; std::vector AttrNames() const; @@ -126,7 +126,7 @@ class OpDescBind { return ret_val; } - OpDesc desc_; + proto::OpDesc desc_; VariableNameMap inputs_; VariableNameMap outputs_; AttributeMap attrs_; diff --git a/paddle/framework/op_info.h b/paddle/framework/op_info.h index d3b1a3b5fa..7772d6e745 100644 --- a/paddle/framework/op_info.h +++ b/paddle/framework/op_info.h @@ -34,7 +34,7 @@ class InferShapeBase { struct OpInfo { OpCreator creator_; GradOpMakerFN grad_op_maker_; - OpProto* proto_{nullptr}; + proto::OpProto* proto_{nullptr}; OpAttrChecker* checker_{nullptr}; InferVarTypeFN infer_var_type_; InferShapeFN infer_shape_; @@ -43,7 +43,7 @@ struct OpInfo { return proto_ != nullptr && checker_ != nullptr; } - const OpProto& Proto() const { + const proto::OpProto& Proto() const { PADDLE_ENFORCE_NOT_NULL(proto_, "Operator Proto has not been registered"); PADDLE_ENFORCE(proto_->IsInitialized(), "Operator Proto must be initialized in op info"); diff --git a/paddle/framework/op_proto_maker.h b/paddle/framework/op_proto_maker.h index 44e8ab1689..efd3a5ca53 100644 --- a/paddle/framework/op_proto_maker.h +++ b/paddle/framework/op_proto_maker.h @@ -22,6 +22,8 @@ namespace framework { // this class not only make proto but also init attribute checkers. class OpProtoAndCheckerMaker { public: + using OpProto = proto::OpProto; + using OpAttrChecker = framework::OpAttrChecker; OpProtoAndCheckerMaker(OpProto* proto, OpAttrChecker* op_checker) : proto_(proto), op_checker_(op_checker) {} @@ -80,7 +82,7 @@ class OpProtoAndCheckerMaker { class NOPMaker : public OpProtoAndCheckerMaker { public: - NOPMaker(framework::OpProto* proto, framework::OpAttrChecker* op_checker) + NOPMaker(OpProto* proto, framework::OpAttrChecker* op_checker) : OpProtoAndCheckerMaker(proto, op_checker) {} }; diff --git a/paddle/framework/op_proto_maker_test.cc b/paddle/framework/op_proto_maker_test.cc index 988a14cf4d..f16cb6fa3a 100644 --- a/paddle/framework/op_proto_maker_test.cc +++ b/paddle/framework/op_proto_maker_test.cc @@ -18,7 +18,7 @@ limitations under the License. */ class TestAttrProtoMaker : public paddle::framework::OpProtoAndCheckerMaker { public: - TestAttrProtoMaker(paddle::framework::OpProto* proto, + TestAttrProtoMaker(paddle::framework::proto::OpProto* proto, paddle::framework::OpAttrChecker* op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddAttr("scale", "scale of test op"); @@ -27,7 +27,7 @@ class TestAttrProtoMaker : public paddle::framework::OpProtoAndCheckerMaker { }; TEST(ProtoMaker, DuplicatedAttr) { - paddle::framework::OpProto op_proto; + paddle::framework::proto::OpProto op_proto; paddle::framework::OpAttrChecker op_checker; auto proto_maker = TestAttrProtoMaker(&op_proto, &op_checker); ASSERT_THROW(proto_maker.Validate(), paddle::platform::EnforceNotMet); @@ -35,7 +35,7 @@ TEST(ProtoMaker, DuplicatedAttr) { class TestInOutProtoMaker : public paddle::framework::OpProtoAndCheckerMaker { public: - TestInOutProtoMaker(paddle::framework::OpProto* proto, + TestInOutProtoMaker(paddle::framework::proto::OpProto* proto, paddle::framework::OpAttrChecker* op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("input", "input of test op"); @@ -44,7 +44,7 @@ class TestInOutProtoMaker : public paddle::framework::OpProtoAndCheckerMaker { }; TEST(ProtoMaker, DuplicatedInOut) { - paddle::framework::OpProto op_proto; + paddle::framework::proto::OpProto op_proto; paddle::framework::OpAttrChecker op_checker; auto proto_maker = TestInOutProtoMaker(&op_proto, &op_checker); ASSERT_THROW(proto_maker.Validate(), paddle::platform::EnforceNotMet); diff --git a/paddle/framework/op_registry.cc b/paddle/framework/op_registry.cc index 8dedd873aa..f202c0b27a 100644 --- a/paddle/framework/op_registry.cc +++ b/paddle/framework/op_registry.cc @@ -31,7 +31,8 @@ std::unique_ptr OpRegistry::CreateOp( } static VariableNameMap ConvertOpDescVarsToVarNameMap( - const google::protobuf::RepeatedPtrField& op_desc_vars) { + const google::protobuf::RepeatedPtrField& + op_desc_vars) { VariableNameMap ret_val; for (auto& var : op_desc_vars) { auto& var_names = ret_val[var.parameter()]; @@ -43,7 +44,8 @@ static VariableNameMap ConvertOpDescVarsToVarNameMap( return ret_val; } -std::unique_ptr OpRegistry::CreateOp(const OpDesc& op_desc) { +std::unique_ptr OpRegistry::CreateOp( + const proto::OpDesc& op_desc) { VLOG(1) << "CreateOp directly from OpDesc is deprecated. It should only be" "used in unit tests. Use CreateOp(const OpDescBind& op_desc) " "instead."; diff --git a/paddle/framework/op_registry.h b/paddle/framework/op_registry.h index b29238432b..7367e0e637 100644 --- a/paddle/framework/op_registry.h +++ b/paddle/framework/op_registry.h @@ -77,7 +77,7 @@ class OpRegistry { const VariableNameMap& outputs, AttributeMap attrs); - static std::unique_ptr CreateOp(const OpDesc& op_desc); + static std::unique_ptr CreateOp(const proto::OpDesc& op_desc); static std::unique_ptr CreateOp(const OpDescBind& op_desc); }; diff --git a/paddle/framework/op_registry_test.cc b/paddle/framework/op_registry_test.cc index b860fe6cac..27713e5cbf 100644 --- a/paddle/framework/op_registry_test.cc +++ b/paddle/framework/op_registry_test.cc @@ -51,7 +51,7 @@ class MyTestOpProtoAndCheckerMaker : public OpProtoAndCheckerMaker { static void BuildVar(const std::string& param_name, std::initializer_list arguments, - paddle::framework::OpDesc::Var* var) { + paddle::framework::proto::OpDesc::Var* var) { var->set_parameter(param_name); for (auto& arg_name : arguments) { var->add_arguments(arg_name); @@ -63,7 +63,7 @@ REGISTER_OP_WITHOUT_GRADIENT(my_test_op, paddle::framework::MyTestOp, paddle::framework::MyTestOpProtoAndCheckerMaker); TEST(OpRegistry, CreateOp) { - paddle::framework::OpDesc op_desc; + paddle::framework::proto::OpDesc op_desc; op_desc.set_type("cos_sim"); BuildVar("input", {"aa"}, op_desc.add_inputs()); BuildVar("output", {"bb"}, op_desc.add_outputs()); @@ -71,7 +71,7 @@ TEST(OpRegistry, CreateOp) { float scale = 3.3; auto attr = op_desc.mutable_attrs()->Add(); attr->set_name("scale"); - attr->set_type(paddle::framework::AttrType::FLOAT); + attr->set_type(paddle::framework::proto::AttrType::FLOAT); attr->set_f(scale); auto op = paddle::framework::OpRegistry::CreateOp(op_desc); @@ -83,14 +83,14 @@ TEST(OpRegistry, CreateOp) { } TEST(OpRegistry, IllegalAttr) { - paddle::framework::OpDesc op_desc; + paddle::framework::proto::OpDesc op_desc; op_desc.set_type("cos_sim"); BuildVar("input", {"aa"}, op_desc.add_inputs()); BuildVar("output", {"bb"}, op_desc.add_outputs()); auto attr = op_desc.mutable_attrs()->Add(); attr->set_name("scale"); - attr->set_type(paddle::framework::AttrType::FLOAT); + attr->set_type(paddle::framework::proto::AttrType::FLOAT); attr->set_f(-2.0); bool caught = false; @@ -108,7 +108,7 @@ TEST(OpRegistry, IllegalAttr) { } TEST(OpRegistry, DefaultValue) { - paddle::framework::OpDesc op_desc; + paddle::framework::proto::OpDesc op_desc; op_desc.set_type("cos_sim"); BuildVar("input", {"aa"}, op_desc.add_inputs()); BuildVar("output", {"bb"}, op_desc.add_outputs()); @@ -123,7 +123,7 @@ TEST(OpRegistry, DefaultValue) { } TEST(OpRegistry, CustomChecker) { - paddle::framework::OpDesc op_desc; + paddle::framework::proto::OpDesc op_desc; op_desc.set_type("my_test_op"); BuildVar("input", {"ii"}, op_desc.add_inputs()); BuildVar("output", {"oo"}, op_desc.add_outputs()); @@ -145,7 +145,7 @@ TEST(OpRegistry, CustomChecker) { // set 'test_attr' set to an illegal value auto attr = op_desc.mutable_attrs()->Add(); attr->set_name("test_attr"); - attr->set_type(paddle::framework::AttrType::INT); + attr->set_type(paddle::framework::proto::AttrType::INT); attr->set_i(3); caught = false; try { @@ -164,7 +164,7 @@ TEST(OpRegistry, CustomChecker) { op_desc.mutable_attrs()->Clear(); attr = op_desc.mutable_attrs()->Add(); attr->set_name("test_attr"); - attr->set_type(paddle::framework::AttrType::INT); + attr->set_type(paddle::framework::proto::AttrType::INT); attr->set_i(4); auto op = paddle::framework::OpRegistry::CreateOp(op_desc); paddle::platform::CPUDeviceContext dev_ctx; diff --git a/paddle/framework/operator.cc b/paddle/framework/operator.cc index e83d754783..0e58c0b570 100644 --- a/paddle/framework/operator.cc +++ b/paddle/framework/operator.cc @@ -377,7 +377,7 @@ class RuntimeInferShapeContext : public InferShapeContext { } } - VarDesc::VarType GetVarType(const std::string& name) const override { + proto::VarDesc::VarType GetVarType(const std::string& name) const override { auto* var = scope_.FindVar(name); return ToVarType(var->Type()); } @@ -417,7 +417,7 @@ OpKernelType OperatorWithKernel::GetKernelType( const ExecutionContext& ctx) const { return OpKernelType(IndicateDataType(ctx), ctx.GetPlace()); } -DataType OperatorWithKernel::IndicateDataType( +proto::DataType OperatorWithKernel::IndicateDataType( const ExecutionContext& ctx) const { auto& scope = ctx.scope(); int data_type = -1; @@ -443,7 +443,7 @@ DataType OperatorWithKernel::IndicateDataType( } } PADDLE_ENFORCE(data_type != -1, "DataType should be indicated by input"); - return static_cast(data_type); + return static_cast(data_type); } } // namespace framework diff --git a/paddle/framework/operator.h b/paddle/framework/operator.h index e60dbfc313..3207360cba 100644 --- a/paddle/framework/operator.h +++ b/paddle/framework/operator.h @@ -358,12 +358,13 @@ struct OpKernelType { }; platform::Place place_; - DataType data_type_; + proto::DataType data_type_; - OpKernelType(DataType data_type, platform::Place place) + OpKernelType(proto::DataType data_type, platform::Place place) : place_(place), data_type_(data_type) {} - OpKernelType(DataType data_type, const platform::DeviceContext& dev_ctx) + OpKernelType(proto::DataType data_type, + const platform::DeviceContext& dev_ctx) : place_(dev_ctx.GetPlace()), data_type_(data_type) {} bool operator==(const OpKernelType& o) const { @@ -409,7 +410,7 @@ class OperatorWithKernel : public OperatorBase { private: // indicate kernel DataType by input data. Defaultly all input data must be // same. - DataType IndicateDataType(const ExecutionContext& ctx) const; + proto::DataType IndicateDataType(const ExecutionContext& ctx) const; }; std::ostream& operator<<(std::ostream& os, const OpKernelType& kernel_key); diff --git a/paddle/framework/operator_test.cc b/paddle/framework/operator_test.cc index b678178454..05a4651522 100644 --- a/paddle/framework/operator_test.cc +++ b/paddle/framework/operator_test.cc @@ -58,7 +58,7 @@ class OpeWithoutKernelTestProtoAndCheckerMaker : public OpProtoAndCheckerMaker { static void BuildVar(const std::string& param_name, std::initializer_list arguments, - paddle::framework::OpDesc::Var* var) { + paddle::framework::proto::OpDesc::Var* var) { var->set_parameter(param_name); for (auto& arg_name : arguments) { *var->mutable_arguments()->Add() = arg_name; @@ -70,14 +70,14 @@ REGISTER_OP_WITHOUT_GRADIENT( paddle::framework::OpeWithoutKernelTestProtoAndCheckerMaker); TEST(OperatorBase, all) { - paddle::framework::OpDesc op_desc; + paddle::framework::proto::OpDesc op_desc; op_desc.set_type("test_operator"); BuildVar("input", {"IN1"}, op_desc.add_inputs()); BuildVar("output", {"OUT1"}, op_desc.add_outputs()); auto attr = op_desc.mutable_attrs()->Add(); attr->set_name("scale"); - attr->set_type(paddle::framework::AttrType::FLOAT); + attr->set_type(paddle::framework::proto::AttrType::FLOAT); attr->set_f(3.14); paddle::platform::CPUDeviceContext device_context; @@ -115,7 +115,7 @@ class OpWithKernelTest : public OperatorWithKernel { protected: void InferShape(framework::InferShapeContext* ctx) const override {} OpKernelType GetKernelType(const ExecutionContext& ctx) const override { - return OpKernelType(DataType::FP32, ctx.GetPlace()); + return OpKernelType(proto::DataType::FP32, ctx.GetPlace()); } }; @@ -195,14 +195,14 @@ REGISTER_OP_CPU_KERNEL(op_with_kernel, // test with single input TEST(OpKernel, all) { - paddle::framework::OpDesc op_desc; + paddle::framework::proto::OpDesc op_desc; op_desc.set_type("op_with_kernel"); BuildVar("x", {"IN1"}, op_desc.add_inputs()); BuildVar("y", {"OUT1"}, op_desc.add_outputs()); auto attr = op_desc.mutable_attrs()->Add(); attr->set_name("scale"); - attr->set_type(paddle::framework::AttrType::FLOAT); + attr->set_type(paddle::framework::proto::AttrType::FLOAT); attr->set_f(3.14); paddle::platform::CPUDeviceContext cpu_device_context; @@ -224,7 +224,7 @@ REGISTER_OP_CPU_KERNEL(op_multi_inputs_with_kernel, TEST(OpKernel, multi_inputs) { using namespace paddle::framework; - OpDesc op_desc; + proto::OpDesc op_desc; op_desc.set_type("op_multi_inputs_with_kernel"); BuildVar("xs", {"x0", "x1", "x2"}, op_desc.add_inputs()); BuildVar("k", {"k0"}, op_desc.add_inputs()); @@ -232,7 +232,7 @@ TEST(OpKernel, multi_inputs) { auto attr = op_desc.mutable_attrs()->Add(); attr->set_name("scale"); - attr->set_type(paddle::framework::AttrType::FLOAT); + attr->set_type(paddle::framework::proto::AttrType::FLOAT); attr->set_f(3.14); paddle::platform::CPUDeviceContext cpu_device_context; diff --git a/paddle/framework/program_desc.cc b/paddle/framework/program_desc.cc index 4af8d94563..30a265ccac 100644 --- a/paddle/framework/program_desc.cc +++ b/paddle/framework/program_desc.cc @@ -26,7 +26,7 @@ BlockDescBind *ProgramDescBind::AppendBlock(const BlockDescBind &parent) { return blocks_.back().get(); } -ProgramDesc *ProgramDescBind::Proto() { +proto::ProgramDesc *ProgramDescBind::Proto() { for (auto &block : blocks_) { block->Flush(); } @@ -49,7 +49,7 @@ ProgramDescBind::ProgramDescBind(const ProgramDescBind &o) { } } -ProgramDescBind::ProgramDescBind(const ProgramDesc &desc) { +ProgramDescBind::ProgramDescBind(const proto::ProgramDesc &desc) { desc_ = desc; for (auto &block_desc : *desc_.mutable_blocks()) { blocks_.emplace_back(new BlockDescBind(this, &block_desc)); diff --git a/paddle/framework/program_desc.h b/paddle/framework/program_desc.h index b1cb086de4..affec491ca 100644 --- a/paddle/framework/program_desc.h +++ b/paddle/framework/program_desc.h @@ -29,7 +29,7 @@ class ProgramDescBind { public: ProgramDescBind(); - explicit ProgramDescBind(const ProgramDesc &desc); + explicit ProgramDescBind(const proto::ProgramDesc &desc); ProgramDescBind(const ProgramDescBind &o); @@ -43,10 +43,10 @@ class ProgramDescBind { size_t Size() const { return blocks_.size(); } - ProgramDesc *Proto(); + proto::ProgramDesc *Proto(); private: - ProgramDesc desc_; + proto::ProgramDesc desc_; std::vector> blocks_; }; diff --git a/paddle/framework/program_desc_test.cc b/paddle/framework/program_desc_test.cc index 83e7286e0e..c4fb28f2cc 100644 --- a/paddle/framework/program_desc_test.cc +++ b/paddle/framework/program_desc_test.cc @@ -22,15 +22,15 @@ TEST(ProgramDesc, copy_ctor) { ProgramDescBind program; auto* global_block = program.MutableBlock(0); auto* x = global_block->Var("X"); - x->SetType(VarDesc_VarType_LOD_TENSOR); + x->SetType(proto::VarDesc_VarType_LOD_TENSOR); x->SetLoDLevel(0); - x->SetDataType(FP32); + x->SetDataType(proto::FP32); x->SetShape({1000, 784}); auto* y = global_block->Var("Y"); - y->SetType(VarDesc_VarType_LOD_TENSOR); + y->SetType(proto::VarDesc_VarType_LOD_TENSOR); y->SetLoDLevel(0); - y->SetDataType(FP32); + y->SetDataType(proto::FP32); y->SetShape({784, 100}); auto* op = global_block->AppendOp(); @@ -39,7 +39,7 @@ TEST(ProgramDesc, copy_ctor) { op->SetInput("Y", {y->Name()}); auto* out = global_block->Var("Out"); - out->SetType(VarDesc_VarType_LOD_TENSOR); + out->SetType(proto::VarDesc_VarType_LOD_TENSOR); op->SetOutput("Y", {out->Name()}); ProgramDescBind program_copy(program); @@ -84,15 +84,15 @@ TEST(ProgramDescBind, serialize_and_deserialize) { ProgramDescBind program_origin; auto* global_block = program_origin.MutableBlock(0); auto* x = global_block->Var("X"); - x->SetType(VarDesc_VarType_LOD_TENSOR); + x->SetType(proto::VarDesc_VarType_LOD_TENSOR); x->SetLoDLevel(0); - x->SetDataType(FP32); + x->SetDataType(proto::FP32); x->SetShape({1000, 784}); auto* y = global_block->Var("Y"); - y->SetType(VarDesc_VarType_LOD_TENSOR); + y->SetType(proto::VarDesc_VarType_LOD_TENSOR); y->SetLoDLevel(0); - y->SetDataType(FP32); + y->SetDataType(proto::FP32); y->SetShape({784, 100}); auto* op = global_block->AppendOp(); @@ -101,7 +101,7 @@ TEST(ProgramDescBind, serialize_and_deserialize) { op->SetInput("Y", {y->Name()}); auto* out = global_block->Var("Out"); - out->SetType(VarDesc_VarType_LOD_TENSOR); + out->SetType(proto::VarDesc_VarType_LOD_TENSOR); op->SetOutput("Y", {out->Name()}); std::string binary_str; diff --git a/paddle/framework/prune.cc b/paddle/framework/prune.cc index da76052eb4..25eb813ffb 100644 --- a/paddle/framework/prune.cc +++ b/paddle/framework/prune.cc @@ -29,7 +29,7 @@ const std::string kFetchOpType = "fetch"; const std::string kDropOutOpType = "dropout"; const std::string kBatchNormOpType = "batch_norm"; -bool HasDependentVar(const OpDesc& op_desc, +bool HasDependentVar(const proto::OpDesc& op_desc, const std::set& dependent_vars) { for (auto& var : op_desc.outputs()) { for (auto& argu : var.arguments()) { @@ -41,14 +41,15 @@ bool HasDependentVar(const OpDesc& op_desc, return false; } -bool IsTarget(const OpDesc& op_desc) { +bool IsTarget(const proto::OpDesc& op_desc) { if (op_desc.has_is_target()) { return op_desc.is_target(); } return false; } -void prune_impl(const ProgramDesc& input, ProgramDesc* output, int block_id) { +void prune_impl(const proto::ProgramDesc& input, proto::ProgramDesc* output, + int block_id) { // TODO(tonyyang-svail): // - will change to use multiple blocks for RNN op and Cond Op @@ -104,12 +105,12 @@ void prune_impl(const ProgramDesc& input, ProgramDesc* output, int block_id) { } // TODO(fengjiayi): Prune() could be inplaced to avoid unnecessary copies -void Prune(const ProgramDesc& input, ProgramDesc* output) { +void Prune(const proto::ProgramDesc& input, proto::ProgramDesc* output) { prune_impl(input, output, 0); } -void inference_optimize_impl(const ProgramDesc& input, ProgramDesc* output, - int block_id) { +void inference_optimize_impl(const proto::ProgramDesc& input, + proto::ProgramDesc* output, int block_id) { *output = input; auto* op_field = output->mutable_blocks(block_id)->mutable_ops(); for (auto& op_desc : *op_field) { @@ -125,7 +126,8 @@ void inference_optimize_impl(const ProgramDesc& input, ProgramDesc* output, } } -void InferenceOptimize(const ProgramDesc& input, ProgramDesc* output) { +void InferenceOptimize(const proto::ProgramDesc& input, + proto::ProgramDesc* output) { inference_optimize_impl(input, output, 0); } diff --git a/paddle/framework/prune.h b/paddle/framework/prune.h index 23db014894..593292523d 100644 --- a/paddle/framework/prune.h +++ b/paddle/framework/prune.h @@ -20,9 +20,10 @@ limitations under the License. */ namespace paddle { namespace framework { -void Prune(const ProgramDesc& input, ProgramDesc* output); +void Prune(const proto::ProgramDesc& input, proto::ProgramDesc* output); -void InferenceOptimize(const ProgramDesc& input, ProgramDesc* output); +void InferenceOptimize(const proto::ProgramDesc& input, + proto::ProgramDesc* output); } // namespace framework } // namespace paddle diff --git a/paddle/framework/prune_test.cc b/paddle/framework/prune_test.cc index f21df37a29..47fe4b0636 100644 --- a/paddle/framework/prune_test.cc +++ b/paddle/framework/prune_test.cc @@ -34,7 +34,7 @@ void AddOp(const std::string &type, const f::VariableNameMap &inputs, for (auto kv : outputs) { for (auto v : kv.second) { auto var = block->Var(v); - var->SetDataType(paddle::framework::DataType::FP32); + var->SetDataType(paddle::framework::proto::DataType::FP32); } } @@ -57,14 +57,14 @@ TEST(Prune, one_operator) { AddOp("one_one", {{"input", {"a"}}}, {{"output", {"b"}}}, f::AttributeMap{}, block); - f::ProgramDesc *pdesc = program.Proto(); - f::ProgramDesc pruned; + f::proto::ProgramDesc *pdesc = program.Proto(); + f::proto::ProgramDesc pruned; - Prune(*pdesc, &pruned); + f::Prune(*pdesc, &pruned); PADDLE_ENFORCE_EQ(pruned.blocks(0).ops_size(), 0); pdesc->mutable_blocks(0)->mutable_ops(0)->set_is_target(true); - Prune(*pdesc, &pruned); + f::Prune(*pdesc, &pruned); PADDLE_ENFORCE_EQ(pruned.blocks(0).ops_size(), 1); } @@ -81,12 +81,12 @@ TEST(Prune, forward) { AddOp("one_one", {{"input", {"d"}}}, {{"output", {"e"}}}, f::AttributeMap{}, block); - f::ProgramDesc *pdesc = program.Proto(); + f::proto::ProgramDesc *pdesc = program.Proto(); for (int i = 0; i < pdesc->blocks(0).ops_size(); ++i) { - f::ProgramDesc pruned; + f::proto::ProgramDesc pruned; pdesc->mutable_blocks(0)->mutable_ops(i)->set_is_target(true); - Prune(*pdesc, &pruned); + f::Prune(*pdesc, &pruned); PADDLE_ENFORCE_EQ(pruned.blocks(0).ops_size(), i + 1); } } @@ -104,11 +104,11 @@ TEST(Prune, multi_input_op) { AddOp("three_one", {{"input", {"b0", "b1", "b2"}}}, {{"output", {"c"}}}, f::AttributeMap{}, block); - f::ProgramDesc *pdesc = program.Proto(); + f::proto::ProgramDesc *pdesc = program.Proto(); pdesc->mutable_blocks(0)->mutable_ops(3)->set_is_target(true); - f::ProgramDesc pruned; - Prune(*pdesc, &pruned); + f::proto::ProgramDesc pruned; + f::Prune(*pdesc, &pruned); PADDLE_ENFORCE_EQ(pruned.blocks(0).ops_size(), 4); } @@ -123,11 +123,11 @@ TEST(Prune, multi_output_op) { AddOp("one_one", {{"input", {"c"}}}, {{"output", {"c1"}}}, f::AttributeMap{}, block); - f::ProgramDesc *pdesc = program.Proto(); + f::proto::ProgramDesc *pdesc = program.Proto(); pdesc->mutable_blocks(0)->mutable_ops(2)->set_is_target(true); - f::ProgramDesc pruned; - Prune(*pdesc, &pruned); + f::proto::ProgramDesc pruned; + f::Prune(*pdesc, &pruned); PADDLE_ENFORCE_EQ(pruned.blocks(0).ops_size(), 2); } @@ -142,11 +142,11 @@ TEST(Prune, multi_target) { AddOp("one_one", {{"input", {"c"}}}, {{"output", {"c1"}}}, f::AttributeMap{}, block); - f::ProgramDesc *pdesc = program.Proto(); + f::proto::ProgramDesc *pdesc = program.Proto(); pdesc->mutable_blocks(0)->mutable_ops(1)->set_is_target(true); pdesc->mutable_blocks(0)->mutable_ops(2)->set_is_target(true); - f::ProgramDesc pruned; - Prune(*pdesc, &pruned); + f::proto::ProgramDesc pruned; + f::Prune(*pdesc, &pruned); PADDLE_ENFORCE_EQ(pruned.blocks(0).ops_size(), 3); } diff --git a/paddle/framework/shape_inference.cc b/paddle/framework/shape_inference.cc index 7dac1cfd5e..86dc01665b 100644 --- a/paddle/framework/shape_inference.cc +++ b/paddle/framework/shape_inference.cc @@ -57,17 +57,17 @@ void InferShapeContext::SetDims(const std::vector &names, SetDim(names[i], dims[i]); } } -std::vector InferShapeContext::GetInputsVarType( +std::vector InferShapeContext::GetInputsVarType( const std::string &name) const { return GetVarTypes(Inputs(name)); } -std::vector InferShapeContext::GetOutputsVarType( +std::vector InferShapeContext::GetOutputsVarType( const std::string &name) const { return GetVarTypes(Outputs(name)); } -std::vector InferShapeContext::GetVarTypes( +std::vector InferShapeContext::GetVarTypes( const std::vector &names) const { - std::vector retv; + std::vector retv; retv.resize(names.size()); std::transform(names.begin(), names.end(), retv.begin(), std::bind(std::mem_fn(&InferShapeContext::GetVarType), this, diff --git a/paddle/framework/shape_inference.h b/paddle/framework/shape_inference.h index 46f2ea84b4..f93319d8f2 100644 --- a/paddle/framework/shape_inference.h +++ b/paddle/framework/shape_inference.h @@ -27,8 +27,9 @@ class InferShapeContext { virtual bool HasInput(const std::string &name) const = 0; virtual bool HasOutput(const std::string &name) const = 0; - std::vector GetInputsVarType(const std::string &name) const; - std::vector GetOutputsVarType( + std::vector GetInputsVarType( + const std::string &name) const; + std::vector GetOutputsVarType( const std::string &name) const; virtual bool HasInputs(const std::string &name) const = 0; @@ -65,10 +66,10 @@ class InferShapeContext { std::vector GetDims( const std::vector &names) const; - std::vector GetVarTypes( + std::vector GetVarTypes( const std::vector &names) const; - virtual VarDesc::VarType GetVarType(const std::string &name) const = 0; + virtual proto::VarDesc::VarType GetVarType(const std::string &name) const = 0; }; } // namespace framework diff --git a/paddle/framework/var_desc.cc b/paddle/framework/var_desc.cc index 0babec29f6..2180827767 100644 --- a/paddle/framework/var_desc.cc +++ b/paddle/framework/var_desc.cc @@ -18,15 +18,17 @@ limitations under the License. */ namespace paddle { namespace framework { -VarDesc::VarType VarDescBind::GetType() const { return desc_.type(); } +proto::VarDesc::VarType VarDescBind::GetType() const { return desc_.type(); } -void VarDescBind::SetType(VarDesc::VarType type) { desc_.set_type(type); } +void VarDescBind::SetType(proto::VarDesc::VarType type) { + desc_.set_type(type); +} void VarDescBind::SetShape(const std::vector &dims) { VectorToRepeated(dims, mutable_tensor_desc()->mutable_dims()); } -void VarDescBind::SetDataType(DataType data_type) { +void VarDescBind::SetDataType(proto::DataType data_type) { mutable_tensor_desc()->set_data_type(data_type); } @@ -34,14 +36,16 @@ std::vector VarDescBind::Shape() const { return RepeatedToVector(tensor_desc().dims()); } -DataType VarDescBind::GetDataType() const { return tensor_desc().data_type(); } +proto::DataType VarDescBind::GetDataType() const { + return tensor_desc().data_type(); +} void VarDescBind::SetLoDLevel(int32_t lod_level) { switch (desc_.type()) { - case VarDesc::LOD_TENSOR: + case proto::VarDesc::LOD_TENSOR: desc_.mutable_lod_tensor()->set_lod_level(lod_level); break; - case VarDesc::LOD_TENSOR_ARRAY: + case proto::VarDesc::LOD_TENSOR_ARRAY: desc_.mutable_tensor_array()->set_lod_level(lod_level); break; default: @@ -52,9 +56,9 @@ void VarDescBind::SetLoDLevel(int32_t lod_level) { int32_t VarDescBind::GetLodLevel() const { switch (desc_.type()) { - case VarDesc::LOD_TENSOR: + case proto::VarDesc::LOD_TENSOR: return desc_.lod_tensor().lod_level(); - case VarDesc::LOD_TENSOR_ARRAY: + case proto::VarDesc::LOD_TENSOR_ARRAY: return desc_.tensor_array().lod_level(); default: PADDLE_THROW("Tensor type=%d does not support LoDLevel", @@ -62,29 +66,29 @@ int32_t VarDescBind::GetLodLevel() const { } } -const TensorDesc &VarDescBind::tensor_desc() const { +const proto::TensorDesc &VarDescBind::tensor_desc() const { PADDLE_ENFORCE(desc_.has_type(), "invoke TensorDesc must after set type"); switch (desc_.type()) { - case VarDesc::SELECTED_ROWS: + case proto::VarDesc::SELECTED_ROWS: return desc_.selected_rows(); - case VarDesc::LOD_TENSOR: + case proto::VarDesc::LOD_TENSOR: return desc_.lod_tensor().tensor(); - case VarDesc::LOD_TENSOR_ARRAY: + case proto::VarDesc::LOD_TENSOR_ARRAY: return desc_.tensor_array().tensor(); default: PADDLE_THROW("Unexpected branch."); } } -TensorDesc *VarDescBind::mutable_tensor_desc() { +proto::TensorDesc *VarDescBind::mutable_tensor_desc() { PADDLE_ENFORCE(desc_.has_type(), "invoke MutableTensorDesc must after set type"); switch (desc_.type()) { - case VarDesc::SELECTED_ROWS: + case proto::VarDesc::SELECTED_ROWS: return desc_.mutable_selected_rows(); - case VarDesc::LOD_TENSOR: + case proto::VarDesc::LOD_TENSOR: return desc_.mutable_lod_tensor()->mutable_tensor(); - case VarDesc::LOD_TENSOR_ARRAY: + case proto::VarDesc::LOD_TENSOR_ARRAY: return desc_.mutable_tensor_array()->mutable_tensor(); default: PADDLE_THROW("Unexpected branch."); diff --git a/paddle/framework/var_desc.h b/paddle/framework/var_desc.h index 5cf4608944..335a864cab 100644 --- a/paddle/framework/var_desc.h +++ b/paddle/framework/var_desc.h @@ -57,40 +57,40 @@ class VarDescBind { public: explicit VarDescBind(const std::string &name) { desc_.set_name(name); - desc_.set_type(VarDesc::LOD_TENSOR); + desc_.set_type(proto::VarDesc::LOD_TENSOR); } - explicit VarDescBind(const VarDesc &desc) : desc_(desc) {} + explicit VarDescBind(const proto::VarDesc &desc) : desc_(desc) {} - VarDesc *Proto() { return &desc_; } + proto::VarDesc *Proto() { return &desc_; } std::string Name() const { return desc_.name(); } void SetShape(const std::vector &dims); - void SetDataType(DataType data_type); + void SetDataType(proto::DataType data_type); std::vector Shape() const; - DataType GetDataType() const; + proto::DataType GetDataType() const; void SetLoDLevel(int32_t lod_level); int32_t GetLodLevel() const; - VarDesc::VarType GetType() const; + proto::VarDesc::VarType GetType() const; - void SetType(VarDesc::VarType type); + void SetType(proto::VarDesc::VarType type); bool Persistable() const { return desc_.persistable(); } void SetPersistable(bool persistable) { desc_.set_persistable(persistable); } private: - const TensorDesc &tensor_desc() const; - TensorDesc *mutable_tensor_desc(); + const proto::TensorDesc &tensor_desc() const; + proto::TensorDesc *mutable_tensor_desc(); - VarDesc desc_; + proto::VarDesc desc_; }; } // namespace framework } // namespace paddle diff --git a/paddle/framework/var_type.h b/paddle/framework/var_type.h index 0f19870bec..43a7227640 100644 --- a/paddle/framework/var_type.h +++ b/paddle/framework/var_type.h @@ -20,15 +20,15 @@ namespace paddle { namespace framework { -inline VarDesc::VarType ToVarType(std::type_index type) { +inline proto::VarDesc::VarType ToVarType(std::type_index type) { if (type.hash_code() == typeid(LoDTensor).hash_code()) { - return VarDesc_VarType_LOD_TENSOR; + return proto::VarDesc_VarType_LOD_TENSOR; } else if (type.hash_code() == typeid(LoDRankTable).hash_code()) { - return VarDesc_VarType_LOD_RANK_TABLE; + return proto::VarDesc_VarType_LOD_RANK_TABLE; } else if (type.hash_code() == typeid(LoDTensorArray).hash_code()) { - return VarDesc_VarType_LOD_TENSOR_ARRAY; + return proto::VarDesc_VarType_LOD_TENSOR_ARRAY; } else if (type.hash_code() == typeid(SelectedRows).hash_code()) { - return VarDesc_VarType_SELECTED_ROWS; + return proto::VarDesc_VarType_SELECTED_ROWS; } else { PADDLE_THROW("ToVarType:Unsupported type %s", type.name()); } @@ -37,16 +37,16 @@ inline VarDesc::VarType ToVarType(std::type_index type) { template inline void VisitVarType(const Variable& var, Visitor visitor) { switch (ToVarType(var.Type())) { - case VarDesc_VarType_LOD_TENSOR: + case proto::VarDesc_VarType_LOD_TENSOR: visitor(var.Get()); return; - case VarDesc_VarType_LOD_RANK_TABLE: + case proto::VarDesc_VarType_LOD_RANK_TABLE: visitor(var.Get()); return; - case VarDesc_VarType_LOD_TENSOR_ARRAY: + case proto::VarDesc_VarType_LOD_TENSOR_ARRAY: visitor(var.Get()); return; - case VarDesc_VarType_SELECTED_ROWS: + case proto::VarDesc_VarType_SELECTED_ROWS: visitor(var.Get()); return; default: diff --git a/paddle/framework/var_type_inference_test.cc b/paddle/framework/var_type_inference_test.cc index 9035e63fa4..8b465cbc59 100644 --- a/paddle/framework/var_type_inference_test.cc +++ b/paddle/framework/var_type_inference_test.cc @@ -36,14 +36,14 @@ class SumOpVarTypeInference : public VarTypeInference { void operator()(const OpDescBind &op_desc, BlockDescBind *block) const override { auto &inputs = op_desc.Input("X"); - auto default_var_type = VarDesc::SELECTED_ROWS; + auto default_var_type = proto::VarDesc::SELECTED_ROWS; bool any_input_is_lod_tensor = std::any_of( inputs.begin(), inputs.end(), [block](const std::string &name) { - return block->Var(name)->GetType() == VarDesc::LOD_TENSOR; + return block->Var(name)->GetType() == proto::VarDesc::LOD_TENSOR; }); if (any_input_is_lod_tensor) { - default_var_type = VarDesc::LOD_TENSOR; + default_var_type = proto::VarDesc::LOD_TENSOR; } auto out_var_name = op_desc.Output("Out").front(); @@ -68,19 +68,19 @@ TEST(InferVarType, sum_op) { op->SetInput("X", {"test_a", "test_b", "test_c"}); op->SetOutput("Out", {"test_out"}); - prog.MutableBlock(0)->Var("test_a")->SetType(VarDesc::SELECTED_ROWS); - prog.MutableBlock(0)->Var("test_b")->SetType(VarDesc::SELECTED_ROWS); - prog.MutableBlock(0)->Var("test_c")->SetType(VarDesc::SELECTED_ROWS); + prog.MutableBlock(0)->Var("test_a")->SetType(proto::VarDesc::SELECTED_ROWS); + prog.MutableBlock(0)->Var("test_b")->SetType(proto::VarDesc::SELECTED_ROWS); + prog.MutableBlock(0)->Var("test_c")->SetType(proto::VarDesc::SELECTED_ROWS); prog.MutableBlock(0)->Var("test_out"); op->InferVarType(prog.MutableBlock(0)); - ASSERT_EQ(VarDesc::SELECTED_ROWS, + ASSERT_EQ(proto::VarDesc::SELECTED_ROWS, prog.MutableBlock(0)->Var("test_out")->GetType()); - prog.MutableBlock(0)->Var("test_b")->SetType(VarDesc::LOD_TENSOR); + prog.MutableBlock(0)->Var("test_b")->SetType(proto::VarDesc::LOD_TENSOR); op->InferVarType(prog.MutableBlock(0)); - ASSERT_EQ(VarDesc::LOD_TENSOR, + ASSERT_EQ(proto::VarDesc::LOD_TENSOR, prog.MutableBlock(0)->Var("test_out")->GetType()); } @@ -91,14 +91,14 @@ TEST(InferVarType, sum_op_without_infer_var_type) { op->SetInput("X", {"test2_a", "test2_b", "test2_c"}); op->SetOutput("Out", {"test2_out"}); - prog.MutableBlock(0)->Var("test2_a")->SetType(VarDesc::SELECTED_ROWS); - prog.MutableBlock(0)->Var("test2_b")->SetType(VarDesc::SELECTED_ROWS); - prog.MutableBlock(0)->Var("test2_c")->SetType(VarDesc::SELECTED_ROWS); + prog.MutableBlock(0)->Var("test2_a")->SetType(proto::VarDesc::SELECTED_ROWS); + prog.MutableBlock(0)->Var("test2_b")->SetType(proto::VarDesc::SELECTED_ROWS); + prog.MutableBlock(0)->Var("test2_c")->SetType(proto::VarDesc::SELECTED_ROWS); prog.MutableBlock(0)->Var("test2_out"); op->InferVarType(prog.MutableBlock(0)); - ASSERT_EQ(VarDesc_VarType_LOD_TENSOR, + ASSERT_EQ(proto::VarDesc_VarType_LOD_TENSOR, prog.MutableBlock(0)->Var("test2_out")->GetType()); } diff --git a/paddle/operators/accuracy_op.cc b/paddle/operators/accuracy_op.cc index 76da21c472..b8ed93f4eb 100644 --- a/paddle/operators/accuracy_op.cc +++ b/paddle/operators/accuracy_op.cc @@ -63,8 +63,7 @@ class AccuracyOp : public framework::OperatorWithKernel { class AccuracyOpMaker : public framework::OpProtoAndCheckerMaker { public: - AccuracyOpMaker(framework::OpProto *proto, - framework::OpAttrChecker *op_checker) + AccuracyOpMaker(OpProto *proto, OpAttrChecker *op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { // TODO(typhoonzero): support both inference value and indices. AddInput("Out", "The network output of topk (inferences)"); diff --git a/paddle/operators/activation_op.cc b/paddle/operators/activation_op.cc index 63490f0ec9..2b4c7e5f0d 100644 --- a/paddle/operators/activation_op.cc +++ b/paddle/operators/activation_op.cc @@ -38,9 +38,8 @@ class ActivationOpGrad : public framework::OperatorWithKernel { class SigmoidOpMaker : public framework::OpProtoAndCheckerMaker { public: - SigmoidOpMaker(framework::OpProto *proto, - framework::OpAttrChecker *op_checker) - : OpProtoAndCheckerMaker(proto, op_checker) { + SigmoidOpMaker(OpProto *proto, OpAttrChecker *op_checker) + : framework::OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "Input of Sigmoid operator"); AddOutput("Y", "Output of Sigmoid operator"); AddComment(R"DOC( @@ -54,9 +53,8 @@ $$y = \frac{1}{1 + e^{-x}}$$ class LogSigmoidOpMaker : public framework::OpProtoAndCheckerMaker { public: - LogSigmoidOpMaker(framework::OpProto *proto, - framework::OpAttrChecker *op_checker) - : OpProtoAndCheckerMaker(proto, op_checker) { + LogSigmoidOpMaker(OpProto *proto, OpAttrChecker *op_checker) + : framework::OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "Input of LogSigmoid operator"); AddOutput("Y", "Output of LogSigmoid operator"); AddComment(R"DOC( @@ -70,8 +68,8 @@ $$y = \log \frac{1}{1 + e^{-x}}$$ class ExpOpMaker : public framework::OpProtoAndCheckerMaker { public: - ExpOpMaker(framework::OpProto *proto, framework::OpAttrChecker *op_checker) - : OpProtoAndCheckerMaker(proto, op_checker) { + ExpOpMaker(OpProto *proto, OpAttrChecker *op_checker) + : framework::OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "Input of Exp operator"); AddOutput("Y", "Output of Exp operator"); AddComment(R"DOC( @@ -85,8 +83,8 @@ $y = e^x$ class ReluOpMaker : public framework::OpProtoAndCheckerMaker { public: - ReluOpMaker(framework::OpProto *proto, framework::OpAttrChecker *op_checker) - : OpProtoAndCheckerMaker(proto, op_checker) { + ReluOpMaker(OpProto *proto, OpAttrChecker *op_checker) + : framework::OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "Input of Relu operator"); AddOutput("Y", "Output of Relu operator"); AddComment(R"DOC( @@ -100,9 +98,8 @@ $y = \max(x, 0)$ class LeakyReluOpMaker : public framework::OpProtoAndCheckerMaker { public: - LeakyReluOpMaker(framework::OpProto *proto, - framework::OpAttrChecker *op_checker) - : OpProtoAndCheckerMaker(proto, op_checker) { + LeakyReluOpMaker(OpProto *proto, OpAttrChecker *op_checker) + : framework::OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "Input of LeakyRelu operator"); AddOutput("Y", "Output of LeakyRelu operator"); AddAttr("alpha", "The small negative slope").SetDefault(0.02f); @@ -117,9 +114,8 @@ $y = \max(x, \alpha * x)$ class SoftShrinkOpMaker : public framework::OpProtoAndCheckerMaker { public: - SoftShrinkOpMaker(framework::OpProto *proto, - framework::OpAttrChecker *op_checker) - : OpProtoAndCheckerMaker(proto, op_checker) { + SoftShrinkOpMaker(OpProto *proto, OpAttrChecker *op_checker) + : framework::OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "Input of Softshrink operator"); AddOutput("Y", "Output of Softshrink operator"); AddAttr("lambda", "non-negative offset").SetDefault(0.5f); @@ -140,8 +136,8 @@ $$ class TanhOpMaker : public framework::OpProtoAndCheckerMaker { public: - TanhOpMaker(framework::OpProto *proto, framework::OpAttrChecker *op_checker) - : OpProtoAndCheckerMaker(proto, op_checker) { + TanhOpMaker(OpProto *proto, OpAttrChecker *op_checker) + : framework::OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "Input of Tanh operator"); AddOutput("Y", "Output of Tanh operator"); AddComment(R"DOC( @@ -155,9 +151,8 @@ $$y = \frac{e^{x} - e^{-x}}{e^{x} + e^{-x}}$$ class TanhShrinkOpMaker : public framework::OpProtoAndCheckerMaker { public: - TanhShrinkOpMaker(framework::OpProto *proto, - framework::OpAttrChecker *op_checker) - : OpProtoAndCheckerMaker(proto, op_checker) { + TanhShrinkOpMaker(OpProto *proto, OpAttrChecker *op_checker) + : framework::OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "Input of TanhShrink operator"); AddOutput("Y", "Output of TanhShrink operator"); AddComment(R"DOC( @@ -171,9 +166,8 @@ $$y = x - \frac{e^{x} - e^{-x}}{e^{x} + e^{-x}}$$ class HardShrinkOpMaker : public framework::OpProtoAndCheckerMaker { public: - HardShrinkOpMaker(framework::OpProto *proto, - framework::OpAttrChecker *op_checker) - : OpProtoAndCheckerMaker(proto, op_checker) { + HardShrinkOpMaker(OpProto *proto, OpAttrChecker *op_checker) + : framework::OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "Input of HardShrink operator"); AddOutput("Y", "Output of HardShrink operator"); AddAttr("threshold", "The value of threshold for HardShrink") @@ -195,8 +189,8 @@ $$ class SqrtOpMaker : public framework::OpProtoAndCheckerMaker { public: - SqrtOpMaker(framework::OpProto *proto, framework::OpAttrChecker *op_checker) - : OpProtoAndCheckerMaker(proto, op_checker) { + SqrtOpMaker(OpProto *proto, OpAttrChecker *op_checker) + : framework::OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "Input of Sqrt operator"); AddOutput("Y", "Output of Sqrt operator"); AddComment(R"DOC( @@ -210,8 +204,8 @@ $y = \sqrt{x}$ class AbsOpMaker : public framework::OpProtoAndCheckerMaker { public: - AbsOpMaker(framework::OpProto *proto, framework::OpAttrChecker *op_checker) - : OpProtoAndCheckerMaker(proto, op_checker) { + AbsOpMaker(OpProto *proto, OpAttrChecker *op_checker) + : framework::OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "Input of Abs operator"); AddOutput("Y", "Output of Abs operator"); AddComment(R"DOC( @@ -225,8 +219,8 @@ $y = |x|$ class CeilOpMaker : public framework::OpProtoAndCheckerMaker { public: - CeilOpMaker(framework::OpProto *proto, framework::OpAttrChecker *op_checker) - : OpProtoAndCheckerMaker(proto, op_checker) { + CeilOpMaker(OpProto *proto, OpAttrChecker *op_checker) + : framework::OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "Input of Ceil operator"); AddOutput("Y", "Output of Ceil operator"); AddComment(R"DOC( @@ -240,8 +234,8 @@ $y = ceil(x)$ class FloorOpMaker : public framework::OpProtoAndCheckerMaker { public: - FloorOpMaker(framework::OpProto *proto, framework::OpAttrChecker *op_checker) - : OpProtoAndCheckerMaker(proto, op_checker) { + FloorOpMaker(OpProto *proto, OpAttrChecker *op_checker) + : framework::OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "Input of Floor operator"); AddOutput("Y", "Output of Floor operator"); AddComment(R"DOC( @@ -255,8 +249,8 @@ $y = floor(x)$ class RoundOpMaker : public framework::OpProtoAndCheckerMaker { public: - RoundOpMaker(framework::OpProto *proto, framework::OpAttrChecker *op_checker) - : OpProtoAndCheckerMaker(proto, op_checker) { + RoundOpMaker(OpProto *proto, OpAttrChecker *op_checker) + : framework::OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "Input of Round operator"); AddOutput("Y", "Output of Round operator"); AddComment(R"DOC( @@ -270,9 +264,8 @@ $y = [x]$ class ReciprocalOpMaker : public framework::OpProtoAndCheckerMaker { public: - ReciprocalOpMaker(framework::OpProto *proto, - framework::OpAttrChecker *op_checker) - : OpProtoAndCheckerMaker(proto, op_checker) { + ReciprocalOpMaker(OpProto *proto, OpAttrChecker *op_checker) + : framework::OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "Input of Reciprocal operator"); AddOutput("Y", "Output of Reciprocal operator"); AddComment(R"DOC( @@ -286,8 +279,8 @@ $$y = \frac{1}{x}$$ class LogOpMaker : public framework::OpProtoAndCheckerMaker { public: - LogOpMaker(framework::OpProto *proto, framework::OpAttrChecker *op_checker) - : OpProtoAndCheckerMaker(proto, op_checker) { + LogOpMaker(OpProto *proto, OpAttrChecker *op_checker) + : framework::OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "Input of Log operator"); AddOutput("Y", "Output of Log operator"); AddComment(R"DOC( @@ -303,8 +296,8 @@ Natural logarithm of x. class SquareOpMaker : public framework::OpProtoAndCheckerMaker { public: - SquareOpMaker(framework::OpProto *proto, framework::OpAttrChecker *op_checker) - : OpProtoAndCheckerMaker(proto, op_checker) { + SquareOpMaker(OpProto *proto, OpAttrChecker *op_checker) + : framework::OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "Input of Square operator"); AddOutput("Y", "Output of Square operator"); AddComment(R"DOC( @@ -318,9 +311,8 @@ $y = x^2$ class SoftplusOpMaker : public framework::OpProtoAndCheckerMaker { public: - SoftplusOpMaker(framework::OpProto *proto, - framework::OpAttrChecker *op_checker) - : OpProtoAndCheckerMaker(proto, op_checker) { + SoftplusOpMaker(OpProto *proto, OpAttrChecker *op_checker) + : framework::OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "Input of Softplus operator"); AddOutput("Y", "Output of Softplus operator"); AddComment(R"DOC( @@ -334,9 +326,8 @@ $y = \ln(1 + e^{x})$ class SoftsignOpMaker : public framework::OpProtoAndCheckerMaker { public: - SoftsignOpMaker(framework::OpProto *proto, - framework::OpAttrChecker *op_checker) - : OpProtoAndCheckerMaker(proto, op_checker) { + SoftsignOpMaker(OpProto *proto, OpAttrChecker *op_checker) + : framework::OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "Input of Softsign operator"); AddOutput("Y", "Output of Softsign operator"); AddComment(R"DOC( @@ -350,8 +341,8 @@ $$y = \frac{x}{1 + |x|}$$ class BReluOpMaker : public framework::OpProtoAndCheckerMaker { public: - BReluOpMaker(framework::OpProto *proto, framework::OpAttrChecker *op_checker) - : OpProtoAndCheckerMaker(proto, op_checker) { + BReluOpMaker(OpProto *proto, OpAttrChecker *op_checker) + : framework::OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "Input of BRelu operator"); AddOutput("Y", "Output of BRelu operator"); AddAttr("t_min", "The min marginal value of BRelu") @@ -369,9 +360,8 @@ $y = \max(\min(x, t_{min}), t_{max})$ class SoftReluOpMaker : public framework::OpProtoAndCheckerMaker { public: - SoftReluOpMaker(framework::OpProto *proto, - framework::OpAttrChecker *op_checker) - : OpProtoAndCheckerMaker(proto, op_checker) { + SoftReluOpMaker(OpProto *proto, OpAttrChecker *op_checker) + : framework::OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "Input of SoftRelu operator"); AddOutput("Y", "Output of SoftRelu operator"); AddAttr("threshold", "The threshold value of SoftRelu") @@ -387,8 +377,8 @@ $y = \ln(1 + \exp(\max(\min(x, threshold), threshold))$ class ELUOpMaker : public framework::OpProtoAndCheckerMaker { public: - ELUOpMaker(framework::OpProto *proto, framework::OpAttrChecker *op_checker) - : OpProtoAndCheckerMaker(proto, op_checker) { + ELUOpMaker(OpProto *proto, OpAttrChecker *op_checker) + : framework::OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "Input of ELU operator"); AddOutput("Y", "Output of ELU operator"); AddAttr("alpha", "The alpha value of ELU").SetDefault(1.0f); @@ -406,8 +396,8 @@ $y = \max(0, x) + \min(0, \alpha * (e^x - 1))$ class Relu6OpMaker : public framework::OpProtoAndCheckerMaker { public: - Relu6OpMaker(framework::OpProto *proto, framework::OpAttrChecker *op_checker) - : OpProtoAndCheckerMaker(proto, op_checker) { + Relu6OpMaker(OpProto *proto, OpAttrChecker *op_checker) + : framework::OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "Input of Relu6 operator"); AddOutput("Y", "Output of Relu6 operator"); AddAttr("threshold", "The threshold value of Relu6") @@ -423,8 +413,8 @@ $y = \min(\max(0, x), 6)$ class PowOpMaker : public framework::OpProtoAndCheckerMaker { public: - PowOpMaker(framework::OpProto *proto, framework::OpAttrChecker *op_checker) - : OpProtoAndCheckerMaker(proto, op_checker) { + PowOpMaker(OpProto *proto, OpAttrChecker *op_checker) + : framework::OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "Input of Pow operator"); AddOutput("Y", "Output of Pow operator"); AddAttr("factor", "The exponential factor of Pow").SetDefault(1.0f); @@ -439,8 +429,8 @@ $y = x^{factor}$ class STanhOpMaker : public framework::OpProtoAndCheckerMaker { public: - STanhOpMaker(framework::OpProto *proto, framework::OpAttrChecker *op_checker) - : OpProtoAndCheckerMaker(proto, op_checker) { + STanhOpMaker(OpProto *proto, OpAttrChecker *op_checker) + : framework::OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "Input of STanh operator"); AddOutput("Y", "Output of STanh operator"); AddAttr("scale_a", "The scale parameter of a for the input") @@ -458,9 +448,8 @@ $$y = b * \frac{e^{a * x} - e^{-a * x}}{e^{a * x} + e^{-a * x}}$$ class ThresholdedReluOpMaker : public framework::OpProtoAndCheckerMaker { public: - ThresholdedReluOpMaker(framework::OpProto *proto, - framework::OpAttrChecker *op_checker) - : OpProtoAndCheckerMaker(proto, op_checker) { + ThresholdedReluOpMaker(OpProto *proto, OpAttrChecker *op_checker) + : framework::OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "Input of ThresholdedRelu operator"); AddOutput("Y", "Output of ThresholdedRelu operator"); AddAttr("threshold", "The threshold location of activation") @@ -481,9 +470,8 @@ $$ class HardSigmoidOpMaker : public framework::OpProtoAndCheckerMaker { public: - HardSigmoidOpMaker(framework::OpProto *proto, - framework::OpAttrChecker *op_checker) - : OpProtoAndCheckerMaker(proto, op_checker) { + HardSigmoidOpMaker(OpProto *proto, OpAttrChecker *op_checker) + : framework::OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "Input of HardSigmoid operator"); AddOutput("Y", "Output of HardSigmoid operator"); AddAttr("slope", "Slope for linear approximation of sigmoid") @@ -508,8 +496,8 @@ It is recommended to use the defaults for this activation. class SwishOpMaker : public framework::OpProtoAndCheckerMaker { public: - SwishOpMaker(framework::OpProto *proto, framework::OpAttrChecker *op_checker) - : OpProtoAndCheckerMaker(proto, op_checker) { + SwishOpMaker(OpProto *proto, OpAttrChecker *op_checker) + : framework::OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "Input of Swish operator"); AddOutput("Y", "Output of Swish operator"); AddAttr("beta", "Constant beta of swish operator").SetDefault(1.0f); diff --git a/paddle/operators/adadelta_op.cc b/paddle/operators/adadelta_op.cc index 507811e7b5..d8a9491c82 100644 --- a/paddle/operators/adadelta_op.cc +++ b/paddle/operators/adadelta_op.cc @@ -59,8 +59,7 @@ class AdadeltaOp : public framework::OperatorWithKernel { class AdadeltaOpMaker : public framework::OpProtoAndCheckerMaker { public: - AdadeltaOpMaker(framework::OpProto *proto, - framework::OpAttrChecker *op_checker) + AdadeltaOpMaker(OpProto *proto, OpAttrChecker *op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("Param", "(Tensor) Input parameter"); AddInput("Grad", "(Tensor) Input gradient"); diff --git a/paddle/operators/adagrad_op.cc b/paddle/operators/adagrad_op.cc index 5d00716316..052c793a01 100644 --- a/paddle/operators/adagrad_op.cc +++ b/paddle/operators/adagrad_op.cc @@ -59,8 +59,7 @@ class AdagradOp : public framework::OperatorWithKernel { class AdagradOpMaker : public framework::OpProtoAndCheckerMaker { public: - AdagradOpMaker(framework::OpProto* proto, - framework::OpAttrChecker* op_checker) + AdagradOpMaker(OpProto* proto, OpAttrChecker* op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("Param", "(Tensor) Input parameter"); AddInput("Grad", "(Tensor) Input gradient"); diff --git a/paddle/operators/adam_op.cc b/paddle/operators/adam_op.cc index cf6ef6dd53..03527de936 100644 --- a/paddle/operators/adam_op.cc +++ b/paddle/operators/adam_op.cc @@ -73,7 +73,7 @@ class AdamOp : public framework::OperatorWithKernel { class AdamOpMaker : public framework::OpProtoAndCheckerMaker { public: - AdamOpMaker(framework::OpProto *proto, framework::OpAttrChecker *op_checker) + AdamOpMaker(OpProto *proto, OpAttrChecker *op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("Param", "(Tensor) Input parameter"); AddInput("Grad", "(Tensor) Input gradient"); diff --git a/paddle/operators/adamax_op.cc b/paddle/operators/adamax_op.cc index 49ce497bb7..3b0b714184 100644 --- a/paddle/operators/adamax_op.cc +++ b/paddle/operators/adamax_op.cc @@ -67,7 +67,7 @@ class AdamaxOp : public framework::OperatorWithKernel { class AdamaxOpMaker : public framework::OpProtoAndCheckerMaker { public: - AdamaxOpMaker(framework::OpProto *proto, framework::OpAttrChecker *op_checker) + AdamaxOpMaker(OpProto *proto, OpAttrChecker *op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("Param", "(Tensor) Input parameter"); AddInput("Grad", "(Tensor) Input gradient"); diff --git a/paddle/operators/array_to_lod_tensor_op.cc b/paddle/operators/array_to_lod_tensor_op.cc index faeba7f3ed..aafdb8fb24 100644 --- a/paddle/operators/array_to_lod_tensor_op.cc +++ b/paddle/operators/array_to_lod_tensor_op.cc @@ -114,8 +114,7 @@ class ArrayToLoDTensorOp : public framework::OperatorBase { class ArrayToLoDTensorOpProtoMaker : public framework::OpProtoAndCheckerMaker { public: - ArrayToLoDTensorOpProtoMaker(framework::OpProto *proto, - framework::OpAttrChecker *op_checker) + ArrayToLoDTensorOpProtoMaker(OpProto *proto, OpAttrChecker *op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "(std::vector) A vector of tensors that is going to " diff --git a/paddle/operators/assign_op.cc b/paddle/operators/assign_op.cc index 0a37f18729..0d98755aa0 100644 --- a/paddle/operators/assign_op.cc +++ b/paddle/operators/assign_op.cc @@ -86,8 +86,7 @@ class AssignOp : public framework::OperatorBase { class AssignOpProtoMaker : public framework::OpProtoAndCheckerMaker { public: - AssignOpProtoMaker(framework::OpProto *proto, - framework::OpAttrChecker *op_checker) + AssignOpProtoMaker(OpProto *proto, OpAttrChecker *op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "(LoDTensor, SelectedRows or LoDTensorArray) The input variable " @@ -109,8 +108,8 @@ class AssignInferShape : public framework::InferShapeBase { void operator()(framework::InferShapeContext *context) const override { if (context->HasInput("X")) { auto type = context->GetInputsVarType("X")[0]; - if (type == framework::VarDesc_VarType_SELECTED_ROWS || - type == framework::VarDesc_VarType_LOD_TENSOR) { + if (type == framework::proto::VarDesc_VarType_SELECTED_ROWS || + type == framework::proto::VarDesc_VarType_LOD_TENSOR) { context->SetOutputDim("Out", context->GetInputDim("X")); } } diff --git a/paddle/operators/auc_op.cc b/paddle/operators/auc_op.cc index 6c3f67ec32..811c487089 100644 --- a/paddle/operators/auc_op.cc +++ b/paddle/operators/auc_op.cc @@ -49,7 +49,7 @@ class AucOp : public framework::OperatorWithKernel { class AucOpMaker : public framework::OpProtoAndCheckerMaker { public: - AucOpMaker(framework::OpProto *proto, framework::OpAttrChecker *op_checker) + AucOpMaker(OpProto *proto, OpAttrChecker *op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("Out", "A floating point 2D tensor, values are in the range [0, 1]." diff --git a/paddle/operators/batch_norm_op.cc b/paddle/operators/batch_norm_op.cc index 94a972b7ab..f545da22d7 100644 --- a/paddle/operators/batch_norm_op.cc +++ b/paddle/operators/batch_norm_op.cc @@ -85,8 +85,7 @@ class BatchNormOp : public framework::OperatorWithKernel { class BatchNormOpMaker : public framework::OpProtoAndCheckerMaker { public: - BatchNormOpMaker(framework::OpProto *proto, - framework::OpAttrChecker *op_checker) + BatchNormOpMaker(OpProto *proto, OpAttrChecker *op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddAttr("is_test", "").SetDefault(false); AddAttr("momentum", "").SetDefault(0.9); diff --git a/paddle/operators/beam_search_decode_op.cc b/paddle/operators/beam_search_decode_op.cc index c796a0c5d0..ceb20cbe18 100644 --- a/paddle/operators/beam_search_decode_op.cc +++ b/paddle/operators/beam_search_decode_op.cc @@ -83,9 +83,8 @@ class BeamSearchDecodeOp : public framework::OperatorBase { class BeamSearchDecodeOpProtoMaker : public framework::OpProtoAndCheckerMaker { public: - BeamSearchDecodeOpProtoMaker(framework::OpProto* proto, - framework::OpAttrChecker* op_checker) - : OpProtoAndCheckerMaker(proto, op_checker) { + BeamSearchDecodeOpProtoMaker(OpProto* proto, OpAttrChecker* op_checker) + : framework::OpProtoAndCheckerMaker(proto, op_checker) { AddInput("Ids", "(LodTensorArray)" "score of the candidate words in each step"); @@ -123,10 +122,10 @@ class BeamSearchDecodeInferVarType : public framework::VarTypeInference { void operator()(const framework::OpDescBind& op_desc, framework::BlockDescBind* block) const override { for (auto& o : op_desc.Output("SentenceIds")) { - block->Var(o)->SetType(framework::VarDesc::LOD_TENSOR); + block->Var(o)->SetType(framework::proto::VarDesc::LOD_TENSOR); } for (auto& o : op_desc.Output("SentenceScores")) { - block->Var(o)->SetType(framework::VarDesc::LOD_TENSOR); + block->Var(o)->SetType(framework::proto::VarDesc::LOD_TENSOR); } } }; diff --git a/paddle/operators/beam_search_op.cc b/paddle/operators/beam_search_op.cc index 8c3e2a303f..69ddc52035 100644 --- a/paddle/operators/beam_search_op.cc +++ b/paddle/operators/beam_search_op.cc @@ -153,8 +153,7 @@ bool BeamSearch::NextItemSet(std::vector *items) { class BeamSearchProtoAndCheckerMaker : public framework::OpProtoAndCheckerMaker { public: - BeamSearchProtoAndCheckerMaker(framework::OpProto *proto, - framework::OpAttrChecker *op_checker) + BeamSearchProtoAndCheckerMaker(OpProto *proto, OpAttrChecker *op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { // inputs and outputs stored in proto AddInput("pre_ids", "ids in previous step"); diff --git a/paddle/operators/bilinear_tensor_product_op.cc b/paddle/operators/bilinear_tensor_product_op.cc index 217fd52366..7640147a12 100644 --- a/paddle/operators/bilinear_tensor_product_op.cc +++ b/paddle/operators/bilinear_tensor_product_op.cc @@ -65,8 +65,7 @@ class BilinearTensorProductOp : public framework::OperatorWithKernel { class BilinearTensorProductOpMaker : public framework::OpProtoAndCheckerMaker { public: - BilinearTensorProductOpMaker(framework::OpProto* proto, - framework::OpAttrChecker* op_checker) + BilinearTensorProductOpMaker(OpProto* proto, OpAttrChecker* op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "The first input of bilinear_tensor_product operator."); AddInput("Y", "The second input of bilinear_tensor_product operator."); diff --git a/paddle/operators/cast_op.cc b/paddle/operators/cast_op.cc index d641b8fc9f..927a32645c 100644 --- a/paddle/operators/cast_op.cc +++ b/paddle/operators/cast_op.cc @@ -20,8 +20,7 @@ namespace operators { class CastOpProtoMaker : public framework::OpProtoAndCheckerMaker { public: - CastOpProtoMaker(framework::OpProto *proto, - framework::OpAttrChecker *op_checker) + CastOpProtoMaker(OpProto *proto, OpAttrChecker *op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "The input tensor of cast op"); AddOutput("Out", "The output tensor of cast op"); diff --git a/paddle/operators/cast_op.h b/paddle/operators/cast_op.h index a6773f13a8..0c72d809e6 100644 --- a/paddle/operators/cast_op.h +++ b/paddle/operators/cast_op.h @@ -55,7 +55,7 @@ class CastOpKernel : public framework::OpKernel { auto* in = context.Input("X"); auto* out = context.Output("Out"); framework::VisitDataType( - static_cast(context.Attr("out_dtype")), + static_cast(context.Attr("out_dtype")), CastOpFunctor( in, out, context.template device_context())); } diff --git a/paddle/operators/chunk_eval_op.cc b/paddle/operators/chunk_eval_op.cc index 894f355deb..f1f274a7af 100644 --- a/paddle/operators/chunk_eval_op.cc +++ b/paddle/operators/chunk_eval_op.cc @@ -57,15 +57,14 @@ class ChunkEvalOp : public framework::OperatorWithKernel { protected: framework::OpKernelType GetKernelType( const framework::ExecutionContext &ctx) const override { - return framework::OpKernelType(framework::DataType::FP32, + return framework::OpKernelType(framework::proto::DataType::FP32, ctx.device_context()); } }; class ChunkEvalOpMaker : public framework::OpProtoAndCheckerMaker { public: - ChunkEvalOpMaker(framework::OpProto *proto, - framework::OpAttrChecker *op_checker) + ChunkEvalOpMaker(OpProto *proto, OpAttrChecker *op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("Inference", "(Tensor, default: Tensor). " diff --git a/paddle/operators/clip_by_norm_op.cc b/paddle/operators/clip_by_norm_op.cc index 0b7975a63f..05c79d0e25 100644 --- a/paddle/operators/clip_by_norm_op.cc +++ b/paddle/operators/clip_by_norm_op.cc @@ -37,8 +37,7 @@ class ClipByNormOp : public framework::OperatorWithKernel { class ClipByNormOpMaker : public framework::OpProtoAndCheckerMaker { public: - ClipByNormOpMaker(framework::OpProto* proto, - framework::OpAttrChecker* op_checker) + ClipByNormOpMaker(OpProto* proto, OpAttrChecker* op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "(Tensor) The input of clip_by_norm op." diff --git a/paddle/operators/clip_op.cc b/paddle/operators/clip_op.cc index 6092212de4..e34ba0a8f4 100644 --- a/paddle/operators/clip_op.cc +++ b/paddle/operators/clip_op.cc @@ -38,7 +38,7 @@ class ClipOp : public framework::OperatorWithKernel { template class ClipOpMaker : public framework::OpProtoAndCheckerMaker { public: - ClipOpMaker(framework::OpProto* proto, framework::OpAttrChecker* op_checker) + ClipOpMaker(OpProto* proto, OpAttrChecker* op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "(Tensor)The input of clip op." diff --git a/paddle/operators/compare_op.cc b/paddle/operators/compare_op.cc index bf7e883681..1148172f3a 100644 --- a/paddle/operators/compare_op.cc +++ b/paddle/operators/compare_op.cc @@ -20,8 +20,7 @@ namespace operators { template class CompareOpProtoMaker : public framework::OpProtoAndCheckerMaker { public: - CompareOpProtoMaker(framework::OpProto *proto, - framework::OpAttrChecker *op_checker) + CompareOpProtoMaker(OpProto *proto, OpAttrChecker *op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { OpComment comment; AddInput("X", diff --git a/paddle/operators/concat_op.cc b/paddle/operators/concat_op.cc index cf522d6921..6151e2e73f 100644 --- a/paddle/operators/concat_op.cc +++ b/paddle/operators/concat_op.cc @@ -58,7 +58,7 @@ class ConcatOp : public framework::OperatorWithKernel { class ConcatOpMaker : public framework::OpProtoAndCheckerMaker { public: - ConcatOpMaker(framework::OpProto *proto, framework::OpAttrChecker *op_checker) + ConcatOpMaker(OpProto *proto, OpAttrChecker *op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "Input tensors of concat operator.").AsDuplicable(); AddOutput("Out", "Output tensor of concat operator."); diff --git a/paddle/operators/cond_op.cc b/paddle/operators/cond_op.cc index b809bdc3a0..8c860676e0 100644 --- a/paddle/operators/cond_op.cc +++ b/paddle/operators/cond_op.cc @@ -205,8 +205,7 @@ void CondOp::Run(const Scope& scope, class CondOpProtoAndCheckerMaker : public framework::OpProtoAndCheckerMaker { public: - CondOpProtoAndCheckerMaker(framework::OpProto* proto, - framework::OpAttrChecker* op_checker) + CondOpProtoAndCheckerMaker(OpProto* proto, OpAttrChecker* op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("Cond", "The condition, which is a bool vector"); AddInput("Xs", "Inputs of Subnets").AsDuplicable(); diff --git a/paddle/operators/conditional_block_op.cc b/paddle/operators/conditional_block_op.cc index 6f2ef9174e..5fe362c1b6 100644 --- a/paddle/operators/conditional_block_op.cc +++ b/paddle/operators/conditional_block_op.cc @@ -74,8 +74,7 @@ class ConditionalBlockOp : public ConditionalOp { class ConditionalBlockOpProtoMaker : public framework::OpProtoAndCheckerMaker { public: - ConditionalBlockOpProtoMaker(framework::OpProto *proto, - framework::OpAttrChecker *op_checker) + ConditionalBlockOpProtoMaker(OpProto *proto, OpAttrChecker *op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "The conditional variable of this operator. If X is empty, the " diff --git a/paddle/operators/conv_cudnn_op.cc b/paddle/operators/conv_cudnn_op.cc index 008bf01885..5b27ada55d 100644 --- a/paddle/operators/conv_cudnn_op.cc +++ b/paddle/operators/conv_cudnn_op.cc @@ -19,8 +19,7 @@ namespace operators { class CudnnConv2DOpMaker : public Conv2DOpMaker { public: - CudnnConv2DOpMaker(framework::OpProto* proto, - framework::OpAttrChecker* op_checker) + CudnnConv2DOpMaker(OpProto* proto, OpAttrChecker* op_checker) : Conv2DOpMaker(proto, op_checker) { AddAttr("workspace_size_MB", "workspace size for cudnn, in MB, " @@ -34,8 +33,7 @@ class CudnnConv2DOpMaker : public Conv2DOpMaker { class CudnnConv3DOpMaker : public Conv3DOpMaker { public: - CudnnConv3DOpMaker(framework::OpProto* proto, - framework::OpAttrChecker* op_checker) + CudnnConv3DOpMaker(OpProto* proto, OpAttrChecker* op_checker) : Conv3DOpMaker(proto, op_checker) { AddAttr("workspace_size_MB", "workspace size for cudnn, in MB, " diff --git a/paddle/operators/conv_op.cc b/paddle/operators/conv_op.cc index 7ef805fd44..abe82e1241 100644 --- a/paddle/operators/conv_op.cc +++ b/paddle/operators/conv_op.cc @@ -66,8 +66,7 @@ void ConvOp::InferShape(framework::InferShapeContext* ctx) const { ctx->SetOutputDim("Output", framework::make_ddim(output_shape)); } -Conv2DOpMaker::Conv2DOpMaker(framework::OpProto* proto, - framework::OpAttrChecker* op_checker) +Conv2DOpMaker::Conv2DOpMaker(OpProto* proto, OpAttrChecker* op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput( "Input", @@ -138,8 +137,7 @@ $$ )DOC"); } -Conv3DOpMaker::Conv3DOpMaker(framework::OpProto* proto, - framework::OpAttrChecker* op_checker) +Conv3DOpMaker::Conv3DOpMaker(OpProto* proto, OpAttrChecker* op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput( "Input", diff --git a/paddle/operators/conv_op.h b/paddle/operators/conv_op.h index d2de4e80f7..83786e2329 100644 --- a/paddle/operators/conv_op.h +++ b/paddle/operators/conv_op.h @@ -50,14 +50,12 @@ inline bool IsExpand(std::vector& filter_dim, // operator implementations can reuse the code. class Conv2DOpMaker : public framework::OpProtoAndCheckerMaker { public: - Conv2DOpMaker(framework::OpProto* proto, - framework::OpAttrChecker* op_checker); + Conv2DOpMaker(OpProto* proto, OpAttrChecker* op_checker); }; class Conv3DOpMaker : public framework::OpProtoAndCheckerMaker { public: - Conv3DOpMaker(framework::OpProto* proto, - framework::OpAttrChecker* op_checker); + Conv3DOpMaker(OpProto* proto, OpAttrChecker* op_checker); }; class ConvOp : public framework::OperatorWithKernel { diff --git a/paddle/operators/conv_shift_op.cc b/paddle/operators/conv_shift_op.cc index a4150a5664..ac2f806259 100644 --- a/paddle/operators/conv_shift_op.cc +++ b/paddle/operators/conv_shift_op.cc @@ -75,8 +75,7 @@ class ConvShiftGradOp : public framework::OperatorWithKernel { class ConvShiftOpMaker : public framework::OpProtoAndCheckerMaker { public: - ConvShiftOpMaker(framework::OpProto *proto, - framework::OpAttrChecker *op_checker) + ConvShiftOpMaker(OpProto *proto, OpAttrChecker *op_checker) : framework::OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "(Tensor, default Tensor), a 2-D tensor with shape B x M, " diff --git a/paddle/operators/conv_transpose_cudnn_op.cc b/paddle/operators/conv_transpose_cudnn_op.cc index 4cb6a2ccff..2348bed4ff 100644 --- a/paddle/operators/conv_transpose_cudnn_op.cc +++ b/paddle/operators/conv_transpose_cudnn_op.cc @@ -19,8 +19,7 @@ namespace operators { class CudnnConv2DTransposeOpMaker : public Conv2DTransposeOpMaker { public: - CudnnConv2DTransposeOpMaker(framework::OpProto* proto, - framework::OpAttrChecker* op_checker) + CudnnConv2DTransposeOpMaker(OpProto* proto, OpAttrChecker* op_checker) : Conv2DTransposeOpMaker(proto, op_checker) { AddAttr>("dilations", "dilations of convolution operator.") .SetDefault({1, 1}); @@ -36,8 +35,7 @@ class CudnnConv2DTransposeOpMaker : public Conv2DTransposeOpMaker { class CudnnConv3DTransposeOpMaker : public Conv3DTransposeOpMaker { public: - CudnnConv3DTransposeOpMaker(framework::OpProto* proto, - framework::OpAttrChecker* op_checker) + CudnnConv3DTransposeOpMaker(OpProto* proto, OpAttrChecker* op_checker) : Conv3DTransposeOpMaker(proto, op_checker) { AddAttr>("dilations", "dilations of convolution operator.") .SetDefault({1, 1, 1}); diff --git a/paddle/operators/conv_transpose_op.cc b/paddle/operators/conv_transpose_op.cc index ca063e94bb..cae0e2ca2b 100644 --- a/paddle/operators/conv_transpose_op.cc +++ b/paddle/operators/conv_transpose_op.cc @@ -53,8 +53,8 @@ void ConvTransposeOp::InferShape(framework::InferShapeContext* ctx) const { ctx->SetOutputDim("Output", framework::make_ddim(output_shape)); } -Conv2DTransposeOpMaker::Conv2DTransposeOpMaker( - framework::OpProto* proto, framework::OpAttrChecker* op_checker) +Conv2DTransposeOpMaker::Conv2DTransposeOpMaker(OpProto* proto, + OpAttrChecker* op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput( "Input", @@ -112,8 +112,8 @@ Example: )DOC"); } -Conv3DTransposeOpMaker::Conv3DTransposeOpMaker( - framework::OpProto* proto, framework::OpAttrChecker* op_checker) +Conv3DTransposeOpMaker::Conv3DTransposeOpMaker(OpProto* proto, + OpAttrChecker* op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("Input", "(Tensor) The input tensor of convolution transpose operator." diff --git a/paddle/operators/conv_transpose_op.h b/paddle/operators/conv_transpose_op.h index 1171b0435f..e81651f417 100644 --- a/paddle/operators/conv_transpose_op.h +++ b/paddle/operators/conv_transpose_op.h @@ -30,14 +30,12 @@ using DDim = framework::DDim; // operator implementations can reuse the code. class Conv2DTransposeOpMaker : public framework::OpProtoAndCheckerMaker { public: - Conv2DTransposeOpMaker(framework::OpProto* proto, - framework::OpAttrChecker* op_checker); + Conv2DTransposeOpMaker(OpProto* proto, OpAttrChecker* op_checker); }; class Conv3DTransposeOpMaker : public framework::OpProtoAndCheckerMaker { public: - Conv3DTransposeOpMaker(framework::OpProto* proto, - framework::OpAttrChecker* op_checker); + Conv3DTransposeOpMaker(OpProto* proto, OpAttrChecker* op_checker); }; class ConvTransposeOp : public framework::OperatorWithKernel { diff --git a/paddle/operators/cos_sim_op.cc b/paddle/operators/cos_sim_op.cc index 440c427cba..a4d4a78d32 100644 --- a/paddle/operators/cos_sim_op.cc +++ b/paddle/operators/cos_sim_op.cc @@ -62,7 +62,7 @@ class CosSimOp : public framework::OperatorWithKernel { class CosSimOpMaker : public framework::OpProtoAndCheckerMaker { public: - CosSimOpMaker(framework::OpProto* proto, framework::OpAttrChecker* op_checker) + CosSimOpMaker(OpProto* proto, OpAttrChecker* op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "The 1st input of cos_sim op."); AddInput("Y", "The 2nd input of cos_sim op."); diff --git a/paddle/operators/crf_decoding_op.cc b/paddle/operators/crf_decoding_op.cc index 1ce189fa6e..27d0871f82 100644 --- a/paddle/operators/crf_decoding_op.cc +++ b/paddle/operators/crf_decoding_op.cc @@ -18,8 +18,7 @@ namespace paddle { namespace operators { class CRFDecodingOpMaker : public framework::OpProtoAndCheckerMaker { public: - CRFDecodingOpMaker(framework::OpProto* proto, - framework::OpAttrChecker* op_checker) + CRFDecodingOpMaker(OpProto* proto, OpAttrChecker* op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("Emission", "(LoDTensor, default: LoDTensor). A LoDTensor with shape " diff --git a/paddle/operators/crop_op.cc b/paddle/operators/crop_op.cc index 5c973fbb3c..87fcab4cca 100644 --- a/paddle/operators/crop_op.cc +++ b/paddle/operators/crop_op.cc @@ -52,7 +52,7 @@ class CropOp : public framework::OperatorWithKernel { class CropOpMaker : public framework::OpProtoAndCheckerMaker { public: - CropOpMaker(framework::OpProto* proto, framework::OpAttrChecker* op_checker) + CropOpMaker(OpProto* proto, OpAttrChecker* op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "The input of pad op. " diff --git a/paddle/operators/cross_entropy_op.cc b/paddle/operators/cross_entropy_op.cc index 2b06012b69..1ab7c0a06f 100644 --- a/paddle/operators/cross_entropy_op.cc +++ b/paddle/operators/cross_entropy_op.cc @@ -111,8 +111,7 @@ class CrossEntropyGradientOp : public framework::OperatorWithKernel { class CrossEntropyOpMaker : public framework::OpProtoAndCheckerMaker { public: - CrossEntropyOpMaker(framework::OpProto* proto, - framework::OpAttrChecker* op_checker) + CrossEntropyOpMaker(OpProto* proto, OpAttrChecker* op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "(Tensor, default Tensor), a 2-D tensor with shape N x D, " diff --git a/paddle/operators/decayed_adagrad_op.cc b/paddle/operators/decayed_adagrad_op.cc index fd29c7270b..739a8d881c 100644 --- a/paddle/operators/decayed_adagrad_op.cc +++ b/paddle/operators/decayed_adagrad_op.cc @@ -55,8 +55,7 @@ class DecayedAdagradOp : public framework::OperatorWithKernel { class DecayedAdagradOpMaker : public framework::OpProtoAndCheckerMaker { public: - DecayedAdagradOpMaker(framework::OpProto *proto, - framework::OpAttrChecker *op_checker) + DecayedAdagradOpMaker(OpProto *proto, OpAttrChecker *op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("Param", "(Tensor) Input parameter"); AddInput("Grad", "(Tensor) Input gradient"); diff --git a/paddle/operators/dropout_op.cc b/paddle/operators/dropout_op.cc index acd526ae80..c4bee44e3e 100644 --- a/paddle/operators/dropout_op.cc +++ b/paddle/operators/dropout_op.cc @@ -40,8 +40,7 @@ class DropoutOp : public framework::OperatorWithKernel { template class DropoutOpMaker : public framework::OpProtoAndCheckerMaker { public: - DropoutOpMaker(framework::OpProto* proto, - framework::OpAttrChecker* op_checker) + DropoutOpMaker(OpProto* proto, OpAttrChecker* op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "The input of dropout op."); AddOutput("Out", "The output of dropout op."); diff --git a/paddle/operators/elementwise_add_op.cc b/paddle/operators/elementwise_add_op.cc index a62eeeeb95..b6bd794a74 100644 --- a/paddle/operators/elementwise_add_op.cc +++ b/paddle/operators/elementwise_add_op.cc @@ -19,8 +19,7 @@ namespace paddle { namespace operators { class ElementwiseAddOpMaker : public ElementwiseOpMaker { public: - ElementwiseAddOpMaker(framework::OpProto* proto, - framework::OpAttrChecker* op_checker) + ElementwiseAddOpMaker(OpProto* proto, OpAttrChecker* op_checker) : ElementwiseOpMaker(proto, op_checker) { SetComment("Add", "$Out = X + Y$"); AddComment(comment_); diff --git a/paddle/operators/elementwise_div_op.cc b/paddle/operators/elementwise_div_op.cc index 1c3e9e70ee..78eae53f53 100644 --- a/paddle/operators/elementwise_div_op.cc +++ b/paddle/operators/elementwise_div_op.cc @@ -19,8 +19,7 @@ namespace paddle { namespace operators { class ElementwiseDivOpMaker : public ElementwiseOpMaker { public: - ElementwiseDivOpMaker(framework::OpProto* proto, - framework::OpAttrChecker* op_checker) + ElementwiseDivOpMaker(OpProto* proto, OpAttrChecker* op_checker) : ElementwiseOpMaker(proto, op_checker) { SetComment("Div", "$Out = X / Y$"); AddComment(comment_); diff --git a/paddle/operators/elementwise_mul_op.cc b/paddle/operators/elementwise_mul_op.cc index aadb95cbe3..f0a61b8b08 100644 --- a/paddle/operators/elementwise_mul_op.cc +++ b/paddle/operators/elementwise_mul_op.cc @@ -20,8 +20,7 @@ namespace operators { class ElementwiseMulOpMaker : public ElementwiseOpMaker { public: - ElementwiseMulOpMaker(framework::OpProto* proto, - framework::OpAttrChecker* op_checker) + ElementwiseMulOpMaker(OpProto* proto, OpAttrChecker* op_checker) : ElementwiseOpMaker(proto, op_checker) { SetComment("Mul", "$Out = X \\odot\\ Y$"); AddComment(comment_); diff --git a/paddle/operators/elementwise_op.h b/paddle/operators/elementwise_op.h index ea533503e4..f308ee05e1 100644 --- a/paddle/operators/elementwise_op.h +++ b/paddle/operators/elementwise_op.h @@ -43,8 +43,7 @@ class ElementwiseOp : public framework::OperatorWithKernel { class ElementwiseOpMaker : public framework::OpProtoAndCheckerMaker { public: - ElementwiseOpMaker(framework::OpProto* proto, - framework::OpAttrChecker* op_checker) + ElementwiseOpMaker(OpProto* proto, OpAttrChecker* op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "(Tensor) The first input tensor of elementwise op"); AddInput("Y", "(Tensor) The second input tensor of elementwise op"); diff --git a/paddle/operators/elementwise_sub_op.cc b/paddle/operators/elementwise_sub_op.cc index 3e4d19361e..1c4168621c 100644 --- a/paddle/operators/elementwise_sub_op.cc +++ b/paddle/operators/elementwise_sub_op.cc @@ -19,8 +19,7 @@ namespace paddle { namespace operators { class ElementwiseSubOpMaker : public ElementwiseOpMaker { public: - ElementwiseSubOpMaker(framework::OpProto* proto, - framework::OpAttrChecker* op_checker) + ElementwiseSubOpMaker(OpProto* proto, OpAttrChecker* op_checker) : ElementwiseOpMaker(proto, op_checker) { SetComment("Sub", "$Out = X - Y$"); AddComment(comment_); diff --git a/paddle/operators/expand_op.cc b/paddle/operators/expand_op.cc index 8b3cddbb94..08fa91ed72 100644 --- a/paddle/operators/expand_op.cc +++ b/paddle/operators/expand_op.cc @@ -55,7 +55,7 @@ class ExpandOp : public framework::OperatorWithKernel { class ExpandOpMaker : public framework::OpProtoAndCheckerMaker { public: - ExpandOpMaker(framework::OpProto* proto, framework::OpAttrChecker* op_checker) + ExpandOpMaker(OpProto* proto, OpAttrChecker* op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "(Tensor, default Tensor) A tensor with rank in [1, 6]." diff --git a/paddle/operators/feed_op.cc b/paddle/operators/feed_op.cc index ee43c22fb1..66b8080c26 100644 --- a/paddle/operators/feed_op.cc +++ b/paddle/operators/feed_op.cc @@ -54,8 +54,7 @@ class FeedOp : public framework::OperatorBase { class FeedOpInfoMaker : public framework::OpProtoAndCheckerMaker { public: - FeedOpInfoMaker(framework::OpProto *proto, - framework::OpAttrChecker *op_checker) + FeedOpInfoMaker(OpProto *proto, OpAttrChecker *op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "The input of feed op"); AddOutput("Out", "The output of feed op"); diff --git a/paddle/operators/fetch_op.cc b/paddle/operators/fetch_op.cc index 1ae07194c2..616590f200 100644 --- a/paddle/operators/fetch_op.cc +++ b/paddle/operators/fetch_op.cc @@ -61,8 +61,7 @@ class FetchOp : public framework::OperatorBase { class FetchOpInfoMaker : public framework::OpProtoAndCheckerMaker { public: - FetchOpInfoMaker(framework::OpProto *proto, - framework::OpAttrChecker *op_checker) + FetchOpInfoMaker(OpProto *proto, OpAttrChecker *op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "The input of fetch op"); AddOutput("Out", "The output of fetch op"); diff --git a/paddle/operators/fill_constant_batch_size_like_op.cc b/paddle/operators/fill_constant_batch_size_like_op.cc index 7fb74e2b95..7a7e280e78 100644 --- a/paddle/operators/fill_constant_batch_size_like_op.cc +++ b/paddle/operators/fill_constant_batch_size_like_op.cc @@ -52,7 +52,7 @@ class FillConstantBatchSizeLikeOp : public framework::OperatorWithKernel { framework::OpKernelType GetKernelType( const framework::ExecutionContext &ctx) const override { return framework::OpKernelType( - static_cast(ctx.Attr("dtype")), + static_cast(ctx.Attr("dtype")), ctx.device_context()); } }; @@ -60,13 +60,12 @@ class FillConstantBatchSizeLikeOp : public framework::OperatorWithKernel { class FillConstantBatchSizeLikeOpMaker : public framework::OpProtoAndCheckerMaker { public: - FillConstantBatchSizeLikeOpMaker(framework::OpProto *proto, - framework::OpAttrChecker *op_checker) + FillConstantBatchSizeLikeOpMaker(OpProto *proto, OpAttrChecker *op_checker) : framework::OpProtoAndCheckerMaker(proto, op_checker) { AddAttr("dtype", "(int, default 5 (FP32)) " "Output data type") - .SetDefault(framework::DataType::FP32); + .SetDefault(framework::proto::DataType::FP32); AddInput("Input", "(Tensor) Tensor " "whose dim_idx th dimension is used to specify the batch_size"); diff --git a/paddle/operators/fill_constant_op.cc b/paddle/operators/fill_constant_op.cc index 3d5f84bc23..3489079eaa 100644 --- a/paddle/operators/fill_constant_op.cc +++ b/paddle/operators/fill_constant_op.cc @@ -34,7 +34,8 @@ class FillConstantOp : public framework::OperatorBase { using framework::OperatorBase::OperatorBase; void Run(const framework::Scope &scope, const platform::DeviceContext &dev_ctx) const override { - auto data_type = static_cast(Attr("dtype")); + auto data_type = + static_cast(Attr("dtype")); auto value = Attr("value"); auto force_cpu = Attr("force_cpu"); auto &out = @@ -52,13 +53,12 @@ class FillConstantOp : public framework::OperatorBase { class FillConstantOpMaker : public framework::OpProtoAndCheckerMaker { public: - FillConstantOpMaker(framework::OpProto *proto, - framework::OpAttrChecker *op_checker) + FillConstantOpMaker(OpProto *proto, OpAttrChecker *op_checker) : framework::OpProtoAndCheckerMaker(proto, op_checker) { AddAttr("dtype", "(int, default 5 (FP32)) " "Output data type") - .SetDefault(framework::DataType::FP32); + .SetDefault(framework::proto::DataType::FP32); AddAttr>("shape", "(vector) The shape of the output"); AddAttr("value", "(float, default 0) The value to be filled") .SetDefault(0.0f); diff --git a/paddle/operators/fill_op.cc b/paddle/operators/fill_op.cc index 382e161c5d..f0c6cff8e3 100644 --- a/paddle/operators/fill_op.cc +++ b/paddle/operators/fill_op.cc @@ -48,7 +48,7 @@ class FillOp : public framework::OperatorBase { "Cannot find variable %s", Output("Out")) .GetMutable()); out.Resize(framework::make_ddim(Attr>("shape"))); - auto dtype = static_cast(Attr("dtype")); + auto dtype = static_cast(Attr("dtype")); platform::CPUPlace cpu; auto force_cpu = Attr("force_cpu"); out.mutable_data(force_cpu ? cpu : dev_ctx.GetPlace(), @@ -76,7 +76,7 @@ class FillOp : public framework::OperatorBase { class FillOpMaker : public framework::OpProtoAndCheckerMaker { public: - FillOpMaker(framework::OpProto *proto, framework::OpAttrChecker *op_checker) + FillOpMaker(OpProto *proto, OpAttrChecker *op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddComment(R"DOC(Fill operator @@ -88,7 +88,7 @@ Fill an tensor with `value` and `shape`. The type of the tensor is specify by "value", "The float values of tensor, which are flatten in row major"); AddAttr>("shape", "The shape of output tensor"); AddAttr("dtype", "The data type of output tensor, Default is float") - .SetDefault(framework::DataType::FP32); + .SetDefault(framework::proto::DataType::FP32); AddAttr("force_cpu", "Whether the output tensor must be at CPU memory or not. " "Default is false.") diff --git a/paddle/operators/fill_zeros_like_op.cc b/paddle/operators/fill_zeros_like_op.cc index 720c11f5f1..3e828f84d0 100644 --- a/paddle/operators/fill_zeros_like_op.cc +++ b/paddle/operators/fill_zeros_like_op.cc @@ -33,8 +33,7 @@ class FillZerosLikeOp : public framework::OperatorWithKernel { class FillZerosLikeOpMaker : public framework::OpProtoAndCheckerMaker { public: - FillZerosLikeOpMaker(framework::OpProto *proto, - framework::OpAttrChecker *op_checker) + FillZerosLikeOpMaker(OpProto *proto, OpAttrChecker *op_checker) : framework::OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "The input of fill-zeros-like op."); AddOutput("Y", "The variable will be filled up with zeros."); diff --git a/paddle/operators/ftrl_op.cc b/paddle/operators/ftrl_op.cc index b14913ff21..d00700823d 100644 --- a/paddle/operators/ftrl_op.cc +++ b/paddle/operators/ftrl_op.cc @@ -57,7 +57,7 @@ class FTRLOp : public framework::OperatorWithKernel { class FTRLOpMaker : public framework::OpProtoAndCheckerMaker { public: - FTRLOpMaker(framework::OpProto *proto, framework::OpAttrChecker *op_checker) + FTRLOpMaker(OpProto *proto, OpAttrChecker *op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("Param", "(Tensor, default Tensor) " diff --git a/paddle/operators/gather_op.cc b/paddle/operators/gather_op.cc index 8f80fb1625..47af222314 100644 --- a/paddle/operators/gather_op.cc +++ b/paddle/operators/gather_op.cc @@ -67,7 +67,7 @@ class GatherGradOp : public framework::OperatorWithKernel { class GatherOpMaker : public framework::OpProtoAndCheckerMaker { public: - GatherOpMaker(framework::OpProto* proto, framework::OpAttrChecker* op_checker) + GatherOpMaker(OpProto* proto, OpAttrChecker* op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "The source input of gather op"); AddInput("Index", "The index input of gather op"); diff --git a/paddle/operators/gaussian_random_op.cc b/paddle/operators/gaussian_random_op.cc index 254c83e137..5eab1d5f4e 100644 --- a/paddle/operators/gaussian_random_op.cc +++ b/paddle/operators/gaussian_random_op.cc @@ -60,15 +60,14 @@ class GaussianRandomOp : public framework::OperatorWithKernel { framework::OpKernelType GetKernelType( const framework::ExecutionContext& ctx) const override { return framework::OpKernelType( - static_cast(ctx.Attr("dtype")), + static_cast(ctx.Attr("dtype")), ctx.device_context()); } }; class GaussianRandomOpMaker : public framework::OpProtoAndCheckerMaker { public: - GaussianRandomOpMaker(framework::OpProto* proto, - framework::OpAttrChecker* op_checker) + GaussianRandomOpMaker(OpProto* proto, OpAttrChecker* op_checker) : framework::OpProtoAndCheckerMaker(proto, op_checker) { AddOutput("Out", "Output matrix of gaussian random op"); @@ -91,7 +90,7 @@ class GaussianRandomOpMaker : public framework::OpProtoAndCheckerMaker { AddAttr("dtype", "(int, default 5(FP32)) " "Output data type.") - .SetDefault(framework::DataType::FP32); + .SetDefault(framework::proto::DataType::FP32); AddComment(R"DOC( GaussianRandom Operator. diff --git a/paddle/operators/gru_op.cc b/paddle/operators/gru_op.cc index 311e7edcf1..8e7000654c 100644 --- a/paddle/operators/gru_op.cc +++ b/paddle/operators/gru_op.cc @@ -67,7 +67,7 @@ class GRUOp : public framework::OperatorWithKernel { class GRUOpMaker : public framework::OpProtoAndCheckerMaker { public: - GRUOpMaker(framework::OpProto* proto, framework::OpAttrChecker* op_checker) + GRUOpMaker(OpProto* proto, OpAttrChecker* op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("Input", "(LoDTensor) The first input is a LodTensor, which supports " diff --git a/paddle/operators/gru_unit_op.cc b/paddle/operators/gru_unit_op.cc index 705de87be5..7e5f674a8c 100644 --- a/paddle/operators/gru_unit_op.cc +++ b/paddle/operators/gru_unit_op.cc @@ -71,8 +71,7 @@ class GRUUnitOp : public framework::OperatorWithKernel { class GRUUnitOpMaker : public framework::OpProtoAndCheckerMaker { public: - GRUUnitOpMaker(framework::OpProto* proto, - framework::OpAttrChecker* op_checker) + GRUUnitOpMaker(OpProto* proto, OpAttrChecker* op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("Input", "(Tensor) Matrix with shape [batch_size, frame_size * 3] for the " diff --git a/paddle/operators/hinge_loss_op.cc b/paddle/operators/hinge_loss_op.cc index 373b4d99b4..19d2e9dc56 100644 --- a/paddle/operators/hinge_loss_op.cc +++ b/paddle/operators/hinge_loss_op.cc @@ -46,8 +46,7 @@ class HingeLossOp : public framework::OperatorWithKernel { template class HingeLossOpMaker : public framework::OpProtoAndCheckerMaker { public: - HingeLossOpMaker(framework::OpProto* proto, - framework::OpAttrChecker* op_checker) + HingeLossOpMaker(OpProto* proto, OpAttrChecker* op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("Logits", "The input value (Logits) of Hinge loss op." diff --git a/paddle/operators/huber_loss_op.cc b/paddle/operators/huber_loss_op.cc index 11828d083a..5c92f2c7b2 100644 --- a/paddle/operators/huber_loss_op.cc +++ b/paddle/operators/huber_loss_op.cc @@ -45,8 +45,7 @@ class HuberLossOp : public framework::OperatorWithKernel { template class HuberLossOpMaker : public framework::OpProtoAndCheckerMaker { public: - HuberLossOpMaker(framework::OpProto* proto, - framework::OpAttrChecker* op_checker) + HuberLossOpMaker(OpProto* proto, OpAttrChecker* op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "The input value of huber loss op." diff --git a/paddle/operators/increment_op.cc b/paddle/operators/increment_op.cc index 54911267e3..3a53ea89dc 100644 --- a/paddle/operators/increment_op.cc +++ b/paddle/operators/increment_op.cc @@ -70,8 +70,7 @@ class IncrementOp : public framework::OperatorBase { class IncrementOpMaker : public framework::OpProtoAndCheckerMaker { public: - IncrementOpMaker(framework::OpProto *proto, - framework::OpAttrChecker *op_checker) + IncrementOpMaker(OpProto *proto, OpAttrChecker *op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "(Tensor) The input tensor of increment operator"); AddOutput("Out", "(Tensor) The output tensor of increment operator."); diff --git a/paddle/operators/is_empty_op.cc b/paddle/operators/is_empty_op.cc index 54fecf44e8..3616a0414f 100644 --- a/paddle/operators/is_empty_op.cc +++ b/paddle/operators/is_empty_op.cc @@ -47,8 +47,7 @@ class IsEmptyOp : public framework::OperatorBase { class IsEmptyOpProtoMaker : public framework::OpProtoAndCheckerMaker { public: - IsEmptyOpProtoMaker(framework::OpProto *proto, - framework::OpAttrChecker *op_checker) + IsEmptyOpProtoMaker(OpProto *proto, OpAttrChecker *op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput(kInput, "(Tensor) Tensor which is to be checked."); AddOutput(kOutput, "(Tensor) a boolean Tensor that indicate empty or not."); diff --git a/paddle/operators/l1_norm_op.cc b/paddle/operators/l1_norm_op.cc index c0b51202c6..3d1da79763 100644 --- a/paddle/operators/l1_norm_op.cc +++ b/paddle/operators/l1_norm_op.cc @@ -48,7 +48,7 @@ class L1NormGradOp : public framework::OperatorWithKernel { class L1NormOpMaker : public framework::OpProtoAndCheckerMaker { public: - L1NormOpMaker(framework::OpProto* proto, framework::OpAttrChecker* op_checker) + L1NormOpMaker(OpProto* proto, OpAttrChecker* op_checker) : framework::OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "(Tensor) The input of l1_norm op."); AddOutput("Out", "(Scalar) The output of l1_norm op."); diff --git a/paddle/operators/linear_chain_crf_op.cc b/paddle/operators/linear_chain_crf_op.cc index 896e3657d4..ad15e8ebd2 100644 --- a/paddle/operators/linear_chain_crf_op.cc +++ b/paddle/operators/linear_chain_crf_op.cc @@ -19,8 +19,7 @@ namespace operators { class LinearChainCRFOpMaker : public framework::OpProtoAndCheckerMaker { public: - LinearChainCRFOpMaker(framework::OpProto* proto, - framework::OpAttrChecker* op_checker) + LinearChainCRFOpMaker(OpProto* proto, OpAttrChecker* op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("Emission", "(LoDTensor, default LoDTensor) " diff --git a/paddle/operators/load_op.cc b/paddle/operators/load_op.cc index 4e58b84430..6c51dad27a 100644 --- a/paddle/operators/load_op.cc +++ b/paddle/operators/load_op.cc @@ -58,8 +58,7 @@ class LoadOp : public framework::OperatorBase { class LoadOpProtoMaker : public framework::OpProtoAndCheckerMaker { public: - LoadOpProtoMaker(framework::OpProto *proto, - framework::OpAttrChecker *op_checker) + LoadOpProtoMaker(OpProto *proto, OpAttrChecker *op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddOutput("Out", "(Tensor) The tensor need to be loaded"); AddAttr("file_path", diff --git a/paddle/operators/lod_array_length_op.cc b/paddle/operators/lod_array_length_op.cc index b2f4ec57fa..cc8593810b 100644 --- a/paddle/operators/lod_array_length_op.cc +++ b/paddle/operators/lod_array_length_op.cc @@ -38,8 +38,7 @@ class LoDArrayLengthOp : public framework::OperatorBase { class LoDArrayLengthProtoMaker : public framework::OpProtoAndCheckerMaker { public: - LoDArrayLengthProtoMaker(framework::OpProto *proto, - framework::OpAttrChecker *op_checker) + LoDArrayLengthProtoMaker(OpProto *proto, OpAttrChecker *op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "(LoDTensorArray) The input tensor array."); AddOutput("Out", "(Tensor) 1x1 CPU Tensor of length, int64_t"); diff --git a/paddle/operators/lod_rank_table_op.cc b/paddle/operators/lod_rank_table_op.cc index f7d4db1947..3e281c8d1e 100644 --- a/paddle/operators/lod_rank_table_op.cc +++ b/paddle/operators/lod_rank_table_op.cc @@ -35,8 +35,7 @@ class LoDRankTableOp : public framework::OperatorBase { class LoDRankTableOpProtoMaker : public framework::OpProtoAndCheckerMaker { public: - LoDRankTableOpProtoMaker(framework::OpProto *proto, - framework::OpAttrChecker *op_checker) + LoDRankTableOpProtoMaker(OpProto *proto, OpAttrChecker *op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "(LoDTensor) input lod tensor, must contain lod information."); @@ -67,7 +66,7 @@ class LoDRankTableInferVarType : public framework::VarTypeInference { framework::BlockDescBind *block) const override { for (auto &o : op_desc.Output("Out")) { block->FindRecursiveOrCreateVar(o)->SetType( - framework::VarDesc::LOD_RANK_TABLE); + framework::proto::VarDesc::LOD_RANK_TABLE); } } }; diff --git a/paddle/operators/lod_reset_op.cc b/paddle/operators/lod_reset_op.cc index 32831cb1e2..ccb87258c6 100644 --- a/paddle/operators/lod_reset_op.cc +++ b/paddle/operators/lod_reset_op.cc @@ -48,8 +48,7 @@ class LoDResetOp : public framework::OperatorWithKernel { class LoDResetOpMaker : public framework::OpProtoAndCheckerMaker { public: - LoDResetOpMaker(framework::OpProto *proto, - framework::OpAttrChecker *op_checker) + LoDResetOpMaker(OpProto *proto, OpAttrChecker *op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "(LoDTensor) The input tensor of lod_reset operator."); AddInput("TargetLoD", diff --git a/paddle/operators/lod_tensor_to_array_op.cc b/paddle/operators/lod_tensor_to_array_op.cc index b970bf3177..33af0e819f 100644 --- a/paddle/operators/lod_tensor_to_array_op.cc +++ b/paddle/operators/lod_tensor_to_array_op.cc @@ -97,8 +97,7 @@ class LoDTensorToArrayOp : public framework::OperatorBase { class LoDTensorToArrayOpProtoMaker : public framework::OpProtoAndCheckerMaker { public: - LoDTensorToArrayOpProtoMaker(framework::OpProto *proto, - framework::OpAttrChecker *op_checker) + LoDTensorToArrayOpProtoMaker(OpProto *proto, OpAttrChecker *op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", ""); AddInput("RankTable", ""); @@ -131,7 +130,7 @@ class LoDTensorToArrayInferVarType : public framework::VarTypeInference { void operator()(const framework::OpDescBind &op_desc, framework::BlockDescBind *block) const override { for (auto &out_var : op_desc.Output("Out")) { - block->Var(out_var)->SetType(framework::VarDesc::LOD_TENSOR_ARRAY); + block->Var(out_var)->SetType(framework::proto::VarDesc::LOD_TENSOR_ARRAY); } } }; diff --git a/paddle/operators/log_loss_op.cc b/paddle/operators/log_loss_op.cc index 4524229a33..f714945354 100644 --- a/paddle/operators/log_loss_op.cc +++ b/paddle/operators/log_loss_op.cc @@ -46,8 +46,7 @@ class LogLossOp : public framework::OperatorWithKernel { template class LogLossOpMaker : public framework::OpProtoAndCheckerMaker { public: - LogLossOpMaker(framework::OpProto* proto, - framework::OpAttrChecker* op_checker) + LogLossOpMaker(OpProto* proto, OpAttrChecker* op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("Predicted", "The input value (Predicted) of Log loss op." diff --git a/paddle/operators/logical_op.cc b/paddle/operators/logical_op.cc index c818d5e9c1..2bd6c6efae 100644 --- a/paddle/operators/logical_op.cc +++ b/paddle/operators/logical_op.cc @@ -20,8 +20,7 @@ namespace operators { template class BinaryLogicalOpProtoMaker : public framework::OpProtoAndCheckerMaker { public: - BinaryLogicalOpProtoMaker(framework::OpProto *proto, - framework::OpAttrChecker *op_checker) + BinaryLogicalOpProtoMaker(OpProto *proto, OpAttrChecker *op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { OpComment comment; AddInput("X", @@ -45,8 +44,7 @@ Each element of Out is calculated by %s template class UnaryLogicalOpProtoMaker : public framework::OpProtoAndCheckerMaker { public: - UnaryLogicalOpProtoMaker(framework::OpProto *proto, - framework::OpAttrChecker *op_checker) + UnaryLogicalOpProtoMaker(OpProto *proto, OpAttrChecker *op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { OpComment comment; AddInput("X", string::Sprintf("(LoDTensor) Operand of %s operator", diff --git a/paddle/operators/lookup_table_op.cc b/paddle/operators/lookup_table_op.cc index 93e812ac5b..606b44808e 100644 --- a/paddle/operators/lookup_table_op.cc +++ b/paddle/operators/lookup_table_op.cc @@ -51,8 +51,7 @@ class LookupTableOp : public framework::OperatorWithKernel { class LookupTableOpMaker : public framework::OpProtoAndCheckerMaker { public: - LookupTableOpMaker(framework::OpProto* proto, - framework::OpAttrChecker* op_checker) + LookupTableOpMaker(OpProto* proto, OpAttrChecker* op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("W", "An input represents embedding tensors, " @@ -117,11 +116,12 @@ class LookupTableOpGradVarTypeInference : public framework::VarTypeInference { if (is_sparse) { VLOG(3) << "lookup_table_grad op " << framework::GradVarName("W") << " is set to SelectedRows"; - block->Var(out_var_name)->SetType(framework::VarDesc::SELECTED_ROWS); + block->Var(out_var_name) + ->SetType(framework::proto::VarDesc::SELECTED_ROWS); } else { VLOG(3) << "lookup_table_grad op " << framework::GradVarName("W") << " is set to LoDTensor"; - block->Var(out_var_name)->SetType(framework::VarDesc::LOD_TENSOR); + block->Var(out_var_name)->SetType(framework::proto::VarDesc::LOD_TENSOR); } } }; diff --git a/paddle/operators/lrn_op.cc b/paddle/operators/lrn_op.cc index b5b7bc940a..3b77b27b72 100644 --- a/paddle/operators/lrn_op.cc +++ b/paddle/operators/lrn_op.cc @@ -140,7 +140,7 @@ class LRNOp : public framework::OperatorWithKernel { template class LRNOpMaker : public framework::OpProtoAndCheckerMaker { public: - LRNOpMaker(framework::OpProto* proto, framework::OpAttrChecker* op_checker) + LRNOpMaker(OpProto* proto, OpAttrChecker* op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "(Tensor) The input of LRN operator. " diff --git a/paddle/operators/lstm_op.cc b/paddle/operators/lstm_op.cc index 2db7da30db..f82156170e 100644 --- a/paddle/operators/lstm_op.cc +++ b/paddle/operators/lstm_op.cc @@ -102,7 +102,7 @@ class LSTMOp : public framework::OperatorWithKernel { class LSTMOpMaker : public framework::OpProtoAndCheckerMaker { public: - LSTMOpMaker(framework::OpProto* proto, framework::OpAttrChecker* op_checker) + LSTMOpMaker(OpProto* proto, OpAttrChecker* op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("Input", "(LoDTensor) the first input is a LodTensor, which support " diff --git a/paddle/operators/lstm_unit_op.cc b/paddle/operators/lstm_unit_op.cc index b6eb33bafe..34da75c00d 100644 --- a/paddle/operators/lstm_unit_op.cc +++ b/paddle/operators/lstm_unit_op.cc @@ -48,8 +48,7 @@ class LstmUnitOp : public framework::OperatorWithKernel { class LstmUnitOpMaker : public framework::OpProtoAndCheckerMaker { public: - LstmUnitOpMaker(framework::OpProto* proto, - framework::OpAttrChecker* op_checker) + LstmUnitOpMaker(OpProto* proto, OpAttrChecker* op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "Lstm unit only applies non-linear activations, please make sure" diff --git a/paddle/operators/margin_rank_loss_op.cc b/paddle/operators/margin_rank_loss_op.cc index 42e8961c0e..fddc72aec0 100644 --- a/paddle/operators/margin_rank_loss_op.cc +++ b/paddle/operators/margin_rank_loss_op.cc @@ -42,8 +42,7 @@ class MarginRankLossOp : public framework::OperatorWithKernel { template class MarginRankLossOpMaker : public framework::OpProtoAndCheckerMaker { public: - MarginRankLossOpMaker(framework::OpProto *proto, - framework::OpAttrChecker *op_checker) + MarginRankLossOpMaker(OpProto *proto, OpAttrChecker *op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X1", "(2-D tensor with shape [batch_size x 1]) The score for " diff --git a/paddle/operators/matmul_op.cc b/paddle/operators/matmul_op.cc index ee0bc0c370..fd65d894d5 100644 --- a/paddle/operators/matmul_op.cc +++ b/paddle/operators/matmul_op.cc @@ -130,7 +130,7 @@ class MatMulOp : public framework::OperatorWithKernel { class MatMulOpMaker : public framework::OpProtoAndCheckerMaker { public: - MatMulOpMaker(framework::OpProto* proto, framework::OpAttrChecker* op_checker) + MatMulOpMaker(OpProto* proto, OpAttrChecker* op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "The first input of MatMul op"); AddInput("Y", "The second input of MatMul op"); diff --git a/paddle/operators/max_sequence_len_op.cc b/paddle/operators/max_sequence_len_op.cc index 798022c9dd..dec2874a1f 100644 --- a/paddle/operators/max_sequence_len_op.cc +++ b/paddle/operators/max_sequence_len_op.cc @@ -40,8 +40,7 @@ class MaxSeqenceLenOp : public framework::OperatorBase { class MaxSeqenceLenOpProtoMaker : public framework::OpProtoAndCheckerMaker { public: - MaxSeqenceLenOpProtoMaker(framework::OpProto *proto, - framework::OpAttrChecker *op_checker) + MaxSeqenceLenOpProtoMaker(OpProto *proto, OpAttrChecker *op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("RankTable", "The lod_rank_table."); AddOutput("Out", "The max sequence length."); diff --git a/paddle/operators/maxout_op.cc b/paddle/operators/maxout_op.cc index 011616e615..3ee3226941 100644 --- a/paddle/operators/maxout_op.cc +++ b/paddle/operators/maxout_op.cc @@ -20,7 +20,7 @@ using framework::Tensor; class MaxOutOpMaker : public framework::OpProtoAndCheckerMaker { public: - MaxOutOpMaker(framework::OpProto* proto, framework::OpAttrChecker* op_checker) + MaxOutOpMaker(OpProto* proto, OpAttrChecker* op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput( "X", diff --git a/paddle/operators/mean_op.cc b/paddle/operators/mean_op.cc index 8932d700c2..e27f9eeac6 100644 --- a/paddle/operators/mean_op.cc +++ b/paddle/operators/mean_op.cc @@ -32,7 +32,7 @@ class MeanOp : public framework::OperatorWithKernel { class MeanOpMaker : public framework::OpProtoAndCheckerMaker { public: - MeanOpMaker(framework::OpProto* proto, framework::OpAttrChecker* op_checker) + MeanOpMaker(OpProto* proto, OpAttrChecker* op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "The input of mean op"); AddOutput("Out", "The output of mean op"); diff --git a/paddle/operators/merge_lod_tensor_op.cc b/paddle/operators/merge_lod_tensor_op.cc index adc688dbd5..ec76cfdf27 100644 --- a/paddle/operators/merge_lod_tensor_op.cc +++ b/paddle/operators/merge_lod_tensor_op.cc @@ -114,8 +114,7 @@ class MergeLoDTensorOp : public framework::OperatorBase { class MergeLoDTensorOpProtoMaker : public framework::OpProtoAndCheckerMaker { public: - MergeLoDTensorOpProtoMaker(framework::OpProto *proto, - framework::OpAttrChecker *op_checker) + MergeLoDTensorOpProtoMaker(OpProto *proto, OpAttrChecker *op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "The input LoDTensor, contains complete lod information to " diff --git a/paddle/operators/minus_op.cc b/paddle/operators/minus_op.cc index 27f0c8de20..eb65fededf 100644 --- a/paddle/operators/minus_op.cc +++ b/paddle/operators/minus_op.cc @@ -46,7 +46,7 @@ class MinusOp : public framework::OperatorWithKernel { class MinusOpMaker : public framework::OpProtoAndCheckerMaker { public: - MinusOpMaker(framework::OpProto *proto, framework::OpAttrChecker *op_checker) + MinusOpMaker(OpProto *proto, OpAttrChecker *op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "The left tensor of minus operator."); AddInput("Y", "The right tensor of minus operator."); diff --git a/paddle/operators/modified_huber_loss_op.cc b/paddle/operators/modified_huber_loss_op.cc index f0a42491bf..dbb28f8466 100644 --- a/paddle/operators/modified_huber_loss_op.cc +++ b/paddle/operators/modified_huber_loss_op.cc @@ -39,8 +39,7 @@ class ModifiedHuberLossOp : public framework::OperatorWithKernel { class ModifiedHuberLossOpMaker : public framework::OpProtoAndCheckerMaker { public: - ModifiedHuberLossOpMaker(framework::OpProto* proto, - framework::OpAttrChecker* op_checker) + ModifiedHuberLossOpMaker(OpProto* proto, OpAttrChecker* op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "The input tensor of modified huber loss op. " diff --git a/paddle/operators/momentum_op.cc b/paddle/operators/momentum_op.cc index 2ab48fedec..15b8b80776 100644 --- a/paddle/operators/momentum_op.cc +++ b/paddle/operators/momentum_op.cc @@ -54,8 +54,7 @@ class MomentumOp : public framework::OperatorWithKernel { class MomentumOpMaker : public framework::OpProtoAndCheckerMaker { public: - MomentumOpMaker(framework::OpProto *proto, - framework::OpAttrChecker *op_checker) + MomentumOpMaker(OpProto *proto, OpAttrChecker *op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("Param", "(Tensor, default Tensor) " diff --git a/paddle/operators/mul_op.cc b/paddle/operators/mul_op.cc index bc4a5fdf0b..a4bf0711de 100644 --- a/paddle/operators/mul_op.cc +++ b/paddle/operators/mul_op.cc @@ -71,7 +71,7 @@ class MulOpShapeInference : public framework::InferShapeBase { class MulOpMaker : public framework::OpProtoAndCheckerMaker { public: - MulOpMaker(framework::OpProto* proto, framework::OpAttrChecker* op_checker) + MulOpMaker(OpProto* proto, OpAttrChecker* op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "The first input of mul op"); AddInput("Y", "The second input of mul op"); diff --git a/paddle/operators/multiplex_op.cc b/paddle/operators/multiplex_op.cc index b1ee8051c4..f524de60db 100644 --- a/paddle/operators/multiplex_op.cc +++ b/paddle/operators/multiplex_op.cc @@ -61,8 +61,7 @@ class MultiplexOp : public framework::OperatorWithKernel { class MultiplexOpMaker : public framework::OpProtoAndCheckerMaker { public: - MultiplexOpMaker(framework::OpProto* proto, - framework::OpAttrChecker* op_checker) + MultiplexOpMaker(OpProto* proto, OpAttrChecker* op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("Ids", "The index tensor of multiplex operator."); AddInput("X", "The candidate tensors of multiplex operator.") diff --git a/paddle/operators/name_convention.md b/paddle/operators/name_convention.md index b5cb176e00..a02b356f05 100644 --- a/paddle/operators/name_convention.md +++ b/paddle/operators/name_convention.md @@ -35,8 +35,8 @@ Here we give some examples to show how these rules will be used. ```c++ class AccumulateOpMaker : public framework::OpProtoAndCheckerMaker { public: - AccumulateOpMaker(framework::OpProto *proto, - framework::OpAttrChecker *op_checker) + AccumulateOpMaker(OpProto *proto, + OpAttrChecker *op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "(Tensor) The input tensor that has to be accumulated to the output tensor. If the output size is not the same as input size, diff --git a/paddle/operators/nccl_op.cc b/paddle/operators/nccl_op.cc index 22a37ff1bb..e19f534f8a 100644 --- a/paddle/operators/nccl_op.cc +++ b/paddle/operators/nccl_op.cc @@ -43,8 +43,7 @@ class NCCLInitOp : public framework::OperatorBase { class NCCLInitOpMaker : public framework::OpProtoAndCheckerMaker { public: - NCCLInitOpMaker(framework::OpProto *proto, - framework::OpAttrChecker *op_checker) + NCCLInitOpMaker(OpProto *proto, OpAttrChecker *op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddOutput("Communicator", "Create Communicator for communicating between gpus"); @@ -52,7 +51,7 @@ class NCCLInitOpMaker : public framework::OpProtoAndCheckerMaker { AddAttr("dtype", "(int, default 5 (FP32)) " "Output data type") - .SetDefault(framework::DataType::FP32); + .SetDefault(framework::proto::DataType::FP32); AddComment(R"DOC( NCCLInit Operator. @@ -141,8 +140,7 @@ class NCCLBcastOp : public framework::OperatorWithKernel { // AllreduceOp class NCCLAllReduceOpMaker : public framework::OpProtoAndCheckerMaker { public: - NCCLAllReduceOpMaker(framework::OpProto *proto, - framework::OpAttrChecker *op_checker) + NCCLAllReduceOpMaker(OpProto *proto, OpAttrChecker *op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "The input of AllReduce op"); AddInput("Communicator", "Communicator for communicating between gpus"); @@ -163,8 +161,7 @@ AllReduce the input tensors. // ReduceOp class NCCLReduceOpMaker : public framework::OpProtoAndCheckerMaker { public: - NCCLReduceOpMaker(framework::OpProto *proto, - framework::OpAttrChecker *op_checker) + NCCLReduceOpMaker(OpProto *proto, OpAttrChecker *op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "The input of Reduce op"); AddInput("Communicator", "Communicator for communicating between gpus"); @@ -190,8 +187,7 @@ Reduce the tensors. // BcastOp class NCCLBcastOpMaker : public framework::OpProtoAndCheckerMaker { public: - NCCLBcastOpMaker(framework::OpProto *proto, - framework::OpAttrChecker *op_checker) + NCCLBcastOpMaker(OpProto *proto, OpAttrChecker *op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "The input of BcastSend op"); AddInput("Communicator", "Communicator for communicating between gpus"); diff --git a/paddle/operators/nce_op.cc b/paddle/operators/nce_op.cc index 5ad1610fde..6dd457f7a2 100644 --- a/paddle/operators/nce_op.cc +++ b/paddle/operators/nce_op.cc @@ -73,7 +73,7 @@ class NCEOp : public framework::OperatorWithKernel { class NCEOpMaker : public framework::OpProtoAndCheckerMaker { public: - NCEOpMaker(framework::OpProto* proto, framework::OpAttrChecker* op_checker) + NCEOpMaker(OpProto* proto, OpAttrChecker* op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("Input", "(Tensor) A tensor of shape [batch_size, dim]."); AddInput( diff --git a/paddle/operators/pad_op.cc b/paddle/operators/pad_op.cc index 936dde22c3..8d2d031fcd 100644 --- a/paddle/operators/pad_op.cc +++ b/paddle/operators/pad_op.cc @@ -48,7 +48,7 @@ class PadOp : public framework::OperatorWithKernel { class PadOpMaker : public framework::OpProtoAndCheckerMaker { public: - PadOpMaker(framework::OpProto* proto, framework::OpAttrChecker* op_checker) + PadOpMaker(OpProto* proto, OpAttrChecker* op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "The input of pad op. " diff --git a/paddle/operators/pool_op.cc b/paddle/operators/pool_op.cc index 45fa20280c..50057eb648 100644 --- a/paddle/operators/pool_op.cc +++ b/paddle/operators/pool_op.cc @@ -67,8 +67,7 @@ void PoolOpGrad::InferShape(framework::InferShapeContext *ctx) const { ctx->SetOutputDim(framework::GradVarName("X"), ctx->GetInputDim("X")); } -Pool2dOpMaker::Pool2dOpMaker(framework::OpProto *proto, - framework::OpAttrChecker *op_checker) +Pool2dOpMaker::Pool2dOpMaker(OpProto *proto, OpAttrChecker *op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput( "X", @@ -136,8 +135,7 @@ Example: )DOC"); } -Pool3dOpMaker::Pool3dOpMaker(framework::OpProto *proto, - framework::OpAttrChecker *op_checker) +Pool3dOpMaker::Pool3dOpMaker(OpProto *proto, OpAttrChecker *op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "(Tensor) The input tensor of pooling operator. " diff --git a/paddle/operators/pool_op.h b/paddle/operators/pool_op.h index ab85d587a3..3860e295f4 100644 --- a/paddle/operators/pool_op.h +++ b/paddle/operators/pool_op.h @@ -40,14 +40,12 @@ class PoolOpGrad : public framework::OperatorWithKernel { class Pool2dOpMaker : public framework::OpProtoAndCheckerMaker { public: - Pool2dOpMaker(framework::OpProto* proto, - framework::OpAttrChecker* op_checker); + Pool2dOpMaker(OpProto* proto, OpAttrChecker* op_checker); }; class Pool3dOpMaker : public framework::OpProtoAndCheckerMaker { public: - Pool3dOpMaker(framework::OpProto* proto, - framework::OpAttrChecker* op_checker); + Pool3dOpMaker(OpProto* proto, OpAttrChecker* op_checker); }; template diff --git a/paddle/operators/pool_with_index_op.cc b/paddle/operators/pool_with_index_op.cc index 1a2383f8b8..980e9dc08b 100644 --- a/paddle/operators/pool_with_index_op.cc +++ b/paddle/operators/pool_with_index_op.cc @@ -100,8 +100,7 @@ class MaxPoolWithIndexOpGrad : public framework::OperatorWithKernel { class MaxPool2dWithIndexOpMaker : public framework::OpProtoAndCheckerMaker { public: - MaxPool2dWithIndexOpMaker(framework::OpProto *proto, - framework::OpAttrChecker *op_checker) + MaxPool2dWithIndexOpMaker(OpProto *proto, OpAttrChecker *op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput( "X", @@ -178,8 +177,7 @@ Example: class MaxPool3dWithIndexOpMaker : public framework::OpProtoAndCheckerMaker { public: - MaxPool3dWithIndexOpMaker(framework::OpProto *proto, - framework::OpAttrChecker *op_checker) + MaxPool3dWithIndexOpMaker(OpProto *proto, OpAttrChecker *op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "(Tensor) The input tensor of pooling operator. " diff --git a/paddle/operators/positive_negative_pair_op.cc b/paddle/operators/positive_negative_pair_op.cc index 4ba40a62ec..ab9f67bfe6 100644 --- a/paddle/operators/positive_negative_pair_op.cc +++ b/paddle/operators/positive_negative_pair_op.cc @@ -95,8 +95,7 @@ class PositiveNegativePairOp : public framework::OperatorWithKernel { class PositiveNegativePairOpMaker : public framework::OpProtoAndCheckerMaker { public: - PositiveNegativePairOpMaker(framework::OpProto *proto, - framework::OpAttrChecker *op_checker) + PositiveNegativePairOpMaker(OpProto *proto, OpAttrChecker *op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("Score", "(Tensor, float) Model Score on an item (with " diff --git a/paddle/operators/precision_recall_op.cc b/paddle/operators/precision_recall_op.cc index 1ace4f2a59..21dcd28c67 100644 --- a/paddle/operators/precision_recall_op.cc +++ b/paddle/operators/precision_recall_op.cc @@ -90,8 +90,7 @@ class PrecisionRecallOp : public framework::OperatorWithKernel { class PrecisionRecallOpMaker : public framework::OpProtoAndCheckerMaker { public: - PrecisionRecallOpMaker(framework::OpProto *proto, - framework::OpAttrChecker *op_checker) + PrecisionRecallOpMaker(OpProto *proto, OpAttrChecker *op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("MaxProbs", "(Tensor, default Tensor) A 2-D tensor with shape N x 1, " diff --git a/paddle/operators/prelu_op.cc b/paddle/operators/prelu_op.cc index 317a2a4015..4af8f85277 100644 --- a/paddle/operators/prelu_op.cc +++ b/paddle/operators/prelu_op.cc @@ -38,7 +38,7 @@ class PReluOp : public framework::OperatorWithKernel { class PReluOpMaker : public framework::OpProtoAndCheckerMaker { public: - PReluOpMaker(framework::OpProto *proto, framework::OpAttrChecker *op_checker) + PReluOpMaker(OpProto *proto, OpAttrChecker *op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "The input tensor of prelu operator."); AddInput("Alpha", "The alpha weight of prelu operator."); diff --git a/paddle/operators/proximal_adagrad_op.cc b/paddle/operators/proximal_adagrad_op.cc index cc350f6d26..b92f46b5bd 100644 --- a/paddle/operators/proximal_adagrad_op.cc +++ b/paddle/operators/proximal_adagrad_op.cc @@ -59,8 +59,7 @@ class ProximalAdagradOp : public framework::OperatorWithKernel { class ProximalAdagradOpMaker : public framework::OpProtoAndCheckerMaker { public: - ProximalAdagradOpMaker(framework::OpProto *proto, - framework::OpAttrChecker *op_checker) + ProximalAdagradOpMaker(OpProto *proto, OpAttrChecker *op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("Param", "(Tensor, default Tensor) " diff --git a/paddle/operators/proximal_gd_op.cc b/paddle/operators/proximal_gd_op.cc index 0b26beb3ac..2d3bbdaf32 100644 --- a/paddle/operators/proximal_gd_op.cc +++ b/paddle/operators/proximal_gd_op.cc @@ -47,8 +47,7 @@ class ProximalGDOp : public framework::OperatorWithKernel { class ProximalGDOpMaker : public framework::OpProtoAndCheckerMaker { public: - ProximalGDOpMaker(framework::OpProto *proto, - framework::OpAttrChecker *op_checker) + ProximalGDOpMaker(OpProto *proto, OpAttrChecker *op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("Param", "(Tensor, default Tensor) " diff --git a/paddle/operators/rank_loss_op.cc b/paddle/operators/rank_loss_op.cc index b80b175792..b5a9949d23 100644 --- a/paddle/operators/rank_loss_op.cc +++ b/paddle/operators/rank_loss_op.cc @@ -45,8 +45,7 @@ class RankLossOp : public framework::OperatorWithKernel { class RankLossOpMaker : public framework::OpProtoAndCheckerMaker { public: - RankLossOpMaker(framework::OpProto *proto, - framework::OpAttrChecker *op_checker) + RankLossOpMaker(OpProto *proto, OpAttrChecker *op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("Label", "(2-D Tensor with shape [batch_size x 1]) " diff --git a/paddle/operators/recurrent_op.cc b/paddle/operators/recurrent_op.cc index 232d926f7b..ca3a063553 100644 --- a/paddle/operators/recurrent_op.cc +++ b/paddle/operators/recurrent_op.cc @@ -497,8 +497,7 @@ class RecurrentGradOp : public RecurrentBase { class RecurrentOpProtoMaker : public framework::OpProtoAndCheckerMaker { public: - RecurrentOpProtoMaker(framework::OpProto *proto, - framework::OpAttrChecker *op_checker) + RecurrentOpProtoMaker(OpProto *proto, OpAttrChecker *op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput(kInputs, "rnn inputs").AsDuplicable(); AddInput(kInitialStates, "rnn initial states").AsDuplicable(); diff --git a/paddle/operators/recv_op.cc b/paddle/operators/recv_op.cc index eed482c1b4..2cc6cf6947 100644 --- a/paddle/operators/recv_op.cc +++ b/paddle/operators/recv_op.cc @@ -97,7 +97,7 @@ class RecvOp : public framework::OperatorBase { class RecvOpMaker : public framework::OpProtoAndCheckerMaker { public: - RecvOpMaker(framework::OpProto *proto, framework::OpAttrChecker *op_checker) + RecvOpMaker(OpProto *proto, OpAttrChecker *op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("RX", "(Tensor) Input tensor to be saved"); AddComment(R"DOC( diff --git a/paddle/operators/reduce_op.cc b/paddle/operators/reduce_op.cc index fedc2a5c37..19220f2f59 100644 --- a/paddle/operators/reduce_op.cc +++ b/paddle/operators/reduce_op.cc @@ -83,7 +83,7 @@ class ReduceGradOp : public framework::OperatorWithKernel { class ReduceOpMaker : public framework::OpProtoAndCheckerMaker { public: - ReduceOpMaker(framework::OpProto *proto, framework::OpAttrChecker *op_checker) + ReduceOpMaker(OpProto *proto, OpAttrChecker *op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "(Tensor) The input tensor. Tensors with rank at most 6 are " @@ -135,8 +135,7 @@ If reduce_all is true, just reduce along all dimensions and output a scalar. class ReduceSumOpMaker : public ReduceOpMaker { public: - ReduceSumOpMaker(framework::OpProto *proto, - framework::OpAttrChecker *op_checker) + ReduceSumOpMaker(OpProto *proto, OpAttrChecker *op_checker) : ReduceOpMaker(proto, op_checker) { SetComment("ReduceSum", "sum"); AddComment(comment_); @@ -145,8 +144,7 @@ class ReduceSumOpMaker : public ReduceOpMaker { class ReduceMeanOpMaker : public ReduceOpMaker { public: - ReduceMeanOpMaker(framework::OpProto *proto, - framework::OpAttrChecker *op_checker) + ReduceMeanOpMaker(OpProto *proto, OpAttrChecker *op_checker) : ReduceOpMaker(proto, op_checker) { SetComment("ReduceMean", "mean"); AddComment(comment_); @@ -155,8 +153,7 @@ class ReduceMeanOpMaker : public ReduceOpMaker { class ReduceMaxOpMaker : public ReduceOpMaker { public: - ReduceMaxOpMaker(framework::OpProto *proto, - framework::OpAttrChecker *op_checker) + ReduceMaxOpMaker(OpProto *proto, OpAttrChecker *op_checker) : ReduceOpMaker(proto, op_checker) { SetComment("ReduceMax", "max"); AddComment(comment_); @@ -165,8 +162,7 @@ class ReduceMaxOpMaker : public ReduceOpMaker { class ReduceMinOpMaker : public ReduceOpMaker { public: - ReduceMinOpMaker(framework::OpProto *proto, - framework::OpAttrChecker *op_checker) + ReduceMinOpMaker(OpProto *proto, OpAttrChecker *op_checker) : ReduceOpMaker(proto, op_checker) { SetComment("ReduceMin", "min"); AddComment(comment_); diff --git a/paddle/operators/reshape_op.cc b/paddle/operators/reshape_op.cc index d82d828747..2c5167295d 100644 --- a/paddle/operators/reshape_op.cc +++ b/paddle/operators/reshape_op.cc @@ -77,8 +77,7 @@ class ReshapeOp : public framework::OperatorWithKernel { class ReshapeOpMaker : public framework::OpProtoAndCheckerMaker { public: - ReshapeOpMaker(framework::OpProto *proto, - framework::OpAttrChecker *op_checker) + ReshapeOpMaker(OpProto *proto, OpAttrChecker *op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "The input tensor of reshape operator."); AddOutput("Out", "The output tensor of reshape operator."); diff --git a/paddle/operators/rmsprop_op.cc b/paddle/operators/rmsprop_op.cc index fc3f9b8988..f7c250bf91 100644 --- a/paddle/operators/rmsprop_op.cc +++ b/paddle/operators/rmsprop_op.cc @@ -63,8 +63,7 @@ class RmspropOp : public framework::OperatorWithKernel { class RmspropOpMaker : public framework::OpProtoAndCheckerMaker { public: - RmspropOpMaker(framework::OpProto *proto, - framework::OpAttrChecker *op_checker) + RmspropOpMaker(OpProto *proto, OpAttrChecker *op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("Param", "(Tensor, default Tensor) " diff --git a/paddle/operators/rnn_memory_helper_op.cc b/paddle/operators/rnn_memory_helper_op.cc index 3a035f0b9a..795bdf3e51 100644 --- a/paddle/operators/rnn_memory_helper_op.cc +++ b/paddle/operators/rnn_memory_helper_op.cc @@ -57,15 +57,14 @@ class RNNMemoryHelperOpShapeInference : public framework::InferShapeBase { class RNNMemoryHelperOpInfoMaker : public framework::OpProtoAndCheckerMaker { public: - RNNMemoryHelperOpInfoMaker(framework::OpProto *proto, - framework::OpAttrChecker *op_checker) + RNNMemoryHelperOpInfoMaker(OpProto *proto, OpAttrChecker *op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", ""); AddOutput("Out", ""); AddAttr("dtype", "(int, default 5 (FP32)) " "Output data type") - .SetDefault(framework::DataType::FP32); + .SetDefault(framework::proto::DataType::FP32); AddComment(""); } }; @@ -114,8 +113,7 @@ class RNNMemoryHelperGradOp : public framework::OperatorBase { class RNNMemoryHelperGradOpInfoMaker : public framework::OpProtoAndCheckerMaker { public: - RNNMemoryHelperGradOpInfoMaker(framework::OpProto *proto, - framework::OpAttrChecker *op_checker) + RNNMemoryHelperGradOpInfoMaker(OpProto *proto, OpAttrChecker *op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput(framework::GradVarName("Out"), ""); AddInput("X", ""); @@ -124,7 +122,7 @@ class RNNMemoryHelperGradOpInfoMaker AddAttr("dtype", "(int, default 5 (FP32)) " "Output data type") - .SetDefault(framework::DataType::FP32); + .SetDefault(framework::proto::DataType::FP32); AddComment(""); } }; diff --git a/paddle/operators/roi_pool_op.cc b/paddle/operators/roi_pool_op.cc index 75fcea8401..85b6a8e151 100644 --- a/paddle/operators/roi_pool_op.cc +++ b/paddle/operators/roi_pool_op.cc @@ -99,8 +99,7 @@ class ROIPoolGradOp : public framework::OperatorWithKernel { class ROIPoolOpMaker : public framework::OpProtoAndCheckerMaker { public: - ROIPoolOpMaker(framework::OpProto* proto, - framework::OpAttrChecker* op_checker) + ROIPoolOpMaker(OpProto* proto, OpAttrChecker* op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "(Tensor), " diff --git a/paddle/operators/row_conv_op.cc b/paddle/operators/row_conv_op.cc index 5203a5079c..6b116a9fe7 100644 --- a/paddle/operators/row_conv_op.cc +++ b/paddle/operators/row_conv_op.cc @@ -76,8 +76,7 @@ class RowConvGradOp : public framework::OperatorWithKernel { class RowConvOpMaker : public framework::OpProtoAndCheckerMaker { public: - RowConvOpMaker(framework::OpProto *proto, - framework::OpAttrChecker *op_checker) + RowConvOpMaker(OpProto *proto, OpAttrChecker *op_checker) : framework::OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "(LoDTensor), the input(X) is a LodTensor, which supports " diff --git a/paddle/operators/save_op.cc b/paddle/operators/save_op.cc index d4921cb80c..eae1146d6c 100644 --- a/paddle/operators/save_op.cc +++ b/paddle/operators/save_op.cc @@ -94,8 +94,7 @@ class SaveOp : public framework::OperatorBase { class SaveOpProtoMaker : public framework::OpProtoAndCheckerMaker { public: - SaveOpProtoMaker(framework::OpProto *proto, - framework::OpAttrChecker *op_checker) + SaveOpProtoMaker(OpProto *proto, OpAttrChecker *op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "(Tensor ) Input tensor to be saved"); AddComment(R"DOC( diff --git a/paddle/operators/scale_op.cc b/paddle/operators/scale_op.cc index d848be823e..98170c0d1b 100644 --- a/paddle/operators/scale_op.cc +++ b/paddle/operators/scale_op.cc @@ -38,7 +38,7 @@ class ScaleOp : public framework::OperatorWithKernel { template class ScaleOpMaker : public framework::OpProtoAndCheckerMaker { public: - ScaleOpMaker(framework::OpProto *proto, framework::OpAttrChecker *op_checker) + ScaleOpMaker(OpProto *proto, OpAttrChecker *op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "(Tensor) Input tensor of scale operator."); AddOutput("Out", "(Tensor) Output tensor of scale operator."); diff --git a/paddle/operators/scatter_op.cc b/paddle/operators/scatter_op.cc index 573bbcd187..173c958255 100644 --- a/paddle/operators/scatter_op.cc +++ b/paddle/operators/scatter_op.cc @@ -78,8 +78,7 @@ class ScatterGradOp : public framework::OperatorWithKernel { class ScatterOpMaker : public framework::OpProtoAndCheckerMaker { public: - ScatterOpMaker(framework::OpProto* proto, - framework::OpAttrChecker* op_checker) + ScatterOpMaker(OpProto* proto, OpAttrChecker* op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("Ref", "The source input of scatter op"); AddInput("Index", diff --git a/paddle/operators/send_op.cc b/paddle/operators/send_op.cc index a3059847f2..0d121fb48d 100644 --- a/paddle/operators/send_op.cc +++ b/paddle/operators/send_op.cc @@ -59,7 +59,7 @@ class SendOp : public framework::OperatorBase { class SendOpMaker : public framework::OpProtoAndCheckerMaker { public: - SendOpMaker(framework::OpProto *proto, framework::OpAttrChecker *op_checker) + SendOpMaker(OpProto *proto, OpAttrChecker *op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "(Tensor) Input tensor to be saved"); AddOutput("Out", "(Tensor) Output fetched from server"); diff --git a/paddle/operators/sequence_concat_op.cc b/paddle/operators/sequence_concat_op.cc index 9c7e5456e8..54e8989f25 100644 --- a/paddle/operators/sequence_concat_op.cc +++ b/paddle/operators/sequence_concat_op.cc @@ -43,8 +43,7 @@ class SequenceConcatOp : public framework::OperatorWithKernel { class SequenceConcatOpMaker : public framework::OpProtoAndCheckerMaker { public: - SequenceConcatOpMaker(framework::OpProto* proto, - framework::OpAttrChecker* op_checker) + SequenceConcatOpMaker(OpProto* proto, OpAttrChecker* op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "(LodTensorArray) Input is a vector of LoDTensor, " diff --git a/paddle/operators/sequence_conv_op.cc b/paddle/operators/sequence_conv_op.cc index f5c4f1c133..c5b7c81bd7 100644 --- a/paddle/operators/sequence_conv_op.cc +++ b/paddle/operators/sequence_conv_op.cc @@ -100,8 +100,7 @@ class SequenceConvGradOp : public framework::OperatorWithKernel { class SequenceConvOpMaker : public framework::OpProtoAndCheckerMaker { public: - SequenceConvOpMaker(framework::OpProto* proto, - framework::OpAttrChecker* op_checker) + SequenceConvOpMaker(OpProto* proto, OpAttrChecker* op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput( "X", diff --git a/paddle/operators/sequence_expand_op.cc b/paddle/operators/sequence_expand_op.cc index 770161b593..6227408be0 100644 --- a/paddle/operators/sequence_expand_op.cc +++ b/paddle/operators/sequence_expand_op.cc @@ -37,8 +37,7 @@ class SequenceExpandOp : public framework::OperatorWithKernel { class SequenceExpandOpMaker : public framework::OpProtoAndCheckerMaker { public: - SequenceExpandOpMaker(framework::OpProto* proto, - framework::OpAttrChecker* op_checker) + SequenceExpandOpMaker(OpProto* proto, OpAttrChecker* op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "(Tensor or LoDTensor) The input(X) of this operator can be a " diff --git a/paddle/operators/sequence_pool_op.cc b/paddle/operators/sequence_pool_op.cc index 3526e45a1b..0eb675caad 100644 --- a/paddle/operators/sequence_pool_op.cc +++ b/paddle/operators/sequence_pool_op.cc @@ -37,8 +37,7 @@ class SequencePoolOp : public framework::OperatorWithKernel { class SequencePoolOpMaker : public framework::OpProtoAndCheckerMaker { public: - SequencePoolOpMaker(framework::OpProto* proto, - framework::OpAttrChecker* op_checker) + SequencePoolOpMaker(OpProto* proto, OpAttrChecker* op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "(LoDTensor) The variable-length input of SequencePoolOp"); AddOutput("Out", diff --git a/paddle/operators/sequence_slice_op.cc b/paddle/operators/sequence_slice_op.cc index 481db8f9e5..309ee1f3a8 100644 --- a/paddle/operators/sequence_slice_op.cc +++ b/paddle/operators/sequence_slice_op.cc @@ -79,8 +79,7 @@ class SequenceSliceGradOp : public framework::OperatorWithKernel { class SequenceSliceOpMaker : public framework::OpProtoAndCheckerMaker { public: - SequenceSliceOpMaker(framework::OpProto* proto, - framework::OpAttrChecker* op_checker) + SequenceSliceOpMaker(OpProto* proto, OpAttrChecker* op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "(LoDTensor), " diff --git a/paddle/operators/sequence_softmax_op.cc b/paddle/operators/sequence_softmax_op.cc index 37d5452e6b..fe1832a36f 100644 --- a/paddle/operators/sequence_softmax_op.cc +++ b/paddle/operators/sequence_softmax_op.cc @@ -33,8 +33,7 @@ class SequenceSoftmaxOp : public framework::OperatorWithKernel { class SequenceSoftmaxOpMaker : public framework::OpProtoAndCheckerMaker { public: - SequenceSoftmaxOpMaker(framework::OpProto* proto, - framework::OpAttrChecker* op_checker) + SequenceSoftmaxOpMaker(OpProto* proto, OpAttrChecker* op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "(LoDTensor) 1-D or 2-D input LoDTensor with the 2-nd dimension " diff --git a/paddle/operators/sgd_op.cc b/paddle/operators/sgd_op.cc index 121bf60b27..fb4b43e472 100644 --- a/paddle/operators/sgd_op.cc +++ b/paddle/operators/sgd_op.cc @@ -43,7 +43,7 @@ class SGDOp : public framework::OperatorWithKernel { class SGDOpMaker : public framework::OpProtoAndCheckerMaker { public: - SGDOpMaker(framework::OpProto* proto, framework::OpAttrChecker* op_checker) + SGDOpMaker(OpProto* proto, OpAttrChecker* op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("Param", "(Tensor) Input parameter"); AddInput("LearningRate", "(Tensor) Learning rate of SGD"); diff --git a/paddle/operators/shrink_rnn_memory_op.cc b/paddle/operators/shrink_rnn_memory_op.cc index c380e60686..92dbe126bc 100644 --- a/paddle/operators/shrink_rnn_memory_op.cc +++ b/paddle/operators/shrink_rnn_memory_op.cc @@ -54,8 +54,7 @@ class ShrinkRNNMemoryOp : public ArrayOp { class ShrinkRNNMemoryOpProtoMaker : public framework::OpProtoAndCheckerMaker { public: - ShrinkRNNMemoryOpProtoMaker(framework::OpProto *proto, - framework::OpAttrChecker *op_checker) + ShrinkRNNMemoryOpProtoMaker(OpProto *proto, OpAttrChecker *op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "(LoDTensor) The RNN step memory to be shrinked."); AddInput("RankTable", "(LoDRankTable) The lod_rank_table of dynamic RNN."); diff --git a/paddle/operators/sigmoid_cross_entropy_with_logits_op.cc b/paddle/operators/sigmoid_cross_entropy_with_logits_op.cc index b8a1bf122a..9b5227d92d 100644 --- a/paddle/operators/sigmoid_cross_entropy_with_logits_op.cc +++ b/paddle/operators/sigmoid_cross_entropy_with_logits_op.cc @@ -86,8 +86,8 @@ class SigmoidCrossEntropyWithLogitsGradOp class SigmoidCrossEntropyWithLogitsOpMaker : public framework::OpProtoAndCheckerMaker { public: - SigmoidCrossEntropyWithLogitsOpMaker(framework::OpProto* proto, - framework::OpAttrChecker* op_checker) + SigmoidCrossEntropyWithLogitsOpMaker(OpProto* proto, + OpAttrChecker* op_checker) : framework::OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "(Tensor, default Tensor), a 2-D tensor with shape N x D, " diff --git a/paddle/operators/sign_op.cc b/paddle/operators/sign_op.cc index d5a7ccb77e..b2bfce71a6 100644 --- a/paddle/operators/sign_op.cc +++ b/paddle/operators/sign_op.cc @@ -34,7 +34,7 @@ class SignOp : public framework::OperatorWithKernel { template class SignOpMaker : public framework::OpProtoAndCheckerMaker { public: - SignOpMaker(framework::OpProto *proto, framework::OpAttrChecker *op_checker) + SignOpMaker(OpProto *proto, OpAttrChecker *op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "(Tensor) Input tensor of sign operator."); AddOutput("Out", "(Tensor) Output tensor of sign operator."); diff --git a/paddle/operators/smooth_l1_loss_op.cc b/paddle/operators/smooth_l1_loss_op.cc index 56e8d9058f..42a53cfa06 100644 --- a/paddle/operators/smooth_l1_loss_op.cc +++ b/paddle/operators/smooth_l1_loss_op.cc @@ -47,8 +47,7 @@ class SmoothL1LossOp : public framework::OperatorWithKernel { template class SmoothL1LossOpMaker : public framework::OpProtoAndCheckerMaker { public: - SmoothL1LossOpMaker(framework::OpProto* proto, - framework::OpAttrChecker* op_checker) + SmoothL1LossOpMaker(OpProto* proto, OpAttrChecker* op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "(Tensor, default Tensor) A tensor with rank at least 2. " diff --git a/paddle/operators/softmax_op.cc b/paddle/operators/softmax_op.cc index 0988c83d43..6b3f19bb46 100644 --- a/paddle/operators/softmax_op.cc +++ b/paddle/operators/softmax_op.cc @@ -36,8 +36,7 @@ class SoftmaxOp : public framework::OperatorWithKernel { class SoftmaxOpMaker : public framework::OpProtoAndCheckerMaker { public: - SoftmaxOpMaker(framework::OpProto* proto, - framework::OpAttrChecker* op_checker) + SoftmaxOpMaker(OpProto* proto, OpAttrChecker* op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "The input tensor of softmax. " diff --git a/paddle/operators/softmax_with_cross_entropy_op.cc b/paddle/operators/softmax_with_cross_entropy_op.cc index 0c30228863..bca3ff1562 100644 --- a/paddle/operators/softmax_with_cross_entropy_op.cc +++ b/paddle/operators/softmax_with_cross_entropy_op.cc @@ -20,8 +20,7 @@ namespace operators { class SoftmaxWithCrossEntropyOpMaker : public framework::OpProtoAndCheckerMaker { public: - SoftmaxWithCrossEntropyOpMaker(framework::OpProto* proto, - framework::OpAttrChecker* op_checker) + SoftmaxWithCrossEntropyOpMaker(OpProto* proto, OpAttrChecker* op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("Logits", "(Tensor, default: Tensor), The unscaled log probabilities " diff --git a/paddle/operators/split_lod_tensor_op.cc b/paddle/operators/split_lod_tensor_op.cc index f164a47711..c83b0cbad7 100644 --- a/paddle/operators/split_lod_tensor_op.cc +++ b/paddle/operators/split_lod_tensor_op.cc @@ -118,8 +118,7 @@ class SplitLoDTensorOp : public framework::OperatorBase { class SplitLoDTensorOpProtoMaker : public framework::OpProtoAndCheckerMaker { public: - SplitLoDTensorOpProtoMaker(framework::OpProto *proto, - framework::OpAttrChecker *op_checker) + SplitLoDTensorOpProtoMaker(OpProto *proto, OpAttrChecker *op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "The input LoDTensor"); AddInput("Mask", "A bool column vector which mask the input"); diff --git a/paddle/operators/split_op.cc b/paddle/operators/split_op.cc index 275b25e96a..e8c5fffcd2 100644 --- a/paddle/operators/split_op.cc +++ b/paddle/operators/split_op.cc @@ -65,7 +65,7 @@ class SplitOp : public framework::OperatorWithKernel { class SplitOpMaker : public framework::OpProtoAndCheckerMaker { public: - SplitOpMaker(framework::OpProto *proto, framework::OpAttrChecker *op_checker) + SplitOpMaker(OpProto *proto, OpAttrChecker *op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "(Tensor) Input tensor of the split operator."); AddOutput("Out", "(Tensor) Output tensors of the split operator.") diff --git a/paddle/operators/spp_op.cc b/paddle/operators/spp_op.cc index b1807b6261..c0aa87b0f0 100644 --- a/paddle/operators/spp_op.cc +++ b/paddle/operators/spp_op.cc @@ -18,7 +18,7 @@ namespace operators { class SppOpMaker : public framework::OpProtoAndCheckerMaker { public: - SppOpMaker(framework::OpProto* proto, framework::OpAttrChecker* op_checker) + SppOpMaker(OpProto* proto, OpAttrChecker* op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput( "X", diff --git a/paddle/operators/squared_l2_distance_op.cc b/paddle/operators/squared_l2_distance_op.cc index 50bc6da196..9e097176f3 100644 --- a/paddle/operators/squared_l2_distance_op.cc +++ b/paddle/operators/squared_l2_distance_op.cc @@ -56,8 +56,7 @@ class SquaredL2DistanceOp : public framework::OperatorWithKernel { class SquaredL2DistanceOpMaker : public framework::OpProtoAndCheckerMaker { public: - SquaredL2DistanceOpMaker(framework::OpProto* proto, - framework::OpAttrChecker* op_checker) + SquaredL2DistanceOpMaker(OpProto* proto, OpAttrChecker* op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "(Tensor) Input of SquaredL2DistanceOp."); AddInput("Y", "(Tensor) Target of SquaredL2DistanceOp."); diff --git a/paddle/operators/squared_l2_norm_op.cc b/paddle/operators/squared_l2_norm_op.cc index 3cff61a02f..9c239042cb 100644 --- a/paddle/operators/squared_l2_norm_op.cc +++ b/paddle/operators/squared_l2_norm_op.cc @@ -48,8 +48,7 @@ class SquaredL2NormGradOp : public framework::OperatorWithKernel { class SquaredL2NormOpMaker : public framework::OpProtoAndCheckerMaker { public: - SquaredL2NormOpMaker(framework::OpProto* proto, - framework::OpAttrChecker* op_checker) + SquaredL2NormOpMaker(OpProto* proto, OpAttrChecker* op_checker) : framework::OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "(Tensor) The input of squared_l2_norm op."); AddOutput("Out", "(Scalar) The output of squared_l2_norm op."); diff --git a/paddle/operators/sum_op.cc b/paddle/operators/sum_op.cc index cd52672f78..c56fc1f10b 100644 --- a/paddle/operators/sum_op.cc +++ b/paddle/operators/sum_op.cc @@ -29,7 +29,7 @@ class SumOp : public framework::OperatorWithKernel { "Output(Out) of SumOp should not be null."); if (ctx->IsRuntime() && ctx->GetOutputsVarType("Out")[0] == - framework::VarDesc::LOD_TENSOR_ARRAY) { + framework::proto::VarDesc::LOD_TENSOR_ARRAY) { return; // skip runtime infershape when is tensor array; } @@ -72,8 +72,8 @@ class SumOp : public framework::OperatorWithKernel { PADDLE_ENFORCE_NE(dtype, -1, "Sum operator should have at least one tensor"); - return framework::OpKernelType(static_cast(dtype), - ctx.device_context()); + return framework::OpKernelType( + static_cast(dtype), ctx.device_context()); } else if (x_vars[0]->IsType()) { return framework::OpKernelType( framework::ToDataType( @@ -98,7 +98,7 @@ class SumOp : public framework::OperatorWithKernel { class SumOpMaker : public framework::OpProtoAndCheckerMaker { public: - SumOpMaker(framework::OpProto* proto, framework::OpAttrChecker* op_checker) + SumOpMaker(OpProto* proto, OpAttrChecker* op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "(vector) The input tensors of sum operator.") .AsDuplicable(); @@ -118,7 +118,7 @@ class SumOpVarTypeInference : public framework::VarTypeInference { void operator()(const framework::OpDescBind& op_desc, framework::BlockDescBind* block) const override { auto& inputs = op_desc.Input("X"); - auto var_type = framework::VarDesc::SELECTED_ROWS; + auto var_type = framework::proto::VarDesc::SELECTED_ROWS; for (auto& name : op_desc.Input("X")) { VLOG(10) << name << " " @@ -128,12 +128,12 @@ class SumOpVarTypeInference : public framework::VarTypeInference { bool any_input_is_lod_tensor = std::any_of( inputs.begin(), inputs.end(), [block](const std::string& name) { return block->FindRecursiveOrCreateVar(name)->GetType() == - framework::VarDesc::LOD_TENSOR; + framework::proto::VarDesc::LOD_TENSOR; }); auto is_tensor_array = [block](const std::string& name) { return detail::Ref(block->FindRecursiveOrCreateVar(name)).GetType() == - framework::VarDesc::LOD_TENSOR_ARRAY; + framework::proto::VarDesc::LOD_TENSOR_ARRAY; }; bool any_input_is_tensor_array = @@ -152,9 +152,9 @@ class SumOpVarTypeInference : public framework::VarTypeInference { PADDLE_ENFORCE(all_inputs_are_tensor_array, "Not all inputs are tensor array:\n%s", os.str()); } - var_type = framework::VarDesc::LOD_TENSOR_ARRAY; + var_type = framework::proto::VarDesc::LOD_TENSOR_ARRAY; } else if (any_input_is_lod_tensor) { - var_type = framework::VarDesc::LOD_TENSOR; + var_type = framework::proto::VarDesc::LOD_TENSOR; } auto out_var_name = op_desc.Output("Out").front(); diff --git a/paddle/operators/tensor_array_read_write_op.cc b/paddle/operators/tensor_array_read_write_op.cc index 2835b84f75..337b7555c7 100644 --- a/paddle/operators/tensor_array_read_write_op.cc +++ b/paddle/operators/tensor_array_read_write_op.cc @@ -51,8 +51,7 @@ class WriteToArrayOp : public ArrayOp { class WriteToArrayOpProtoMaker : public framework::OpProtoAndCheckerMaker { public: - WriteToArrayOpProtoMaker(framework::OpProto *proto, - framework::OpAttrChecker *op_checker) + WriteToArrayOpProtoMaker(OpProto *proto, OpAttrChecker *op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "(LoDTensor) the tensor will be written to tensor array"); AddInput( @@ -104,7 +103,7 @@ class WriteToArrayInferVarType : public framework::VarTypeInference { VLOG(10) << "Set Variable " << out_name << " as LOD_TENSOR_ARRAY"; auto &out = detail::Ref(block->FindRecursiveOrCreateVar(out_name), "Cannot found %s", out_name); - out.SetType(framework::VarDesc::LOD_TENSOR_ARRAY); + out.SetType(framework::proto::VarDesc::LOD_TENSOR_ARRAY); auto *x = block->FindVarRecursive(x_name); if (x != nullptr) { out.SetDataType(x->GetDataType()); @@ -140,8 +139,7 @@ class ReadFromArrayOp : public ArrayOp { class ReadFromArrayProtoMaker : public framework::OpProtoAndCheckerMaker { public: - ReadFromArrayProtoMaker(framework::OpProto *proto, - framework::OpAttrChecker *op_checker) + ReadFromArrayProtoMaker(OpProto *proto, OpAttrChecker *op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "(TensorArray) the array will be read from."); AddInput("I", diff --git a/paddle/operators/top_k_op.cc b/paddle/operators/top_k_op.cc index 16ae925eb5..bb72210bb6 100644 --- a/paddle/operators/top_k_op.cc +++ b/paddle/operators/top_k_op.cc @@ -46,7 +46,7 @@ class TopkOp : public framework::OperatorWithKernel { class TopkOpMaker : public framework::OpProtoAndCheckerMaker { public: - TopkOpMaker(framework::OpProto *proto, framework::OpAttrChecker *op_checker) + TopkOpMaker(OpProto *proto, OpAttrChecker *op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "(Tensor) The input of Topk op"); AddOutput("Out", "(Tensor) The output tensor of Topk op"); diff --git a/paddle/operators/transpose_op.cc b/paddle/operators/transpose_op.cc index de5ff561ad..0109b8bc5c 100644 --- a/paddle/operators/transpose_op.cc +++ b/paddle/operators/transpose_op.cc @@ -55,8 +55,7 @@ class TransposeOp : public framework::OperatorWithKernel { class TransposeOpMaker : public framework::OpProtoAndCheckerMaker { public: - TransposeOpMaker(framework::OpProto* proto, - framework::OpAttrChecker* op_checker) + TransposeOpMaker(OpProto* proto, OpAttrChecker* op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput( "X", diff --git a/paddle/operators/uniform_random_op.cc b/paddle/operators/uniform_random_op.cc index 2a49ee471f..3c705cb339 100644 --- a/paddle/operators/uniform_random_op.cc +++ b/paddle/operators/uniform_random_op.cc @@ -66,15 +66,14 @@ class UniformRandomOp : public framework::OperatorWithKernel { framework::OpKernelType GetKernelType( const framework::ExecutionContext& ctx) const override { return framework::OpKernelType( - static_cast(ctx.Attr("dtype")), + static_cast(ctx.Attr("dtype")), ctx.GetPlace()); } }; class UniformRandomOpMaker : public framework::OpProtoAndCheckerMaker { public: - UniformRandomOpMaker(framework::OpProto* proto, - framework::OpAttrChecker* op_checker) + UniformRandomOpMaker(OpProto* proto, OpAttrChecker* op_checker) : framework::OpProtoAndCheckerMaker(proto, op_checker) { AddOutput("Out", "(Tensor) The output tensor of uniform random op"); AddComment(R"DOC( @@ -100,7 +99,7 @@ uniform distribution. "0 means use a seed generated by the system.") .SetDefault(0); AddAttr("dtype", "(int, default 5(FP32)) Output tensor data type") - .SetDefault(framework::DataType::FP32); + .SetDefault(framework::proto::DataType::FP32); } }; } // namespace operators diff --git a/paddle/operators/unpool_op.cc b/paddle/operators/unpool_op.cc index 49df2a530c..7c035c0b48 100644 --- a/paddle/operators/unpool_op.cc +++ b/paddle/operators/unpool_op.cc @@ -18,8 +18,7 @@ namespace operators { class Unpool2dOpMaker : public framework::OpProtoAndCheckerMaker { public: - Unpool2dOpMaker(framework::OpProto* proto, - framework::OpAttrChecker* op_checker) + Unpool2dOpMaker(OpProto* proto, OpAttrChecker* op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput( "X", diff --git a/paddle/operators/while_op.cc b/paddle/operators/while_op.cc index 9a092a570f..56a01e56d7 100644 --- a/paddle/operators/while_op.cc +++ b/paddle/operators/while_op.cc @@ -64,7 +64,7 @@ class WhileOp : public framework::OperatorBase { class WhileOpMaker : public framework::OpProtoAndCheckerMaker { public: - WhileOpMaker(framework::OpProto *proto, framework::OpAttrChecker *op_checker) + WhileOpMaker(OpProto *proto, OpAttrChecker *op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput(kParameters, "A set of variables, which are required by operators inside the " @@ -321,10 +321,10 @@ class WhileGradOpShapeInference : public framework::InferShapeBase { continue; } auto dims = ctx->GetInputsElementDim(kParameters, i); - if (var_types[i] == framework::VarDesc::LOD_TENSOR) { + if (var_types[i] == framework::proto::VarDesc::LOD_TENSOR) { names_to_set.push_back(pg_names[i]); dims_to_set.push_back(dims); - } else if (var_types[i] == framework::VarDesc::LOD_TENSOR_ARRAY) { + } else if (var_types[i] == framework::proto::VarDesc::LOD_TENSOR_ARRAY) { // not sure how to set the dim of LOD_TENSOR_ARRAY names_to_set.push_back(pg_names[i]); dims_to_set.push_back(dims); diff --git a/paddle/pybind/print_operators_doc.cc b/paddle/pybind/print_operators_doc.cc index 24f2a9383f..f4f281229e 100644 --- a/paddle/pybind/print_operators_doc.cc +++ b/paddle/pybind/print_operators_doc.cc @@ -31,31 +31,32 @@ std::string Escape(const std::string& s) { return r; } -std::string AttrType(paddle::framework::AttrType at) { +std::string AttrType(paddle::framework::proto::AttrType at) { switch (at) { - case paddle::framework::INT: + case paddle::framework::proto::INT: return "int"; - case paddle::framework::FLOAT: + case paddle::framework::proto::FLOAT: return "float"; - case paddle::framework::STRING: + case paddle::framework::proto::STRING: return "string"; - case paddle::framework::BOOLEAN: + case paddle::framework::proto::BOOLEAN: return "bool"; - case paddle::framework::INTS: + case paddle::framework::proto::INTS: return "int array"; - case paddle::framework::FLOATS: + case paddle::framework::proto::FLOATS: return "float array"; - case paddle::framework::STRINGS: + case paddle::framework::proto::STRINGS: return "string array"; - case paddle::framework::BOOLEANS: + case paddle::framework::proto::BOOLEANS: return "bool array"; - case paddle::framework::BLOCK: + case paddle::framework::proto::BLOCK: return "block id"; } return "UNKNOWN"; // not possible } -void PrintVar(const paddle::framework::OpProto::Var& v, std::stringstream& ss) { +void PrintVar(const paddle::framework::proto::OpProto::Var& v, + std::stringstream& ss) { ss << " { " << "\n" << " \"name\" : \"" << Escape(v.name()) << "\",\n" @@ -65,7 +66,7 @@ void PrintVar(const paddle::framework::OpProto::Var& v, std::stringstream& ss) { << " },"; } -void PrintAttr(const paddle::framework::OpProto::Attr& a, +void PrintAttr(const paddle::framework::proto::OpProto::Attr& a, std::stringstream& ss) { ss << " { " << "\n" @@ -81,7 +82,7 @@ void PrintOpProto(const std::string& type, std::stringstream& ss) { std::cerr << "Processing " << type << "\n"; - const paddle::framework::OpProto* p = opinfo.proto_; + const paddle::framework::proto::OpProto* p = opinfo.proto_; if (p == nullptr) { return; // It is possible that an operator doesn't have OpProto. } diff --git a/paddle/pybind/protobuf.cc b/paddle/pybind/protobuf.cc index 6c8f06cccb..de26184d01 100644 --- a/paddle/pybind/protobuf.cc +++ b/paddle/pybind/protobuf.cc @@ -144,7 +144,7 @@ void BindProgramDesc(py::module &m) { .def("serialize_to_string", SerializeMessage) .def("parse_from_string", [](ProgramDescBind &program_desc, const std::string &data) { - ProgramDesc *desc = program_desc.Proto(); + proto::ProgramDesc *desc = program_desc.Proto(); PADDLE_ENFORCE(desc->ParseFromString(data), "Fail to parse ProgramDesc from string. This could " "be a bug of Paddle."); @@ -184,14 +184,14 @@ void BindBlockDesc(py::module &m) { } void BindVarDsec(py::module &m) { - py::enum_(m, "DataType", "") - .value("BOOL", DataType::BOOL) - .value("INT16", DataType::INT16) - .value("INT32", DataType::INT32) - .value("INT64", DataType::INT64) - .value("FP16", DataType::FP16) - .value("FP32", DataType::FP32) - .value("FP64", DataType::FP64); + py::enum_(m, "DataType", "") + .value("BOOL", proto::DataType::BOOL) + .value("INT16", proto::DataType::INT16) + .value("INT32", proto::DataType::INT32) + .value("INT64", proto::DataType::INT64) + .value("FP16", proto::DataType::FP16) + .value("FP32", proto::DataType::FP32) + .value("FP64", proto::DataType::FP64); py::class_ var_desc(m, "VarDesc", ""); var_desc @@ -213,27 +213,27 @@ void BindVarDsec(py::module &m) { .def("persistable", &VarDescBind::Persistable) .def("set_persistable", &VarDescBind::SetPersistable); - py::enum_(var_desc, "VarType", "") - .value("LOD_TENSOR", VarDesc::LOD_TENSOR) - .value("SELECTED_ROWS", VarDesc::SELECTED_ROWS) - .value("FEED_MINIBATCH", VarDesc::FEED_MINIBATCH) - .value("FETCH_LIST", VarDesc::FETCH_LIST) - .value("STEP_SCOPES", VarDesc::STEP_SCOPES) - .value("LOD_RANK_TABLE", VarDesc::LOD_RANK_TABLE) - .value("LOD_TENSOR_ARRAY", VarDesc::LOD_TENSOR_ARRAY); + py::enum_(var_desc, "VarType", "") + .value("LOD_TENSOR", proto::VarDesc::LOD_TENSOR) + .value("SELECTED_ROWS", proto::VarDesc::SELECTED_ROWS) + .value("FEED_MINIBATCH", proto::VarDesc::FEED_MINIBATCH) + .value("FETCH_LIST", proto::VarDesc::FETCH_LIST) + .value("STEP_SCOPES", proto::VarDesc::STEP_SCOPES) + .value("LOD_RANK_TABLE", proto::VarDesc::LOD_RANK_TABLE) + .value("LOD_TENSOR_ARRAY", proto::VarDesc::LOD_TENSOR_ARRAY); } void BindOpDesc(py::module &m) { - py::enum_(m, "AttrType", "") - .value("INT", AttrType::INT) - .value("INTS", AttrType::INTS) - .value("FLOAT", AttrType::FLOAT) - .value("FLOATS", AttrType::FLOATS) - .value("STRING", AttrType::STRING) - .value("STRINGS", AttrType::STRINGS) - .value("BOOL", AttrType::BOOLEAN) - .value("BOOLS", AttrType::BOOLEANS) - .value("BLOCK", AttrType::BLOCK); + py::enum_(m, "AttrType", "") + .value("INT", proto::AttrType::INT) + .value("INTS", proto::AttrType::INTS) + .value("FLOAT", proto::AttrType::FLOAT) + .value("FLOATS", proto::AttrType::FLOATS) + .value("STRING", proto::AttrType::STRING) + .value("STRINGS", proto::AttrType::STRINGS) + .value("BOOL", proto::AttrType::BOOLEAN) + .value("BOOLS", proto::AttrType::BOOLEANS) + .value("BLOCK", proto::AttrType::BLOCK); py::class_ op_desc(m, "OpDesc", ""); op_desc.def("type", &OpDescBind::Type) diff --git a/paddle/pybind/pybind.cc b/paddle/pybind/pybind.cc index 4a82f1596e..31f802d4d2 100644 --- a/paddle/pybind/pybind.cc +++ b/paddle/pybind/pybind.cc @@ -288,12 +288,12 @@ All parameter, weight, gradient are variables in Paddle. for (const auto &t : targets) { prog_with_targets.MutableBlock(t[0])->Op(t[1])->MarkAsTarget(); } - ProgramDesc pruned_desc; + proto::ProgramDesc pruned_desc; Prune(*prog_with_targets.Proto(), &pruned_desc); return new ProgramDescBind(pruned_desc); }); m.def("inference_optimize", [](ProgramDescBind &origin) { - ProgramDesc pruned_desc; + proto::ProgramDesc pruned_desc; InferenceOptimize(*(origin.Proto()), &pruned_desc); return new ProgramDescBind(pruned_desc); }); @@ -345,7 +345,7 @@ All parameter, weight, gradient are variables in Paddle. py::class_(m, "Operator") .def_static("create", [](py::bytes protobin) { - OpDesc desc; + proto::OpDesc desc; PADDLE_ENFORCE(desc.ParsePartialFromString(protobin), "Cannot parse user input to OpDesc"); PADDLE_ENFORCE(desc.IsInitialized(), @@ -398,7 +398,7 @@ All parameter, weight, gradient are variables in Paddle. py::class_(m, "CondOp") .def_static("create", [](py::bytes protobin) -> operators::CondOp * { - OpDesc desc; + proto::OpDesc desc; PADDLE_ENFORCE(desc.ParsePartialFromString(protobin), "Cannot parse user input to OpDesc"); PADDLE_ENFORCE(desc.IsInitialized(), From cb3a74e43644edeeaa697ae6dfe1cd6c9c63a968 Mon Sep 17 00:00:00 2001 From: chengduoZH Date: Wed, 20 Dec 2017 12:37:19 +0800 Subject: [PATCH 176/193] revert im2col --- paddle/operators/math/im2col.cc | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/paddle/operators/math/im2col.cc b/paddle/operators/math/im2col.cc index 50af3199f2..c2633b2e16 100644 --- a/paddle/operators/math/im2col.cc +++ b/paddle/operators/math/im2col.cc @@ -126,19 +126,10 @@ class Col2ImFunctordata(); const T* col_data = col.data(); - int w_offset = -1; - int h_offset = 0; - int c_im = 0; for (int c = 0; c < channels_col; ++c) { - ++w_offset; - if (w_offset == filter_width) { - w_offset = 0; - ++h_offset; - if (h_offset == filter_height) { - h_offset = 0; - ++c_im; - } - } + int w_offset = c % filter_width; + int h_offset = (c / filter_width) % filter_height; + int c_im = c / (filter_width * filter_height); for (int h = 0; h < col_height; ++h) { int im_row_idx = h * stride[0] - padding[0] + h_offset * dilation[0]; for (int w = 0; w < col_width; ++w) { From 0ab5d8e1d4c93dbf0ca16f029577a9a07c70b9f8 Mon Sep 17 00:00:00 2001 From: guosheng Date: Wed, 20 Dec 2017 13:14:16 +0800 Subject: [PATCH 177/193] Add python wrapper for reduce_sum --- doc/api/v2/fluid/layers.rst | 6 ++++ python/paddle/v2/fluid/layers/nn.py | 50 +++++++++++++++++++++++++++-- 2 files changed, 53 insertions(+), 3 deletions(-) diff --git a/doc/api/v2/fluid/layers.rst b/doc/api/v2/fluid/layers.rst index 92ca1cf0f8..842f3b1800 100644 --- a/doc/api/v2/fluid/layers.rst +++ b/doc/api/v2/fluid/layers.rst @@ -312,3 +312,9 @@ sequence_softmax .. autofunction:: paddle.v2.fluid.layers.sequence_softmax :noindex: + +reduce_sum +--------- +.. autofunction:: paddle.v2.fluid.layers.reduce_sum + :noindex: + diff --git a/python/paddle/v2/fluid/layers/nn.py b/python/paddle/v2/fluid/layers/nn.py index 2c38c23224..73f68466da 100644 --- a/python/paddle/v2/fluid/layers/nn.py +++ b/python/paddle/v2/fluid/layers/nn.py @@ -13,7 +13,7 @@ __all__ = [ 'crf_decoding', 'cos_sim', 'cross_entropy', 'square_error_cost', 'accuracy', 'chunk_eval', 'sequence_conv', 'conv2d', 'sequence_pool', 'pool2d', 'batch_norm', 'beam_search_decode', 'conv2d_transpose', 'sequence_expand', - 'lstm_unit' + 'lstm_unit', 'reduce_sum' ] @@ -402,8 +402,8 @@ def chunk_eval(input, }, attrs={ "num_chunk_types": num_chunk_types, - 'chunk_scheme': chunk_scheme, - 'excluded_chunk_types': excluded_chunk_types or [] + "chunk_scheme": chunk_scheme, + "excluded_chunk_types": excluded_chunk_types or [] }) return precision, recall, f1_score, num_infer_chunks, num_label_chunks, num_correct_chunks @@ -935,3 +935,47 @@ def lstm_unit(x_t, attrs={"forget_bias": forget_bias}) return h, c + + +def reduce_sum(input, dim=None, keep_dim=False): + """ + Computes the sum of tensor elements over the given dimension. + + Args: + input (Variable): The input variable which is a Tensor or LoDTensor. + dim (int|None): The dimension along which the sum is performed. If + :attr:`None`, sum all elements of :attr:`input` and return a + Tensor variable with a single element, otherwise must be in the + range :math:`[-rank(input), rank(input))`. If :math:`dim < 0`, + the dimension to reduce is :math:`rank + dim`. + keep_dim (bool): Whether to reserve the reduced dimension in the + output Tensor. The result tensor will have one fewer dimension + than the :attr:`input` unless :attr:`keep_dim` is true. + + Returns: + Variable: The reduced Tensor variable. + + Examples: + .. code-block:: python + + # x is a Tensor variable with following elements: + # [[0.2, 0.3, 0.5, 0.9] + # [0.1, 0.2, 0.6, 0.7]] + # Each example is followed by the correspending output tensor. + fluid.layers.reduce_sum(x) # [3.5] + fluid.layers.reduce_sum(x, dim=0) # [0.3, 0.5, 1.1, 1.6] + fluid.layers.reduce_sum(x, dim=-1) # [1.9, 1.6] + fluid.layers.reduce_sum(x, dim=1, keep_dim=True) # [[1.9], [1.6]] + """ + helper = LayerHelper('reduce_sum', **locals()) + out = helper.create_tmp_variable(dtype=helper.input_dtype()) + helper.append_op( + type='reduce_sum', + inputs={'X': input}, + outputs={'Out': out}, + attrs={ + 'dim': dim if dim != None else 0, + 'keep_dim': keep_dim, + 'reduce_all': True if dim == None else False + }) + return out From 2d5ec16bc8a09fb8e0f62c89b116b0cd1d333907 Mon Sep 17 00:00:00 2001 From: Yancey Date: Wed, 20 Dec 2017 13:37:03 +0800 Subject: [PATCH 178/193] Execute the program with multi threads (#6223) * multi cpu design * update * multi cpu executor to executor * add graph converting * use parallel operator to execute blocks with multi threads * use auto-transpiler * use auto-transpiler * update * update graph --- doc/design/refactor/multi_cpu.md | 43 ++++++++++++++++++ doc/design/refactor/src/multi-threads.graffle | Bin 0 -> 12925 bytes .../src/multi-threads/multi-threads@3x.png | Bin 0 -> 358839 bytes .../src/multi-threads/single-thread@3x.png | Bin 0 -> 78099 bytes 4 files changed, 43 insertions(+) create mode 100644 doc/design/refactor/multi_cpu.md create mode 100644 doc/design/refactor/src/multi-threads.graffle create mode 100644 doc/design/refactor/src/multi-threads/multi-threads@3x.png create mode 100644 doc/design/refactor/src/multi-threads/single-thread@3x.png diff --git a/doc/design/refactor/multi_cpu.md b/doc/design/refactor/multi_cpu.md new file mode 100644 index 0000000000..a8d8ee0422 --- /dev/null +++ b/doc/design/refactor/multi_cpu.md @@ -0,0 +1,43 @@ +# Design Doc: Execute the Program with Multi CPU + +## Abstract + +This Design Doc propose an approach to make the user-defined Op graph +running with multi-CPU, we will use an auto transpiler to convert the user-defined +Op graph to a multi-CPU Op graph, and run `ParallelDo` Op to run the graph. + +## Transpiler + + + +After converted: + + + +## Implement + +- `Multi-CPU Transpiler` will convert the graph to a multi-CPU graph + which would be executed with multi-threads. +- `BlockingCounter` will `Init/Decrement` an atomic counter, and Blocking `Wait` + for the atomic counter become `0`: + ```cpp + BlockingCounter bc(thread_count); + for (int i = 0; i < thread_count; ++i) { + thread_pool->Start([&bc] {bc.DecrementCount(); }) + } + bc.Wait(); + ``` +- `ParallelDo` Operator + - Initialize a thread pool which is a Singleton. + - Use a block id as the input, and create run the specify Block on independent scope + with multi-threads. + - Initialize a `BlockingCounter` instance and wait until all threads are done. +- `Split` Operator will split the Input Tensor into a TensorArray. +- `Merge` merge all the gradients which calculated in different threads + with `mean/sum/max/min...` method, and then run the Optimizer Op to optimize `W`. + +## TODO + +- Improve the optimizer stage with multi-threads, since we could + assign the parameters to the different threads and execute + optimizer with multi-threads. diff --git a/doc/design/refactor/src/multi-threads.graffle b/doc/design/refactor/src/multi-threads.graffle new file mode 100644 index 0000000000000000000000000000000000000000..e71173715fff92a0a933d0c7d83599ba948552c6 GIT binary patch literal 12925 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 literal 0 HcmV?d00001 diff --git a/doc/design/refactor/src/multi-threads/multi-threads@3x.png b/doc/design/refactor/src/multi-threads/multi-threads@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..e40a869987dbbf5019d4cb03c1dab55b74d6c9f9 GIT binary patch literal 358839 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 z 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 z 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

{J>S;-r(bL~>t#fd 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 literal 0 HcmV?d00001 diff --git a/doc/design/refactor/src/multi-threads/single-thread@3x.png b/doc/design/refactor/src/multi-threads/single-thread@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..4083aebfdd45af5fbac25fa2c4176bc08c3cb44a GIT binary patch literal 78099 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 Date: Wed, 20 Dec 2017 14:29:22 +0800 Subject: [PATCH 179/193] Add design of switching kernel (#6720) * Add design of switching kernel * Follow comments --- doc/design/switch_kernel.md | 66 +++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 doc/design/switch_kernel.md diff --git a/doc/design/switch_kernel.md b/doc/design/switch_kernel.md new file mode 100644 index 0000000000..1846e5d9f9 --- /dev/null +++ b/doc/design/switch_kernel.md @@ -0,0 +1,66 @@ +## Background +Every operator has many kernels because there are multiple data types, places, data layout that Fluid supports. We use the `KernelType` to describe kernel types that operators can hold. + +The `KernelType` is as follows. + +``` +struct KernelType { + Place place_; + DataType data_type_; + LayoutType layout_; +}; +``` + +The `place_` is a descriptor of the device and the computational library, e.g., `MKLDNNPlace`, `CUDAPlace`. + +The `data_type_` is the data type that this kernel performs on, e.g., `FP32`, `INT64`. Note that one kernel may have inputs with different data types. However, it will be a major `data_type`. For example, the `cross_entropy` takes `int64` as it label, and `double`/`float` as its input logit and output cost. The major `data_type` of `cross_entropy` is `float`/`double`. + +The `layout` is useful for some computational library. One example is that MKLDNN uses many kinds of layout, such as `nChw8c`. Each kind of layout will invoke the different kernel. + +## Problem + +We register a kernel for every operator and every kernel type ideally. However, it is impracticable for the following situations. + +1. Some operators, like CRF, are complicated and inefficient to be implemented on GPU. The CRF operator will only have a CPU kernel. +2. Some operators will take too many memory. It is better to force them into CPU. However, the rest of operators in this neural network will be performed on GPU, i.e., model parallel problem. +3. Some layout and place are particular. One example is that MKLDNN uses `nChw8` and there is no other library uses `nChw8c`. + +Problems under these situations are similar. We can formalise this problem as follow. + +We register kernels with types $KT = \{kt_1, kt_2, kt_3, ...\}$ for one operator. The inputs of this operator should be run on kernel type $kt_{?}$, which the $kt_{?} \notin KT$. How to cast the input of this operator from $kt_{?}$ to any of kernel type in $KT$. + +## Solution + +It is clearly that transforming inputs of an operator toadapt another kernel type is not related to the particular operator. So we should register these transformation methods as global methods. + +We can infer a kernel type from the inputs of an operators. We let this kernel type as `actual kernel type`, which means this kernel type is the actually kernel type that operator should be performed. + +We can get a kernel type by 1) The configuration of operator description. (Users may want to force use `MKL` for `conv` operator). 2) The place of the current executor. (Executor is running on GPU). This kernel type is what we expect the operator will be performed on. We let this kernel type as `expect kernel type`. + +We transform the input data from `actual` to `expect` if the expect kernel type is not as same as actual kernel type. + +The algorithm is described as follow + +```cpp +using DataTransformationFN = std::function; +using KernelTypePair = std::pair; + +map g_data_transformation_; + +void OpWithKernel::Run() { + vec inputs = ... + auto actual_kernel_type = GetActualKernelType(inputs); + + // The expected kernel type is related to actual kernel type. + // For the most operators, the expected kernel type is as same as + // actual kernel type. + // + // So we pass `actual_kernel_type` as a parameter of + // GetExpectedKernelType + auto expect_kernel_type = GetExpectedKernelType(actual_kernel_type); + + auto trans = g_data_transformation_[{actual_kernel_type, expect_kernel_type}]; + + kernel.run(trans(inputs)); +} +``` From 59403c3bc3ac3b4a01af925d7a1aba2db60467a7 Mon Sep 17 00:00:00 2001 From: Yu Yang Date: Wed, 20 Dec 2017 15:57:58 +0800 Subject: [PATCH 180/193] Add comment of GetSubLoDAndAbsoluteOffset (#6771) --- paddle/framework/lod_tensor.h | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/paddle/framework/lod_tensor.h b/paddle/framework/lod_tensor.h index 9411c96aea..0923c52a0a 100644 --- a/paddle/framework/lod_tensor.h +++ b/paddle/framework/lod_tensor.h @@ -184,6 +184,18 @@ LoDTensor LodExpand(const LoDTensor& source, const LoD& lod, size_t level, return tensor; } +// Get the absolute offset of a lod[start_level][start_idx:end_idx] and +// relative length of details for every levels(i.e., [start_level: ]). +// +// For example, +// lod = [[0, 3, 4, 8], [0, 9, 10, 11, 13, 17, 19, 22, 24]] +// start_level = 0 +// start_idx = 1 +// end_idx = 3 +// +// Returns: +// LoD = [[1, 4], [2, 4, 2, 3, 2]] +// pair = {11, 24} std::pair> GetSubLoDAndAbsoluteOffset( const LoD& lod, size_t start_idx, size_t end_idx, size_t start_level); From 0f1c685c60161ae2d60ef073df076185356da54a Mon Sep 17 00:00:00 2001 From: Yu Yang Date: Wed, 20 Dec 2017 15:58:10 +0800 Subject: [PATCH 181/193] Add more log of lod_rank_table (#6761) --- paddle/framework/lod_rank_table.cc | 9 +++++++++ paddle/framework/lod_rank_table.h | 5 +++++ paddle/operators/lod_rank_table_op.cc | 1 + 3 files changed, 15 insertions(+) diff --git a/paddle/framework/lod_rank_table.cc b/paddle/framework/lod_rank_table.cc index 1c2fba70c8..17d524c092 100644 --- a/paddle/framework/lod_rank_table.cc +++ b/paddle/framework/lod_rank_table.cc @@ -46,4 +46,13 @@ void LoDRankTable::Reset(const LoD& lod, size_t level) { } } // namespace framework + +std::ostream& operator<<(std::ostream& out, + const framework::LoDRankTable& table) { + out << "NumOfSequence " << table.items().size() << "\n"; + for (auto& each_item : table.items()) { + out << "\tSeq #" << each_item.index << ", Len=" << each_item.length << "\n"; + } + return out; +} } // namespace paddle diff --git a/paddle/framework/lod_rank_table.h b/paddle/framework/lod_rank_table.h index 9faa3a4d7b..d3007d3d73 100644 --- a/paddle/framework/lod_rank_table.h +++ b/paddle/framework/lod_rank_table.h @@ -13,6 +13,7 @@ limitations under the License. */ #pragma once +#include #include "paddle/framework/lod_tensor.h" namespace paddle { @@ -52,4 +53,8 @@ class LoDRankTable { }; } // namespace framework + +std::ostream& operator<<(std::ostream& out, + const framework::LoDRankTable& table); + } // namespace paddle diff --git a/paddle/operators/lod_rank_table_op.cc b/paddle/operators/lod_rank_table_op.cc index 3e281c8d1e..46577d0c58 100644 --- a/paddle/operators/lod_rank_table_op.cc +++ b/paddle/operators/lod_rank_table_op.cc @@ -30,6 +30,7 @@ class LoDRankTableOp : public framework::OperatorBase { scope.FindVar(Output("Out"))->GetMutable(); VLOG(10) << "Level = " << static_cast(Attr("level")); out->Reset(x.lod(), static_cast(Attr("level"))); + VLOG(10) << Input("X") << "'s lod information is " << *out; } }; From f1a9efcac5743e05fc4e1dbc53c08f69ec19d5a8 Mon Sep 17 00:00:00 2001 From: qiaolongfei Date: Wed, 20 Dec 2017 17:18:21 +0800 Subject: [PATCH 182/193] add kernel hint design --- doc/design/kernel_hint_design.md | 54 ++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 doc/design/kernel_hint_design.md diff --git a/doc/design/kernel_hint_design.md b/doc/design/kernel_hint_design.md new file mode 100644 index 0000000000..1ccab16844 --- /dev/null +++ b/doc/design/kernel_hint_design.md @@ -0,0 +1,54 @@ +## Problem +In PaddlePaddle's [Design](https://github.com/PaddlePaddle/Paddle/blob/develop/doc/design/switch_kernel.md), one Operator may have multiple kernels. Users may have some personal preference to choose a certain type of kernel for an operator, such as `force_cpu` to use a CPU kernel, `use_cudnn` to choose a CUDNN kernel, we need to provide a way for a user to do this. + +In the current design, we use KernelType to describe one kernel. + +```cpp +struct KernelType { + Place place_; + DataType data_type_; + LayoutType layout_; +}; +``` + `place_` `data_type_` and `layout_` can come from the input tensor of the operator, `GetActualKernelType(inputs)` use inputs to infer the proper kernel key that fit the incoming data, user can not config it. + +The design also provides a virtual method `GetExpectedKernelType` that user can overload and choose the KernelType they want to use. + +so, we should send the information user defined in proto to `GetExpectedKernelType` for choosing a kernel. + +The problem is, how should we define and send the information for `GetExpectedKernelType` to use? + +## Solution +1, Do nothing, let the user add the information they want to operator‘s attribute and get them inside `GetExpectedKernelType`, this can work right. But there is a little problem that users may define many kinds of hints for the same purpose, such as `force_cpu`, `use_cpu`, `CPU` for CPU kernel, and `use_cudnn`, `force_cudnn`, `cudnn_kernel` for use of CUDNN kernel. + +2, Pre-define all the needed option and use a single attr key such as `kernel_hint` for the user, this is not so flexible if the user wants to define some more kind of hint. + + +To provide enough flexibility while avoiding confusion definition, we can predefine some options, such as `force_cpu`, `use_cudnn`, `use_mkldnn` for a user to choose. + +```cpp +const std::string kNonHint = ""; +const std::string kForceCPU = "force_cpu"; +const std::string kUseCUDNN = "use_cudnn"; +const std::string kUseMKLDNN = "use_mkldnn"; + +KernelType GetExpectedKernelTyp() { + // "kernel_hint" is a user defined attribute name + if (Attr("kernel_hint") == kForceCPU) { + return KernelType(CPUPlace, ...) + } else { + ... + } +} +``` + +In Python code + +```python +def xx_layer(..., kernel_hint=None): + layer_helper = ... + layer_helper .append_op( + type="xx", + # "kernel_hint" should be the same with the attr name in CPP + attr={"kernel_hint": kernel_hint or ""}) +``` From 1102591595885bcd61a1041bc341e0c398bd21db Mon Sep 17 00:00:00 2001 From: qiaolongfei Date: Wed, 20 Dec 2017 17:22:38 +0800 Subject: [PATCH 183/193] add two sub title --- doc/design/kernel_hint_design.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/doc/design/kernel_hint_design.md b/doc/design/kernel_hint_design.md index 1ccab16844..75f0e4ea72 100644 --- a/doc/design/kernel_hint_design.md +++ b/doc/design/kernel_hint_design.md @@ -19,11 +19,13 @@ so, we should send the information user defined in proto to `GetExpectedKernelTy The problem is, how should we define and send the information for `GetExpectedKernelType` to use? ## Solution + +### potential choice 1, Do nothing, let the user add the information they want to operator‘s attribute and get them inside `GetExpectedKernelType`, this can work right. But there is a little problem that users may define many kinds of hints for the same purpose, such as `force_cpu`, `use_cpu`, `CPU` for CPU kernel, and `use_cudnn`, `force_cudnn`, `cudnn_kernel` for use of CUDNN kernel. 2, Pre-define all the needed option and use a single attr key such as `kernel_hint` for the user, this is not so flexible if the user wants to define some more kind of hint. - +### final choice To provide enough flexibility while avoiding confusion definition, we can predefine some options, such as `force_cpu`, `use_cudnn`, `use_mkldnn` for a user to choose. ```cpp From f3cbd8d404edd956a921f0b5fd502ca3785b8e13 Mon Sep 17 00:00:00 2001 From: qiaolongfei Date: Wed, 20 Dec 2017 18:47:56 +0800 Subject: [PATCH 184/193] follow comment --- doc/design/kernel_hint_design.md | 39 ++++++++++++++++---------------- 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/doc/design/kernel_hint_design.md b/doc/design/kernel_hint_design.md index 75f0e4ea72..da4856bb6a 100644 --- a/doc/design/kernel_hint_design.md +++ b/doc/design/kernel_hint_design.md @@ -1,7 +1,7 @@ ## Problem -In PaddlePaddle's [Design](https://github.com/PaddlePaddle/Paddle/blob/develop/doc/design/switch_kernel.md), one Operator may have multiple kernels. Users may have some personal preference to choose a certain type of kernel for an operator, such as `force_cpu` to use a CPU kernel, `use_cudnn` to choose a CUDNN kernel, we need to provide a way for a user to do this. +In PaddlePaddle's [Design](https://github.com/PaddlePaddle/Paddle/blob/develop/doc/design/switch_kernel.md), one Operator may have multiple kernels. Users may have some personal preference to choose a certain type of kernel for an operator, such as `force_cpu` to choose a CPU kernel, `use_cudnn` to choose a CUDNN kernel, we need to provide a way for users to do this. -In the current design, we use KernelType to describe one kernel. +In the current design, we use KernelType to describe one kernel. ```cpp struct KernelType { @@ -10,33 +10,33 @@ struct KernelType { LayoutType layout_; }; ``` - `place_` `data_type_` and `layout_` can come from the input tensor of the operator, `GetActualKernelType(inputs)` use inputs to infer the proper kernel key that fit the incoming data, user can not config it. + `place_` `data_type_` and `layout_` can be got from the input tensors of the operator, `GetActualKernelType(inputs)` use inputs to infer the proper kernel key that fit the incoming data, but users can not directly configure it. -The design also provides a virtual method `GetExpectedKernelType` that user can overload and choose the KernelType they want to use. +The [design](https://github.com/PaddlePaddle/Paddle/blob/develop/doc/design/switch_kernel.md) also provides a virtual method `GetExpectedKernelType` that user can overload and use to choose the KernelType they want to use. -so, we should send the information user defined in proto to `GetExpectedKernelType` for choosing a kernel. +So we should send the information user defined in proto to `GetExpectedKernelType` for choosing a kernel. The problem is, how should we define and send the information for `GetExpectedKernelType` to use? ## Solution -### potential choice -1, Do nothing, let the user add the information they want to operator‘s attribute and get them inside `GetExpectedKernelType`, this can work right. But there is a little problem that users may define many kinds of hints for the same purpose, such as `force_cpu`, `use_cpu`, `CPU` for CPU kernel, and `use_cudnn`, `force_cudnn`, `cudnn_kernel` for use of CUDNN kernel. +### Potential choice +1. Do nothing, let the user add the information they want to operator‘s attribute and get them inside `GetExpectedKernelType`, this can work properly. But there is a little problem that users may define many kinds of hints for the same purpose, such as `force_cpu`, `use_cpu`, `cpu_kernel` to choose CPU kernel, and `use_cudnn`, `force_cudnn`, `cudnn_kernel` to choose CUDNN kernel. -2, Pre-define all the needed option and use a single attr key such as `kernel_hint` for the user, this is not so flexible if the user wants to define some more kind of hint. +2. Pre-define all the needed option and use a single attr key such as `kernel_hint` for the user, this is not so flexible if the user wants to define some more kind of hint. -### final choice -To provide enough flexibility while avoiding confusion definition, we can predefine some options, such as `force_cpu`, `use_cudnn`, `use_mkldnn` for a user to choose. +### Final choice +To provide enough flexibility while avoiding confusion definition, we can define some global constants for these attribute names, such as `force_cpu`, `use_cudnn`, `use_mkldnn` for a user to choose. + +In C++ ```cpp -const std::string kNonHint = ""; const std::string kForceCPU = "force_cpu"; const std::string kUseCUDNN = "use_cudnn"; const std::string kUseMKLDNN = "use_mkldnn"; -KernelType GetExpectedKernelTyp() { - // "kernel_hint" is a user defined attribute name - if (Attr("kernel_hint") == kForceCPU) { +KernelType GetExpectedKernelType() { + if (Attr(kForceCPU)) { return KernelType(CPUPlace, ...) } else { ... @@ -47,10 +47,11 @@ KernelType GetExpectedKernelTyp() { In Python code ```python -def xx_layer(..., kernel_hint=None): - layer_helper = ... - layer_helper .append_op( +FORCE_CPU = core.kForceCPU() + +def xx_layer(..., force_cpu=false): + layer_helper = LayerHelper(...) + layer_helper.append_op( type="xx", - # "kernel_hint" should be the same with the attr name in CPP - attr={"kernel_hint": kernel_hint or ""}) + attr={FORCE_CPU: force_cpu}) ``` From a7bb983343a8fe9d8518a0b31388b67faf3f9320 Mon Sep 17 00:00:00 2001 From: qiaolongfei Date: Wed, 20 Dec 2017 19:21:01 +0800 Subject: [PATCH 185/193] optimize indent --- doc/design/kernel_hint_design.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/doc/design/kernel_hint_design.md b/doc/design/kernel_hint_design.md index da4856bb6a..a54b7da045 100644 --- a/doc/design/kernel_hint_design.md +++ b/doc/design/kernel_hint_design.md @@ -36,11 +36,11 @@ const std::string kUseCUDNN = "use_cudnn"; const std::string kUseMKLDNN = "use_mkldnn"; KernelType GetExpectedKernelType() { - if (Attr(kForceCPU)) { - return KernelType(CPUPlace, ...) - } else { - ... - } + if (Attr(kForceCPU)) { + return KernelType(CPUPlace, ...) + } else { + ... + } } ``` @@ -50,8 +50,8 @@ In Python code FORCE_CPU = core.kForceCPU() def xx_layer(..., force_cpu=false): - layer_helper = LayerHelper(...) - layer_helper.append_op( - type="xx", - attr={FORCE_CPU: force_cpu}) + layer_helper = LayerHelper(...) + layer_helper.append_op( + type="xx", + attr={FORCE_CPU: force_cpu}) ``` From 5b52481058088da18c90c920bc815181badbf534 Mon Sep 17 00:00:00 2001 From: chengduo Date: Wed, 20 Dec 2017 20:34:47 +0800 Subject: [PATCH 186/193] refine accuracy_op.cu (#6774) --- paddle/operators/accuracy_op.cu | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/paddle/operators/accuracy_op.cu b/paddle/operators/accuracy_op.cu index 539a935302..dd51aad105 100644 --- a/paddle/operators/accuracy_op.cu +++ b/paddle/operators/accuracy_op.cu @@ -26,7 +26,7 @@ template __global__ void AccuracyCudaKernel(const int N, const int D, const int64_t* Xdata, const int64_t* labeldata, int* correct_data, - float* accuracy) { + float* accuracy, int* total_data) { int count = 0; __shared__ int total[BlockSize]; @@ -47,6 +47,7 @@ __global__ void AccuracyCudaKernel(const int N, const int D, if (threadIdx.x == 0) { *correct_data = result; *accuracy = static_cast(result) / static_cast(N); + *total_data = N; } } @@ -80,22 +81,11 @@ class AccuracyOpCUDAKernel : public framework::OpKernel { if (num_samples == 0) { return; } - platform::GpuMemcpyAsync(total_data, &num_samples, sizeof(int), - cudaMemcpyHostToDevice, stream); AccuracyCudaKernel< PADDLE_CUDA_NUM_THREADS><<<1, PADDLE_CUDA_NUM_THREADS, 0, stream>>>( num_samples, infer_width, indices_data, label_data, correct_data, - accuracy_data); - - int d_num_samples, d_num_correct; - float d_accuracy; - platform::GpuMemcpyAsync(&d_num_correct, correct_data, sizeof(int), - cudaMemcpyDeviceToHost, stream); - platform::GpuMemcpyAsync(&d_num_samples, total_data, sizeof(int), - cudaMemcpyDeviceToHost, stream); - platform::GpuMemcpyAsync(&d_accuracy, accuracy_data, sizeof(float), - cudaMemcpyDeviceToHost, stream); + accuracy_data, total_data); } }; From c2b1ddb6a85c9a8f6b6f2a4d0ccde3acc863ca9b Mon Sep 17 00:00:00 2001 From: Yibing Liu Date: Wed, 20 Dec 2017 18:12:28 +0000 Subject: [PATCH 187/193] Correct the dropout_op's computation in test --- paddle/operators/dropout_op.cu | 2 +- paddle/operators/dropout_op.h | 2 +- python/paddle/v2/fluid/tests/test_dropout_op.py | 8 ++++++-- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/paddle/operators/dropout_op.cu b/paddle/operators/dropout_op.cu index 10c670751d..c31d2195e9 100644 --- a/paddle/operators/dropout_op.cu +++ b/paddle/operators/dropout_op.cu @@ -71,7 +71,7 @@ class GPUDropoutKernel : public framework::OpKernel { auto M = EigenMatrix::Reshape(*mask, 1); Y.device(place) = X * M; } else { - Y.device(place) = X * dropout_prob; + Y.device(place) = X * (1.0f - dropout_prob); } } }; diff --git a/paddle/operators/dropout_op.h b/paddle/operators/dropout_op.h index 84ad39f0bb..9f6c4212d4 100644 --- a/paddle/operators/dropout_op.h +++ b/paddle/operators/dropout_op.h @@ -57,7 +57,7 @@ class CPUDropoutKernel : public framework::OpKernel { auto Y = EigenMatrix::Reshape(*y, 1); auto& place = *context.template device_context().eigen_device(); - Y.device(place) = X * dropout_prob; + Y.device(place) = X * (1.0f - dropout_prob); } } }; diff --git a/python/paddle/v2/fluid/tests/test_dropout_op.py b/python/paddle/v2/fluid/tests/test_dropout_op.py index 4f5ea836b4..2483200212 100644 --- a/python/paddle/v2/fluid/tests/test_dropout_op.py +++ b/python/paddle/v2/fluid/tests/test_dropout_op.py @@ -47,7 +47,9 @@ class TestDropoutOp4(OpTest): self.op_type = "dropout" self.inputs = {'X': np.random.random((32, 64)).astype("float32")} self.attrs = {'dropout_prob': 0.35, 'is_test': True} - self.outputs = {'Out': self.inputs['X'] * self.attrs['dropout_prob']} + self.outputs = { + 'Out': self.inputs['X'] * (1.0 - self.attrs['dropout_prob']) + } def test_check_output(self): self.check_output() @@ -58,7 +60,9 @@ class TestDropoutOp5(OpTest): self.op_type = "dropout" self.inputs = {'X': np.random.random((32, 64, 3)).astype("float32")} self.attrs = {'dropout_prob': 0.75, 'is_test': True} - self.outputs = {'Out': self.inputs['X'] * self.attrs['dropout_prob']} + self.outputs = { + 'Out': self.inputs['X'] * (1.0 - self.attrs['dropout_prob']) + } def test_check_output(self): self.check_output() From aad8b223d63e640e68baab18def8e3131ff7802e Mon Sep 17 00:00:00 2001 From: kavyasrinet Date: Wed, 20 Dec 2017 14:14:34 -0800 Subject: [PATCH 188/193] Adding a proposal for operator documentation. (#6805) * Updating the design doc of Fluid * Organizing the operator documentation * Adding a proposed format for operator documentation * Adding more details to the format --- .../{ => op_documentation}/batch_norm_op.md | 0 .../{ => op_documentation}/name_convention.md | 0 .../{ => op_documentation}/net_op_design.md | 0 .../op_documentation/op_markdown_format.md | 64 +++++++++++++++++++ .../{ => op_documentation}/rnn_design.md | 0 5 files changed, 64 insertions(+) rename paddle/operators/{ => op_documentation}/batch_norm_op.md (100%) rename paddle/operators/{ => op_documentation}/name_convention.md (100%) rename paddle/operators/{ => op_documentation}/net_op_design.md (100%) create mode 100644 paddle/operators/op_documentation/op_markdown_format.md rename paddle/operators/{ => op_documentation}/rnn_design.md (100%) diff --git a/paddle/operators/batch_norm_op.md b/paddle/operators/op_documentation/batch_norm_op.md similarity index 100% rename from paddle/operators/batch_norm_op.md rename to paddle/operators/op_documentation/batch_norm_op.md diff --git a/paddle/operators/name_convention.md b/paddle/operators/op_documentation/name_convention.md similarity index 100% rename from paddle/operators/name_convention.md rename to paddle/operators/op_documentation/name_convention.md diff --git a/paddle/operators/net_op_design.md b/paddle/operators/op_documentation/net_op_design.md similarity index 100% rename from paddle/operators/net_op_design.md rename to paddle/operators/op_documentation/net_op_design.md diff --git a/paddle/operators/op_documentation/op_markdown_format.md b/paddle/operators/op_documentation/op_markdown_format.md new file mode 100644 index 0000000000..0ee804d592 --- /dev/null +++ b/paddle/operators/op_documentation/op_markdown_format.md @@ -0,0 +1,64 @@ +# Standard Markdown Format for Operators +The following should be the standard format for documentation for all the operators that will get rendered in the `html`: + +``` +Operator Name (In PaddlePaddle) + +Operator Name (Standard) + +Operator description. + +LaTeX equation of how the operator performs an update. + +The signature of the operator. +``` + +Each section mentioned above has been covered in further detail in the rest of the document. + +# PaddlePaddle Operator Name +This should be in all small letters, in case of multiple words, we separate them with an underscore. For example: +`array to lod tensor` should be written as `array_to_lod_tensor`. + +This naming convention should be standard across all PaddlePaddle operators. + +# Standard Operator Name +This is the standard name of the operator as used in the community. The general standard is usually: +- Standard abbreviations like `SGD` are written in all capital letters. +- Operator names that have multiple words inside a single word use `camelCase` (capitalize word boundaries inside of a word). +- Keep numbers inside a word as is, with no boundary delimiters. +- Follow the name of the operator with the keyword: `Activation Operator.` + +# Operator description +This section should contain the description of what the operator does, including the operation performed, the literature from where it comes and was introduced first, and other important details. The relevant paper/article including the hyperlink should be cited in this section. + +# LaTeX equation +This section should contain an overall equation of the update or operation that the operator performs. The variables used in the equation should follow the naming convention of operators as described [here](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/operators/name_convention.md). Two words in the same word should be separated by an underscore (`_`). + +# The signature +This section describes the signature of the operator. A list of Inputs and Outputs, each of which have a small description of what the variable represents and the type of variable. The variable names follow the `CamelCase` naming convention. The proposed format for this is: +`Section : +VariableName : (VariableType) VariableDescription +... +... +` + + +The following example for an `sgd` operator covers the above mentioned sections as they would ideally look like in the `html`: + +``` +sgd + +SGD operator + +This operator implements one step of the stochastic gradient descent algorithm. + +param_out = param_learning_rate * grad + +Inputs: +Param : (Tensor) Input parameter +LearningRate : (Tensor) Learning rate of SGD +Grad : (Tensor) Input gradient + +Outputs: +ParamOut : (Tensor) Output parameter +``` diff --git a/paddle/operators/rnn_design.md b/paddle/operators/op_documentation/rnn_design.md similarity index 100% rename from paddle/operators/rnn_design.md rename to paddle/operators/op_documentation/rnn_design.md From c8ef45291d8a23bbcab0e292df3eb876fc7977a9 Mon Sep 17 00:00:00 2001 From: Abhinav Arora Date: Wed, 20 Dec 2017 17:17:01 -0800 Subject: [PATCH 189/193] Polishing the embedding layer and the fc layer documentation (#6806) * Polishing the embedding layer and the fc layer documentation * Addressing code review feedback --- python/paddle/v2/fluid/layers/nn.py | 99 +++++++++++++++++------------ 1 file changed, 60 insertions(+), 39 deletions(-) diff --git a/python/paddle/v2/fluid/layers/nn.py b/python/paddle/v2/fluid/layers/nn.py index 73f68466da..8d819de603 100644 --- a/python/paddle/v2/fluid/layers/nn.py +++ b/python/paddle/v2/fluid/layers/nn.py @@ -25,32 +25,48 @@ def fc(input, act=None, name=None): """ - Fully Connected Layer. + **Fully Connected Layer** + + This layer accepts multiple inputs and applies a linear transformation to each input. + If activation type is provided, the corresponding activation function is applied to the + output of the linear transformation. For each input :math:`X`, the equation is: + + .. math:: + + Out = Act(WX + b) + + In the above equation: + + * :math:`X`: Input value, a tensor with rank at least 2. + * :math:`W`: Weight, a 2-D tensor with shape [M, N]. + * :math:`b`: Bias, a 2-D tensor with shape [M, 1]. + * :math:`Act`: Activation function. + * :math:`Out`: Output value, same shape with :math:`X`. + + All the input variables are passed in as local variables to the LayerHelper + constructor. Args: - input: The input tensor to the function - size: The size of the layer - num_flatten_dims: Number of columns in input - param_attr: The parameters/weights to the FC Layer - param_initializer: Initializer used for the weight/parameter. If None, XavierInitializer() is used - bias_attr: The bias parameter for the FC layer - bias_initializer: Initializer used for the bias. If None, then ConstantInitializer() is used - act: Activation to be applied to the output of FC layer - name: Name/alias of the function - main_program: Name of the main program that calls this - startup_program: Name of the startup program - - This function can take in multiple inputs and performs the Fully Connected - function (linear transformation) on top of each of them. - So for input x, the output will be : Wx + b. Where W is the parameter, - b the bias and x is the input. - - The function also applies an activation (non-linearity) on top of the - output, if activation is passed in the input. - - All the input variables of this function are passed in as local variables - to the LayerHelper constructor. + input(Variable|list): Input tensors. Each tensor has a rank of atleast 2 + size(int): Output size + num_flatten_dims(int): Number of columns in input + param_attr(ParamAttr|list): The parameters/weights to the FC Layer + bias_attr(ParamAttr|list): Bias parameter for the FC layer + act(str): Activation type + name(str): Name/alias of the function + + Returns: + Variable: The tensor variable storing the transformation and \ + non-linearity activation result. + + Raises: + ValueError: If rank of input tensor is less than 2. + Examples: + .. code-block:: python + + data = fluid.layers.data(name='data', shape=[32, 32], dtype='float32') + fc = fluid.layers.fc(input=data, size=1000, act="tanh") """ helper = LayerHelper('fc', **locals()) @@ -91,25 +107,30 @@ def fc(input, def embedding(input, size, is_sparse=False, param_attr=None, dtype='float32'): """ - Embedding Layer. + **Embedding Layer** + + This layer is used to lookup a vector of IDs, provided by *input*, in a lookup table. + The result of this lookup is the embedding of each ID in the *input*. + + All the input variables are passed in as local variables to the LayerHelper + constructor. Args: - param_initializer: - input: The input to the function - size: The size of the layer - is_sparse: A flag that decleares whether the input is sparse - param_attr: Parameters for this layer - dtype: The type of data : float32, float_16, int etc - main_program: Name of the main program that calls this - startup_program: Name of the startup program - - This function can take in the input (which is a vector of IDs) and - performs a lookup in the lookup_table using these IDs, to result into - the embedding of each ID in the input. - - All the input variables of this function are passed in as local variables - to the LayerHelper constructor. + input(Variable): Input to the function + size(int): Output size + is_sparse(bool): Boolean flag that specifying whether the input is sparse + param_attr(ParamAttr): Parameters for this layer + dtype(np.dtype|core.DataType|str): The type of data : float32, float_16, int etc + + Returns: + Variable: The tensor variable storing the embeddings of the \ + supplied inputs. + + Examples: + .. code-block:: python + data = fluid.layers.data(name='ids', shape=[32, 32], dtype='float32') + fc = fluid.layers.embedding(input=data, size=16) """ helper = LayerHelper('embedding', **locals()) From ad9790891bf804b52cc693630608387500ed5672 Mon Sep 17 00:00:00 2001 From: Abhinav Arora Date: Wed, 20 Dec 2017 19:33:39 -0800 Subject: [PATCH 190/193] Polish layer documentation for fill_constant ops (#6808) --- python/paddle/v2/fluid/layers/tensor.py | 48 +++++++++++++++++++++++-- 1 file changed, 45 insertions(+), 3 deletions(-) diff --git a/python/paddle/v2/fluid/layers/tensor.py b/python/paddle/v2/fluid/layers/tensor.py index bda017b141..e984a6be19 100644 --- a/python/paddle/v2/fluid/layers/tensor.py +++ b/python/paddle/v2/fluid/layers/tensor.py @@ -66,9 +66,26 @@ def assign(input, output): def fill_constant(shape, dtype, value, out=None): """ - This function creates a tensor , with shape as mentioned in the input and - specified dtype and fills this up with a constant value that - comes in the input. It also sets the stop_gradient to be True. + **fill_constant** + + This function creates a tensor of specified *shape* and + *dtype*, and initializes this with a constant supplied in *value*. + + It also sets *stop_gradient* to True. + + Args: + shape(tuple|list|None): Shape of output tensor + dtype(np.dtype|core.DataType|str): Data type of output tensor + value(float): Constant value to initialize the output tensor + out(Variable): Output Variable to initialize + + Returns: + Variable: The tensor variable storing the output + + Examples: + .. code-block:: python + + data = fluid.layers.fill_constant(shape=[1], value=0, dtype='int64') """ helper = LayerHelper("fill_constant", **locals()) if out is None: @@ -90,6 +107,31 @@ def fill_constant_batch_size_like(input, value, input_dim_idx=0, output_dim_idx=0): + """ + **fill_constant_batch_size_like** + + This function creates a tensor of specified *shape*, *dtype* and batch size, + and initializes this with a constant supplied in *value*. The batch size is + obtained from the `input` tensor. + + It also sets *stop_gradient* to True. + + Args: + input(Variable): Tensor whose dimensions will be used to get batch size + shape(tuple|list|None): Shape of output tensor + dtype(np.dtype|core.DataType|str): Data type of output tensor + value(float): Constant value to initialize the output tensor + input_dim_idx(int): Index of input's batch size dimension + output_dim_idx(int): Index of output's batch size dimension + + Returns: + Variable: The tensor variable storing the output + + Examples: + .. code-block:: python + + data = fluid.layers.fill_constant(shape=[1], value=0, dtype='int64') + """ helper = LayerHelper("fill_constant_batch_size_like", **locals()) out = helper.create_tmp_variable(dtype=dtype) helper.append_op( From f04f4f9aee7c223defe060f77b8abdafd4c90357 Mon Sep 17 00:00:00 2001 From: whs Date: Thu, 21 Dec 2017 11:49:45 +0800 Subject: [PATCH 191/193] Fix equation of sequence_softmax_op. (#6810) --- paddle/operators/sequence_softmax_op.cc | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/paddle/operators/sequence_softmax_op.cc b/paddle/operators/sequence_softmax_op.cc index fe1832a36f..b74766f012 100644 --- a/paddle/operators/sequence_softmax_op.cc +++ b/paddle/operators/sequence_softmax_op.cc @@ -50,10 +50,14 @@ input Tensor can be either [N, 1] or [N], where N is the sum of the length of all sequences. The algorithm works as follows: + for i-th sequence in a mini-batch: - $$Out(X[lod[i]:lod[i+1]], :) = - \frac{\exp(X[lod[i]:lod[i+1], :])} - {\sum(\exp(X[lod[i]:lod[i+1], :]))}$$ + +$$ +Out(X[lod[i]:lod[i+1]], :) = \ +\frac{\exp(X[lod[i]:lod[i+1], :])} \ +{\sum(\exp(X[lod[i]:lod[i+1], :]))} +$$ For example, for a mini-batch of 3 sequences with variable-length, each containing 2, 3, 2 time-steps, the lod of which is [0, 2, 5, 7], From ad2ab952075ac7d0ff59434b353ce5cba5d35563 Mon Sep 17 00:00:00 2001 From: dzhwinter Date: Thu, 21 Dec 2017 12:33:34 +0800 Subject: [PATCH 192/193] "small fix of Place" (#6766) --- paddle/platform/device_context.cc | 4 ++-- paddle/platform/device_context.h | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/paddle/platform/device_context.cc b/paddle/platform/device_context.cc index 8cdc5f4340..dacee74fff 100644 --- a/paddle/platform/device_context.cc +++ b/paddle/platform/device_context.cc @@ -19,7 +19,7 @@ CPUDeviceContext::CPUDeviceContext() { eigen_device_.reset(new Eigen::DefaultDevice()); } -CPUDeviceContext::CPUDeviceContext(CPUPlace place) { +CPUDeviceContext::CPUDeviceContext(CPUPlace place) : place_(place) { eigen_device_.reset(new Eigen::DefaultDevice()); } @@ -27,7 +27,7 @@ Eigen::DefaultDevice* CPUDeviceContext::eigen_device() const { return eigen_device_.get(); } -Place CPUDeviceContext::GetPlace() const { return CPUPlace(); } +Place CPUDeviceContext::GetPlace() const { return place_; } #ifdef PADDLE_WITH_CUDA diff --git a/paddle/platform/device_context.h b/paddle/platform/device_context.h index 56813a1d5b..6cc0508522 100644 --- a/paddle/platform/device_context.h +++ b/paddle/platform/device_context.h @@ -45,6 +45,7 @@ class CPUDeviceContext : public DeviceContext { Place GetPlace() const override; private: + CPUPlace place_; std::unique_ptr eigen_device_; }; From 863661a30bd8ddb03bed6d8c07912fc8a02aae92 Mon Sep 17 00:00:00 2001 From: Abhinav Arora Date: Wed, 20 Dec 2017 21:46:48 -0800 Subject: [PATCH 193/193] Polishing the documentation of the less than layer (#6816) --- python/paddle/v2/fluid/layers/control_flow.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/python/paddle/v2/fluid/layers/control_flow.py b/python/paddle/v2/fluid/layers/control_flow.py index dc6c0e7f51..7ed79968b1 100644 --- a/python/paddle/v2/fluid/layers/control_flow.py +++ b/python/paddle/v2/fluid/layers/control_flow.py @@ -519,6 +519,24 @@ def create_array(dtype): def less_than(x, y, cond=None, **ignored): + """ + **Less than** + + This layer returns the truth value of :math:`x < y` elementwise. + + Args: + x(Variable): First operand of *less_than* + y(Variable): Second operand of *less_than* + cond(Variable|None): Optional output variable to store the result of *less_than* + + Returns: + Variable: The tensor variable storing the output of *less_than*. + + Examples: + .. code-block:: python + + less = fluid.layers.less_than(x=label, y=limit) + """ helper = LayerHelper("less_than", **locals()) if cond is None: cond = helper.create_tmp_variable(dtype='bool')

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 z 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�=bgjlZ&P zQrXYz!x=(K-E?&6n+3}0+irMbRzQd5CWn#B4Ufsx0P&$&AeGu#vn1t8WFen+DVPo6b5w6RXrbz#8VD=vhl=hcM$i`D}7< zv=7w#1B-LnIQpC?xt&F^@HK9$ad7OcFMw&LJDQJG9G;h7yt@74=ik2lgRlQby5}fw z!^Lw@>1b&F@}(@0a$$@j$1+|f_>zJE?~3d! z)ae%4zE=rOJVh8_h~w`EtrarAtAJJj*m65^2@b|=GHazKJ|5^1K^C-yx0$3 z!emFE%IJoEaa#aRicr=CSBASCKI6id`?2ZydDHEM?k+EM=5vl%ik zMNYOS;DqK_^KfoBIa)or;iJxhyYPW?QH&vsgT-tv6WsGTDAByiN$^ZzHcYzxL^e50 zqpBGV7G|buLLa!!7hlq-KJ_hQIt9&@&^$OT%P6ekOC!5F$k=XhvARtLn)N( z`-Rjqm?U@lGCTS7WSQ*0Kp)yw9-Wgt-FFX6In$Lv`m|5$CJuxp&_AD*3_NP!sMe4k z;3#%qmVA_HM6rZ< z=T!C;s!m?a5XhI>&Vj&&VTO-D`PbQY{IQO>9Vg7_cOW=(4+UH;-PFnJJjqr>MsdWZ ze&A!IaW~_nMl3u0#qB+R;|B&CMVfs-DL(ehU+%xsy~V^+WyhU|6uvmzvERGs)GSQw z9!}qC9^6})jZn;C_Ht!(a7QO!Y>r#=)o9_h4u+F4ab@w4!GIky>t}s22(bAc(`T4b zkg1&WjX?}5bAP8>ec_YA06gs+T2DTiSB$a2JkCZA#*01r3(IV03-m;3u zxk|Blpw_A!7^G_RQOURZ8m;|>F}R$ULyiqMi2BE@k`!Y%&>A~orYJ|cbeOIfF-MXvW%|j zCo6V(W?Isn1)Y@(!Ia=NVDef7{~2CWrfP*)N)+o)aNeisy)EAq)2an~9)`;%Gy4QzxeW_WVnM-q> zyvwG}-Vdx*H++n{A9mFrs7Fg5@fU^|9@GiAyg=}V=o?>S@ux?99UWwv?D=FAPvRV< zZjX3aV9jh@i`e&sQckkwv{`FtwW_)o?B?YR42f~0dr=;7wVjaWI`=H+I%xbU5UEF# zL>e?&t-dfXWw>O?H+TuK2^<`_DZ`c685ZdH&J?c1CQuyUc$h<(r|)KX4U)n9IMmDh z0!}TjgEcY+T)RUw_U=It#ccHMIpe@K$6mXWA^y!h_)+SQ2>P?!idp(*ZSSuQ{0(=X zL5&HX6BT<*4$9fg>Lkx{%Kx?kKDcHI@=l+P!T}w9d%idmU8X<=@7RVm7~_?1V0X>T z$JVg7%jm&JdK%r-lkPCPduO)Id^0)E?NNQaxze&`DZ`=7?!B%-gDpmV^f|ot`f%xt zbDnK7D7F|}_qcD0;EBU#JEnwdY_d_t-bU3Ja&0oOJ=XU6mNQ34J z6

ch*lh^Fd-L{wtn70(4-NC^j=dZ7rY!4#Bo|jWf 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