From 52b1b090189392576b7127edafb0ae6d6e4691bb Mon Sep 17 00:00:00 2001 From: Adam Narozniak <51029327+adam-narozniak@users.noreply.github.com> Date: Fri, 23 Feb 2024 16:17:56 +0100 Subject: [PATCH] Migrate fed kaplan to flwr next (#2996) Co-authored-by: Daniel J. Beutel --- .../federated-kaplan-meier-fitter/README.md | 29 ++++++----- .../_static/survival_function_federated.png | Bin 47262 -> 51741 bytes .../centralized.py | 2 +- .../federated-kaplan-meier-fitter/client.py | 45 ++++++++---------- .../pyproject.toml | 2 +- .../requirements.txt | 2 +- examples/federated-kaplan-meier-fitter/run.sh | 17 ------- .../federated-kaplan-meier-fitter/server.py | 30 ++++++------ 8 files changed, 56 insertions(+), 71 deletions(-) delete mode 100755 examples/federated-kaplan-meier-fitter/run.sh diff --git a/examples/federated-kaplan-meier-fitter/README.md b/examples/federated-kaplan-meier-fitter/README.md index 29b2d2a0731d..1569467d6f82 100644 --- a/examples/federated-kaplan-meier-fitter/README.md +++ b/examples/federated-kaplan-meier-fitter/README.md @@ -35,7 +35,6 @@ This will create a new directory called `federated-kaplan-meier-fitter` containi -- client.py -- server.py -- centralized.py --- run.sh -- README.md ``` @@ -68,24 +67,32 @@ pip install -r requirements.txt ## Run Federated Survival Analysis with Flower and lifelines's KaplanMeierFitter -Afterwards you are ready to start the Flower server as well as the clients. You can simply start the server in a terminal as follows: +### Start the long-running Flower server (SuperLink) -```shell -$ python3 server.py +```bash +flower-superlink --insecure ``` -Now you are ready to start the Flower clients which will participate in the learning. To do so simply open two more terminal windows and run the following commands. +### Start the long-running Flower client (SuperNode) -Start client 1 in the first terminal: +In a new terminal window, start the first long-running Flower client: -```shell -$ python3 client.py --node-id 0 +```bash +flower-client-app client:node_1_app --insecure ``` -Start client 2 in the second terminal: +In yet another new terminal window, start the second long-running Flower client: -```shell -$ python3 client.py --node-id 1 +```bash +flower-client-app client:node_2_app --insecure +``` + +### Run the Flower App + +With both the long-running server (SuperLink) and two clients (SuperNode) up and running, we can now run the actual Flower App: + +```bash +flower-server-app server:app --insecure ``` You will see that the server is printing survival function, median survival time and saves the plot with the survival function. diff --git a/examples/federated-kaplan-meier-fitter/_static/survival_function_federated.png b/examples/federated-kaplan-meier-fitter/_static/survival_function_federated.png index e761333fe42c05e6261cc362e8c45f8a4267e413..b7797f0879f24a7e0823ecfb254265222090cb13 100644 GIT binary patch literal 51741 zcmeGEXH?T$7d;Bc?y-A3cEo}e6l{o;fE@vq4uS+!q$9nCYQ+kQVnmt>NCyEC2u(#r z2)#-dDWL|W1qkKN?eo9)>pR9f-Z9=U_l)N`2a$yQ_Fj9fx#pZ}-&eXIyL8cpMHC8U zsodF9Diq2*d^zXS!uj}*X+xzm{v&R8`l6kxrJxD zteVe!b8Apqp{%p+^ojy_k%`pEVd zWw8VIayvR~OUC(b<+fNY#7DtD$4(u*%bfMUuPHaZC|myb<%-V>DYO6g<;q9@?>8xw z|93(DM#KM~f?-?iCTZ7;&8|a_o7}jxtbs3!>A&yqI_x}nEo-P)a$=$& zUQGX$djted&cF3}T6AcSrzIiGj8-2b0W3*mQ_M^ zrc>e>Z@#Eo3zpwy?l~4T$P&rvjE;#f|9HLL^h1+YvSHWVjTTB478Z}I7dPMT9-7tM z&Sv)nyKt<9XQui+YP5`k+7la}?@_fIDiV`qguZ=i*ZcFpw{PFZ)taxTHog;UcC9dI z{F$gf@_nP_m|F4uRlA-)f4)7Ys#}NK9h1;KT5rjX;=3KunBmy-q2hwAu%2V1{oEX- zegFLP4}IYC0#Wx#C%N*r{Ac#LOT{8-84g=5)_++&>)35SlZtm;oQ(eJME$(Xril0N zm0~pF%A?g|hVcwSqN3_7hRAYVfg4*U+8KIwwFZnXyvZ92`Jkb41(EbX7Y?&WSk$<5 z%eB7aMRhqIITPIegp*#&s*JOmJ!Z0|M^kh1TdXRLvr^=a@&&w^aQ!5sC^Pk8l+!3A z_rTk`y46QUm*ddY)g{c*h*9_V_usJpvZvz6KHbcp`i;Ij6kG*Q`W`%Vh<4M%*Yvzd zt$v<&7na^eSj@Qe7@kn`N8Ow;eJ-a__;_t~+$A9a0fB3Mf4*a#L=mBVwaK!lPoHM8 zgIx|gavGGx7GHTl+4ALkqhoWQP0KIgojcE9c?wEO5)L1|np}IcRN}Saqs=l+?L*fS zFCKOsv$F52t77y2Gf<=;k`+dE89mB4bnxIpO7+&|(qpd`taeFAXk*7UN`k3=FJE>h zUAM8ZIo54=ly4$WX1e9yNd((vy)n{6)%Mh_p>tkI|S*QSRw&%BpX-4Ga$EAD#8-<;!*F zU+zEd*yJ3sy(=amyL_;nRh4Slydrf;%RQ{d7uymld*$RI|8pBeO`nq>=BLsl5f#OG zixw^VfWsZ9o24x?IdH3^BqSj-GjoH5=!%Pyj+{y#ndwd)@5hg;5G{7!*Bjk_uYRnJ zRZ>z@=zl1PHUHM}A$Cd4>9w@~D(P$YX@~XIr%Eyc4x79Uai5Tj2&S7V_1v*MF*5Gy z5lrvi!xnw>`EqF%x9L*XD8gZ4tkoxo)jrY@bIyP|^c^l))z^Dr&MM+NhCfFHE)MjrLs<_#9-wdXc^t>9J_#=E<1Hd1ueNOKYcE z^bJnT)&Jsu)}ga>Yt~5hrQ-HkbLL0dvWxvVt8orvsGs$<1Uu+KE^1uxL83k64Ecci=&nDJys~cc|s@=ehQM;;Ff0 z;>E(BGm=)hs(qzWE?&GC=_jN~ry135(M!_bza~k*iCdr@MyY77}53Hw`_0Nm9uq*PwCJJ`(Eq9nq`@a zDJPYcpHB0dXCxS^Dk_Ja27U>0dn%)zZ4k5QO)9Sc)QFrjJX9hh$taQRmkJLL7iXYy zw2gdq;Mninv18os5Z|#z2mF$rn~R05gmKIQblV1wQC4g2RPXV+8{8;|mogsN%lM@_b@&fnyZ1IUG^>uAIaF+`HR{mGNitwvORc9B z?Ab{9P~WG!Jl8hi(7t_-OEyqK9<4j@Wjv?RqGq_O;^fZ_w*_|2I(`=Q@27rs6O(S_ zhEJfK;Se`H*1EjCy?u|c@CCPtVdeg&tdor&-a8^;UvJ9Ps{eSsqAXO_FC--4_U*Yl zcI=2kKJ0GF%6R+s%Z#0-!_LyP1ND|UCI|vl&z$Xk!{0lxD2Rg{&+`9!Pxsy|6OTRV z{&ZuGgzMP*MT-|BxkSF$cPUzdA#95L@TogmF2kX(9N`-l8@t!Q$SB5rYQnT3Es^Qa z7rktg#N6-;Ub%0UZaiX);FoY3c>VV6+vmQ%Z%Oe&@Gf@tuKM!jMBK&16CRU)yzqkU z8IAGJpZ|y8JLkq5_4{`9PfUZ-CYR5#HHOJ1c*Vp>jh>&M-;S87=(e_Nc;mtdEjeYE zlA`duA*5Yad+v)57+CDY?5);nKy6VgU65U zgKuGhF6py>tv_U#wwHHs{0yDWG%R}6uA__4eemGHf2&rhcDWn4^dWUeDTYWN3@9S6 z>v*h#B8y|JW+INd_&3faEC**+|My=f%5z13&P+U#v7nfk=16yyYVO^oRc}u(9^o`z z`t#?H`U};Kfk&-RpukKZ;K&E|KetoVqTynkc8Ur%Fvc}u(*D<{Sq6rNrZw?2!M%Ic z$U89Y%@CH@XyM)V8ec6^&3dZiCdSzzLH(&^#?QZ9RR+qpLzaoc(cbD@^6=rq6!Y4H z$m0qNmhnBQHP^t|sEknDjFsK{+P=2W;d*m6EoW*pV6?A3A~29|{gU}4K+r5ma2ssx z3-(0J{ZQN;9i@*?_y)%$aOnHjN9zwAHYpD?WjtK?n{r~ekPvHYe!FFNWz_M6nyd?Y zG?YQHwd~esB~Fj##M-rM z+3TqE5Bi8I=~N*qmAa)QL29|oq*Zudd}jiRk8pc$T}n)OURF!bP^>x6|B#Uc)2>V9 z3UA{P^G+w=M!xa!ap}}#HROfXBC%$>;qEHdm4p6*ZdrhGoV4~Am-vJ<;WRj@5u7b@|3l3d@=k!;#xa*FLCS;ZBv*s12S)q#B&%kl0q5&dhN-$nqY@^(Jl2mK%9T~Zs z@vIU#@|JEw>MqWMx!WjCzrX&I_hjoy!Ks70v-Xc6G-%Z!4s|B(ZsOz@wJz?A2yu_D zw#^*x2$*8Nv=;N2c4gQA^|b946clv4#NF~v#Dm-D7@{b1Y$1i7IthSeO#yd93vR>?)qW3xUH}$D#9Gyo2x@j|R%1l?hepXJ-x-dwxrbnV+@hBe( zhjo)P+nL73#_PuYiW5OH-z3&xb<*#+J2$5#*Guw3;8Eo(=}$LMbW%+H@*e-km6`3S z9uqg~6QVWm>-|-m%F4>5Q^fb}E9$Ye*45SZs}c5_LdJKQa&`SvrKy)*NuUYu1Bw=R z;VYSuN>x7&8k!!PrIJ^^%w_8vG&?@aS8FeNWfbiEJ)AQ!(!+3x8*HALuIaCt27({y z8d+{n8317R7K%^%5;2HQOTQt_TDLhex>H;l$U?nIXYZ6*W#m(RoFv^UwjyN!DAHy- z>hs71YE@H=!?@YE2dll2!=0sW&kXxu-uT^oT`6=a6&UaKib3Bi?%Mzq;l)qAzW%##PiR>rkY`$KfS9H3*Ane($+d^C{a8^HOszL? zv$Ol)>+37^aWhVScTGaSPE(2*V-1$wHtUd4v7P^wc;u<7;GzMXdq=HcQL`6V*cMxH z)rbrBS_FaUUf~2k_}6qJ^6k!@g1}o}w!R~ch-UKaFJkCCPTpNoM$Tzcllc+Nqp==% zR%Ul}jOzwnF*FiO`Hm`~RLZ9N1QZ#Hn*V(Nh1<+vnwHN@b7g2Y`8(=TEkpA3!*jI@ zSo272Aw6z?HZNXpq@%43hf8?y2h||);`5g;FLI=TiW8pd??#o&-`+5@0y3c&z=eKE#e_t??w~~ zL>L?;ZC-hK`7pxIkLTp-nt4@UpITkt=a7XoyFtq7z3sw}3H&a-2d1#_4sy!>tzNC( z^2c^;;0lf26)rr!YmPy_?~V=F%B19ED!))xM_ey;`8%ZiF65fB5RYjsi~5FyONgPJ z=U;`b)ph#JW)2Pwv8V}hD(B8UBA@8otR(%sWu&?zTt?HIx)-)5cDqmWIsz;w1s6Qs zGx_Z5*56AvOY5MV*l9W9RQEg-$u13YY>HwDXB75lUTEn?>s6VMGc71bpc5yHtGkq6 z>LOAEbIJT$IH)NWjS_5zskwRV86W;Q(tvAy2OmH)qz~S8c~V4mV*5zDO+=z4EzZ{& z92^|(iU{dOmp{OK6e{aOFPz_ZzFxwlKOpp)t z&(~G*7cRuVr?zK_P5=C0@@#sVo0Bn@y`u~K!{2tQvQiC@Egzvodai>850Lvd8M&_w zD0+9vGD{s*TM4n{8tu~iGqLXdm0R1Rj7oxE?Z0w!{*raSTsI{rCy!uDIzKPiTsb|( z3*xzrwRkZRQuZx()@ro+YjUbDSyp|yvzS&*fa-Fo0Z&rLC(SpB+nfUas(Pj<9YvbV zRL~o7-yf|H#d6dMtSbZlA}v#KJ9$8~(YC_Nah^4GtWSRmsj#o1v3+ao2ix+6+3&C` zm+%hUpZ%4pig8K3cygg#yJS`5q?7-&=JkA8EMhm`29+o}-Igt(muj`PK>v_h$Z`)r zt;hV-x>i|TVA=29n_@r>v3VA$^(pRCbT`m1bg()>>>#{1GO4n5rjzv@F(t#|z$nX{ zscM5pAj$;m*6(}v?K^+|)nV)S)LQd86ms|JaU(ZgU+ODKM+>Fd+rt|Y1TyScc9`cy>}vI^`?yG`yGL(jd89FIM!@6@!jQ*p?G@(Mt~4gb2eTw=2s zuu8D&V7?&N(I~lgI5lSqx#_x%R&%1hY@^4_6!Z53p+GU#%tVif8v=_yn7@m_Y4%6L z0gU}=9Rcd(4ZCJfja~xcmRHH&TexcHxl&}SaPLi$1()~#FihTa=#Z+S)Suf5rQ={t zUIA7}kNvtO&$4V}rqqaS+qBHfB5Op0@ktZmWe*y_6d1X?Aw9X!FnI`_q<0s21OV5= zmQ7L#yORFo;hTr;I+fUt7ot`QoH0gOlRtl69kt}p+CFq(eVP8qi`;Q)MhaSO5EWry z?Q~EDKFVh2;{8a6MyLbn$$^tbE4Zjw8xCB(?LN`9i%}D+hD8htX$6x>@`#-@4v=Ic zs1)}U%|%5d6$>0UNVcuGM*VTk#V3ra<2H09!6>Gl~yyy=Yk+`n%PKyh?S$)8%IkP#={Y$qfJ zol*2IF5&e#g9Sp~tA#Y2Xzs_4-)Mbt$-+9Sb+|&2Yr5NNzZWHAXxFX>xhwfkdMeCV zfB}&AYPx1*B*{cDC6$1BR5##}SYu3HP|1HEfbek{nM6k86UmuOYW?;3)@lpY#y3w; z(ocG##i0)FI3p`7iQ_+`&TIz$|Mhfv0`RHdG8g-!g8Uld=vL&pJWzX5cXusce=w}v zEm|M&lmB{eb52exqG2`X8L)gB3ar$qOS_+DbZkk@l~*@Zf`$}MH~RzdW-4A^ShMxh z4Rd{ab@q_*s*|2GLm@LxI%4E7sdG}1ntcMVmQcAmck1;>QK@gT&fBD3tsEU0`Qw0X zN8#(RxlUNJ>yo&Cs7@>x2y&U)AzT%^;OMLQJ9ShE#KOgr#5M2SC z)(>KXFT`!sKi4#cK9xz*7o#N>pq50JAb0WUX?d^Q7AFuAR9zpWOJ;eXx2zApeb~Eq z^jt5o58#8$LB6F8DwfNmsR6 zsmU;Gqh3jAuv&w6CBA*G80oTZ_M<1*pNh45uF6+La&F$7y^qFJ!zu+59<~d-FrgPk zZQ9Nf?tb;M1xpLE(ot&!Wkg7M0bW)RM zuO7}D>2KEC>^A(A#gv&IJBiOfl)iLkEKg<_tepn){KGZ-bU61Ec4WOR$li5h7_?!= zUdPVT6DNTwDzbu_MU>KchQh zg~ODQJ@$Js!*&#CArjftCUpj7J#a==R#vk%BPO=9)A;cQ(ddRN0aYos>K zCJ{j$w&LJPY~@n7sY@+Md;R*DS#_+nFoR1|`zZVCm8h8@UopE$RcPzh<6!7T9P5wY znr|{T(6V||es9TnvBtK8iz6E?9J^XJT(}S{6$NnDWI#hLX+mnXak21|2a}9#B76j6 zgwwpE$++z8oouus4E{I{;EJwGpD5!x$dh3tiwPaQ(*^vNDsl;94t;gbSsuvLl{p?W zo+%NP$QC2hy#9<>m&reQ_SjT4X0ri<)?w>YsDc7ribhSnOVl$1Ny<4a+!+nuRCM#^ zH_{r7MtU=NZvw6$Rem{vPV~doZ;OC-KgaZ;p1vkzYHEYc!&gVHM}yYV1qHj*MrckC zY8%&?>B#-`(&bm|HbCt|hJ}$IV!Ms&K131h!mw|ezwOBNx-k2mYH6#Q5G1K=ql4HC_iq|B^wF9 zEgK(<=xvOVazHOkDmG2p%VTPUfyQR_fWzGYFl0W*R%~nDXqnmK>*$C=&de2^7w>Fe2&$77p?`P9q-Q*t;D&e2Q9DyQ!Z?>v4Lx=r>UdUd+u3F zF_rQYlxxV%`AzEpxD~P!t+J-a5!rTaKUT7n@~@SX>RiRs%5it|;rorCiW;y__>o*9 z-Q#;9Y@4;UwQ!!d+IY&NgocV2W2-8c-9`CMYm+svi4V#fu|FN3HL4w=>Zc})SYn<3 zjANaz|I;SzpUT9#Sgk`01MblFZsFOU3pWB5R3Y2H#ktGvIrdu3W~~FL@b1z#w{W)O zwtU=g1vV=7^Q{HE%w~W`9pRfVMD#emGSS;m;2ra`DgZAR*_Ms5sIQN@P1qTECl#bE zIIsY1ebpU?OoPi(CVR=vnfb_yATsG$Zq3E$2sQvSAci&od5o0JE}uL zVId%U-X_N}weR>N?FG_(G(-+?A)+-pts`?+?tCT(O(&kkENBw*C<>8jHb@6ID&4+8 zir1S=rMIRr*58j$?|AikIR1oFfVk~D)*zrwm+kt{GmmYw;&*qdJAD0uhso{u9>Z(f zVPM-c0f^pc;9Q$z(5}l$%Q>@pgtFJ=(A&&F^JQKq@!oMCmfiq*bz=k=ZWOZ^cJY05 z*+xcF551rC)Xp?iUn+gpgw3?#g$vd9RtjV`H8ITA>!tgw09}0jQ$hSPZeSxi2-`c) zM*WO{LvC28gcs=Y&@(|?VV>#Xs=xMD=ep*!*kqsSeEQG7S9S;r%A@F1p)pUPkC?iR zRB38M2B?nJQf*gCezr@|lz?b7VnpS9W%51*4cR19lJ@HC$6iK1HY1wvZfn!V{yMXS zrDKilNH&IYd z8c=*iazFhUS-?UL`UY14L3VbKk+5j@dZ4_thD zAJET%@M4Lte*p3w3wRjm`w91)O@EnckXAxt$$i2l0~Zkem1W>ods!Dbtsp2e0!4*D zz#*!j$a})3Gl!jo5|*kbYRA=~@Pna=1Iyap(ZL)p6;wZR?{bPZVCjt~IgkTOs=)9L znRwj#{2K3)UU;~NHJ)SHoGne$n>!>~Mh*IgzAS=p=GcgRj(0m>JppJr@Vv5S+0t9{ zm-?0&4@W;craszR8%j_h3EcerJz{P*c<0NMba^#xK!N;AxWPV=;wdw0|J$ZP$U8lE zWI(j6)p&M774N(F{`HsmLLchrOZsr zC%vTZ4$TeassX^FyJa_s&3IjI#ZKFCBiJypQ22%Ro6qgV+Y!L zvkC(_?HW5@_6OuN)HjF9E)QW@H5;*ug9=!z7>&zY8r0b?^HM4ZQl-n*B?2~MD)WV|K`!97y$}?@w&idPafEAhIaW%n-yT<1*8*F>jBX*f1ApM>^`4xCW zTkxL-zoiuBa(3L_wbzlt4^b{kn5UTwOLBE@Ak*mv4S@t0Y4O@@ifXN$?dp8Td85!O zi<)DQFl_wuH5V0*=X`YEHQHHrl6-#Ki-|>s6=~M3!wt42Cdk&z-XxYCC!MYFYU6=Y z_o)$0c40MIJ43y}f8}?C{6Rx)jDASErr+u);WoN*m&^QxGc`T5iV&XCrWg+U^8=eF zZ#i2j_q4a-fRbJcVu3x#b~(ZIFVGK|o(#yD2GJ&1mp3NPuW` zc*UP;v)y>ZphkN@b?kBEk<+(hmbxrIigXkOns7~sA0bMJuNc&KAJKvm5H}K5Q;A) zs-y3ZX44eY;z04@jn9e##56;s-RuB}qdaD&ao}uI>RV%yjw|ayMH%U<*ChTBTcX$N zl<$kBWmLCIsq0SXB>DKwH&_f285xYx*XS~jUNPr7ry(7sL?^}N;GKF=CFhWgV}Ubh z{oAdMW)>*(Sv22A%o7euXK)s$DeF>+)X<|~=Z^LMMTS9cqqQLaLdq*D?7^1I9dRkn zN;SonWzlJkU~B5wlwYVWgzuOLtSF z_uVa0BcC>4Kj@PLoF`?-jWPeSl$&?cUoy_DCSLgDeW29gKY5!O8GYpF4JKW?cFjq> z1Uy(QuRkZJ&M|q+W(l8%FeOX5Y58nDkL-o@Wj|T=2EA4JIW^&# z0n4&8g;SL6vo)0@=k*+-)jIZ|u!rYA+okEGkDTK+0jbswB`*@SMxyo6q2U6dgt^zh zTSZ-a!A*+3#Ne%H*rD(uO-Ce6Pfw$2&ilPw&kz?a^`$dzGgDmAYd@ZNF414|bw%MZ z8=0AnkI&>3n{h(U2NZSKD<)d;F7zTrlG1VIffo_}bkbEwk40!iz>^-r-$19kS zy~|#-JsAz0mY$jfNB{5&sL^ddo{H9ed|)UTj3!#4mE& zFDu1zCcq!jgU>`rrw0!oA{cb0DU^G2r=S?`c*sDT|Ve<_ieRir=O;78G`o%5IxZ`-@h+yo!GVR*~2Yk070RfJtmdmf~kRJ zK)dU<86>P%fD}x}{&;ji0@v90jtL42S9g|$Qt6wKd~(JAHAhgA-U9mzrJ5$q#WA;f zoGQ-eU6q+B#W3)=m2yvN$*eP{(g0(m2Aj;Av#G`-cP8RZ7{atlXhv~b$!ApZ8#z$W z=u4)omuG{@Y!J|sdrbopAe0%-^A5kZOyHG=;270R>Ko>GwOb$Mqj$dX(y697wcMF# zd#0GVVOpbc^Sq~fD?_>-JQowNOKaaZsHvjj%Sy^gzXkH1lf)OR^}*~W&urT`mzkEc zQ>D+H_C+f#Sh9OIx5SQseABAv4N(~Y5JZkdxJ00>Boq!F(RMoBqnQJf4ZuVxWOb>X zm67pa<!0*%`TyE?m7jLVpkW;y;}gusEThnYDsFZixDn?2 zk4CIU3^{}J8Lho*MtWQ{RDFHItGosQ77fse&7)FGZU_*^i$^*7IuW+v2fQttmxkOYw}HoZJ<$52;KjtZ`=X>1QmnMqV7T zY>FlBGeR8$X6t<9L4ZrS{Q0J5RnIhkUt>m1LYZiGW&-K(S%X9&v>#B69xriA%xS=%(Rj=2b}EZ_4<+9!l^q2&fCkBEb|iBA})Wk zJL*;ep1QSxpr58TN6HJ{&!@0nwCHLW)EE=KUEzI}^H7Jx%;Zo^Y=)YKhQ`m$F(4LHz;Dp1=l!14tIt`L zRTix-M95Xb07~sVK8^*QqoIftp<}TDnAQ|V3TeNm3`PVZkDisqOZnR$sk(`}^=%f; zi{^EM5F$z00Hl}H&xn_}35Vve$M;qsquA6XOi1044Vc+auQ?8{JKZ`@tB zsXHm&ToItlasB%Bq7Dn}pg@^I-L!R{nVu?MKSH1ceJB0Uq^7TJN2>}a*FE~TyR5Lv z_MJPKnW+HkLs6Q=NEEruwLZK%6<|08W2!a`&>M_&mkgV`bLd=7U-`!L$jGx;yP>E@ zsB2CQdmQ@HRqE4HXTZA*q(35_NWT~NXH&+&gQO$uEy*~0&*9*qp_mmTG138YIvO7JtV@BLX8 zp4vfjy-^82W98EJDlHBB1P@RSLLncyvRk|>py|MtLZ5a#%EwRr-d#SP19!$mP0n zM|uB{5+85HLsT&L@&@O0pd$R{ix{Ls5%Sv^mar7< zd1q3lNySc|;DdhSAa1B19Yt2nL`XDyp|yy9dL=^C&AfUiO01)nJB%2)reB1h_Z}E7 zq>8(38Rj(B8>BOnUyq`bGkAVy`#$XtX8~vIg}FU7B|RHs0KaUfbI|no-0w!G5dpS5 z^~+R@?UX(gh2IZF5W+dLtpk}MF`#zLLg=>c=z96Z4s_RzH)k!l{MsiKRVaOL4l0NA z()5{rkC`4-x2o}88Jr^NkmWHv@nv56DZO)_sN|pB!2PuIFSC&jDaj0F(!JkfuuYDf zCgC0sW{}t(EaG+%T5u3;9=mGo*Ww__5zxfEn$j(4usPFwnJ?x~lls8$G)Cl`NsY(2 zSS8t=P2vqSKYFwzfwi|jM#+~b8VU59wdO}?E`2F04{X#v-5^t;`tIBx(;O(8&V|u@ z7Jw;{TTkAFw2jKGpwfBlC|puHFWj=sdVL6qYT(@R7QvxsY(C%f6Lt;#GYD5$TjV*AAt z*5=h~psrZ0Z_2)sJ0EUWw^<2!&AJSt7du~SY%V#L*5<3A^P+L6XS~4th|Ap7%}%XL z8J?+PxgH9BS!Mpuo`q`axmC6Q0bQsm5kMMCofjUwKCy&3`lx!wk00sCojYeImqV-u zPrYIVA$U6EA2LFBU4K2**}jzu)vPto$5E>WV8(}=_;J87>=tkQKxtn6U$&Ee1-Xlk zUM#cD5qMDexSeI19?zxzqy_wp?v1}3JhB{Mrm5)nvO22KXn9i?9DkMYs;9RoTTWPD zvE&sLDu`fHBF!s|;JXMdrUDFkuP^U{@0rIN+O1~`v!=Yqi9wFYIps{e*&Af*y|Hxu z=QYWHeLh9+HyU%OJi?ix|LuVuWFJ42Vsw=-WsRdjl8&b3VRA52AiW}en83r{B$mC# zX677l?j@KGV(mg8LmGo(tdf7BtIF>&Y0cnMOixdj=+7L=%zjb`BP=w6?gNKI_i}Y} zA@n(v>II;cpwG>)0Cg+qHCseC^WtAdss`X`Ltod%bA%md4I;6@JI;(Q4_*S(9CM;O zCdH;*o-qQuK@JM|rsoc4ZVDx2mWStkLDdfj0U1&5hW3@{R}K0L_21wAja&)5)@!|L z7-~@!9OND9TT<1a4S`X1vj@-JFn1VOr5xflyL5HxvP5&|rkQRVv6V74|KwR$bvpA#LwGPf4_D26l@li#BX z<7pXE?j<@_pXbfGt_e6tJu@yfTzXQy_{b#MuTH32f6}G7hxcQ(F8hfOk|VfulSE}g zQz=nTekm%M!i*w-w1bH+81uPD>D-*Z^;ZlUh z(}fajeL0Oi%0oKS;Y|B6gxhrm+{r%EK`zMZZY}tRPki_HqwJ5F?#B++|l@QC&X5V?pC@&Tvd1!bYQ0>tj;Op|@PX0D|VlJhVPt zNtpzoa~iaeDN=FNc4WaJCG26Kr|AJfzbn*7+NNt<8CGHBUozqW=SZi6 z^q=L>Xqwv_j1T$`gPl23cxo-8x|{&EYB$j6grIA3=UrzU;{a@kf*uCde;zr-rj|_% zAINW}VMQtG^70R0KkrK7V3R9}epFa^jxAo_V%3STsewC@NX4e@1%3zDEfFox*!f?c z;dL7bxX!~iOWO=P>N-7d5Rsi|ymT5tRf}QY5yYZPbCx zSOp$VT}kOzQX|}0f9(gvt+VhoP_wbkKwY08?zOvWoaP)of`zKmZH;`I=RjXk z2oJsSg+^v+pt+HziildoCPQ#P5{Jz{<`~B50Rvc#eT(KaX7s=$SDg2|we?o{Kfms* z)wRk`fir<1&NAGo{-K#^U9SsuuQv2I9Q~&uVFNc^SJ#r;_SdsfQ8dU z53zMa9)WN0H5lbC_zbF`Y+u{IF7v`6wHG}0*vEQ{3Njue%kO-O82R$pKWV#ts^HCK z2Idj(uZi~F%HzwneBG`-4$YA&i(uh1OinNFgXdrq=mTza6JeY#>VoJDMebepEWa(O z>GJ-g@6HEwq+#Ghr&=*cBBh+^+SsIt2X()bkdJIKC3tAXb!qG0w*{o7v%h?FgTN)t zNQe1Y7Hn<7J`q8|f~SFjz4z|l|KmhluHKmAp~oi3lY~DCo9S?RQByR>Y#M3eDCUyx zHW#x^qek=33SfBvV~#0%}$4mm%ndcJR(Q2l~j*oZI=V6)5mebg)L8_V_S8%>|AZ z+NcNq?N-;kR$N@%FSvg18ijB+1J1ak$ngI;l*Gh#^T}ohvjlAiejO)kCn%MmVRw#- zDF*2rhiQI+D(aD#PziWaxs5Q%u}0CX4@L)rcgO>=F6c%>is#GE&-d=^?37Ox>Q5uu zQaJDH_wN$K3Q26S7PiP&k}v>dy7##PgTZCUc=}X1ZjhL;vVxzqt;3K`NjuH;&$sp$ zXj3=sQVfo@nE^3C{Ku?)x!9`>hmC*Td-!n3X|IGt-5*d!6Rz2R*tQ;Ufyp8TW=d-a zO)MjfJs*hYGk1u&=_q_;LaviZEMeO=&RX6JZ1_u^}=ylm2H>jBpHU1Bd z&fHikhbT~I&z_C^;MShfhrk{fr#nJhS)IKG+VbjYVJEEP6x|1qk1Jnd!13UiPF&pA z^H{9Os+L^S4XCc>cVtETCi~oLyBgq;&ZT zyn7Cv5l$K@8+#0ODMPUyj7q&iBv}v4ySR|1#Ro3--I9{^?eW&Aw4z4Ed^EeV)1tM7 zrv8A8`1J}w^zNv3X) z5ko)Blb6IA?NrYnPCkPL?hLTZE?X+rpk(oO3TjUf95xMZ7;}pUM@HnK&lZNK;F3us z1(o41ub>sD;iF$*e7GAueQa5a{TqoRW{V$wdrPEVNKhJAuU<{BZ)w{n0<#Jm?-H zs4-53gS3xs2K9#f*Ad@x_aOYQW`;@;~vh>4$ek@Z3F9EH7O$K4ZGtrI4Z=k92^yi?vWG;46%{Fp%)(3 z^ivQ{KZQJ3^ZrV1!O~Y}cbx2jk?k!AncD^fih|>bmzqj_G21nFM~%0L;Gzq<;Qah{ zX2utyEr=NDslk+6XnBJ!MyR4;$&!oH%h5%!jl{&)?L={g;jt3XSgqxoKKLzs5DB8{ z@!zj7y9I~u2}y_EQZfeE;cujo?glBw4i%D=i}*oVxz_KGF-CO)MN8@1-uI~Y1|(bf~j z>*33mQqgc!G=iKgm|gGWONt-@)nE#ZI#@jK(r%xkx;8R@2#Yn@1(&w9`xH%@KBA_O zQeOvx6Qzs#5l|z5P)tO>$Bf{yJIB8#!T1HbB6{B9HJyYuFb(Ox_uzre`azH3PGvU; zVO4_3Z{MWfSVEcb4Q_*@uL|Cq5foO<4S`5a6_7dJ?z{A{a%^uJc(igz2Zw=8VC2)L zG3}I*{7cd=Vw(~`HkqO=VWKG%YLtGwo?&47F@m0Z?V?En$4opkL!);b(HQ4rId zWS9ri(d>z=hrd__1?50Bf$Th3>B$EJlE7$B5a{wY&CA6=@W3K<*=`w_MUBB{U%h(u z9_%fsO@dcp4|}ws|BgLu7?5epYghe&`7_o*_>+~oj!rDxVq_3Yf<7Dx(h#tvDoS-1 z5wQCMVq3al6ofjNK0P_4h;TRyvjXNp{_ja3M*gF1$_@@6NjxCWb%B?Ko~o**_8eC2 z$|M5?EI~>gRU{@fE$t%MlPb^>Wb_J03;`-ADw1zVty?f?!Dde7kQ@8(FwbK|(g0DRNC_Y^Y5t>dk2vQaX zBb!6V)gS|=VZOQroa9+^{ypjW_eJ+SW_ZoTS4ev|GhX6xqG20lVLUnQ>oH9U_UYj5 zxZ_6!DCAOuE!)Dv!qUzi-f!D+4o@L;d*5u&UwZ@v%NL7e{?Z{uv?@U_XT`^bE&sdN z!1JCp{K*nSZ?xj7O%?GDE!_nA<570_og3x?THg6UU1<4#KK+u1-+q@1bO6Q-J;f43%k&Obx zePcmxvY=4xzk~KdQY}#uo3r)Pipzh$N!fCF?z;cI*}cpETP+I3bKx1v zivOQ~bIt1Rzt3_kOlbG+QlyXPAt53GMQge{D3PauXW``o@_S7dfhist{=cg%jy*Zb zx2zAXOrFo?<@TzSN)?zO?%cTpVMYURr|N@=>iQ)Z%3qwaPIG78z8zaX z|C5VGOx5@dlILo0?x1(>ygwcJc&vj&r{@;9Jj>DX2C~Q*1JJ*A(Er3wK}yPFX#eEn z;poVbu*NyT%UAt=@#e^tfB&w_!kg$3kIuldqhVun@Usj>8Z*$vwr8V~*lRy+{NFNe zSqKyyI0OIY-S;~v+m6=`ovj^O{A=lKPqMNr=Au3J-G1xymgHK#-_?}JK2#*zL7#H` z2txmVKLWW*C4Ycw*gIE=hT#kUGp~myXFEOo|9G><-KX$$5Z}+M!zR9eP5x+ML8{XzpqNsL$OT(B|%0DL6&Go2Fy7&Oj&Y?6id)-d>;la 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 DDOxn3 literal 47262 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"] [tool.poetry.dependencies] python = ">=3.9,<3.11" -flwr = ">=1.0,<2.0" +flwr-nightly = "*" flwr-datasets = ">=0.0.2,<1.0.0" numpy = ">=1.23.2" pandas = ">=2.0.0" diff --git a/examples/federated-kaplan-meier-fitter/requirements.txt b/examples/federated-kaplan-meier-fitter/requirements.txt index 1cad920ca048..cc8146545c7b 100644 --- a/examples/federated-kaplan-meier-fitter/requirements.txt +++ b/examples/federated-kaplan-meier-fitter/requirements.txt @@ -1,4 +1,4 @@ -flwr>=1.0, <2.0 +flwr-nightly flwr-datasets>=0.0.2, <1.0.0 numpy>=1.23.2 pandas>=2.0.0 diff --git a/examples/federated-kaplan-meier-fitter/run.sh b/examples/federated-kaplan-meier-fitter/run.sh deleted file mode 100755 index b82ea3c58fbe..000000000000 --- a/examples/federated-kaplan-meier-fitter/run.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/bash -set -e -cd "$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"/ - -echo "Starting server" -python server.py & -sleep 3 # Sleep for 3s to give the server enough time to start - -for i in $(seq 0 1); do - echo "Starting client $i" - python client.py --node-id "${i}" & -done - -# This will allow you to use CTRL+C to stop all background processes -trap "trap - SIGTERM && kill -- -$$" SIGINT SIGTERM -# Wait for all background processes to complete -wait diff --git a/examples/federated-kaplan-meier-fitter/server.py b/examples/federated-kaplan-meier-fitter/server.py index 72f0e8f70429..141504ab59c0 100644 --- a/examples/federated-kaplan-meier-fitter/server.py +++ b/examples/federated-kaplan-meier-fitter/server.py @@ -97,6 +97,13 @@ def aggregate_fit( sorted_times = combined_times[args_sorted] sorted_events = combined_events[args_sorted] self.fitter.fit(sorted_times, sorted_events) + print("Survival function:") + print(self.fitter.survival_function_) + self.fitter.plot_survival_function() + plt.title("Survival function of fruit flies (Walton's data)", fontsize=16) + plt.savefig("./_static/survival_function_federated.png", dpi=200) + print("Mean survival time:") + print(self.fitter.median_survival_time_) return None, {} # The methods below return None or empty results. @@ -129,19 +136,10 @@ def configure_evaluate( return [] -if __name__ == "__main__": - fitter = KaplanMeierFitter() # You can choose other method that work on E, T data - strategy = EventTimeFitterStrategy(min_num_clients=2, fitter=fitter) - # Start Flower server - fl.server.start_server( - server_address="127.0.0.1:8080", - config=fl.server.ServerConfig(num_rounds=1), - strategy=strategy, - ) - print("Survival function:") - print(strategy.fitter.survival_function_) - strategy.fitter.plot_survival_function() - plt.title("Survival function of fruit flies (Walton's data)", fontsize=16) - plt.savefig("./survival_function_federated.png", dpi=200) - print("Mean survival time:") - print(strategy.fitter.median_survival_time_) +fitter = KaplanMeierFitter() # You can choose other method that work on E, T data +strategy = EventTimeFitterStrategy(min_num_clients=2, fitter=fitter) + +app = fl.server.ServerApp( + config=fl.server.ServerConfig(num_rounds=1), + strategy=strategy, +)