From 926c099d7bbe4314165e0df217a796c33280eca1 Mon Sep 17 00:00:00 2001 From: Ziyue Xu Date: Thu, 26 Sep 2024 09:43:15 -0400 Subject: [PATCH 01/12] Add fedrag example with embedding training (#2915) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add fedrag example with embedding training * fix link and format * fix link and format * fix link and format * keep rag folder structure, remove the retrieveal placeholder * keep rag folder structure, remove the retrieveal placeholder * remove template job preparation * remove template job preparation * update JobAPI script * update eval bash * update eval bash and result --------- Co-authored-by: Yuan-Ting Hsieh (謝沅廷) --- examples/advanced/rag/README.md | 3 + examples/advanced/rag/embedding/README.md | 79 +++++++++ examples/advanced/rag/embedding/eval_all.sh | 8 + .../rag/embedding/figs/iter_single.png | Bin 0 -> 405301 bytes .../advanced/rag/embedding/requirements.txt | 7 + .../advanced/rag/embedding/src/st_model.py | 26 +++ .../advanced/rag/embedding/src/train_fl.py | 158 ++++++++++++++++++ examples/advanced/rag/embedding/train_fed.py | 56 +++++++ .../advanced/rag/embedding/train_iterative.sh | 5 + .../rag/embedding/train_single_session.sh | 5 + .../rag/embedding/utils/eval_model.py | 58 +++++++ .../rag/embedding/utils/train_iterative.py | 152 +++++++++++++++++ .../embedding/utils/train_single_session.py | 142 ++++++++++++++++ 13 files changed, 699 insertions(+) create mode 100644 examples/advanced/rag/README.md create mode 100644 examples/advanced/rag/embedding/README.md create mode 100644 examples/advanced/rag/embedding/eval_all.sh create mode 100644 examples/advanced/rag/embedding/figs/iter_single.png create mode 100644 examples/advanced/rag/embedding/requirements.txt create mode 100755 examples/advanced/rag/embedding/src/st_model.py create mode 100644 examples/advanced/rag/embedding/src/train_fl.py create mode 100644 examples/advanced/rag/embedding/train_fed.py create mode 100644 examples/advanced/rag/embedding/train_iterative.sh create mode 100644 examples/advanced/rag/embedding/train_single_session.sh create mode 100644 examples/advanced/rag/embedding/utils/eval_model.py create mode 100644 examples/advanced/rag/embedding/utils/train_iterative.py create mode 100644 examples/advanced/rag/embedding/utils/train_single_session.py diff --git a/examples/advanced/rag/README.md b/examples/advanced/rag/README.md new file mode 100644 index 0000000000..a03387d29d --- /dev/null +++ b/examples/advanced/rag/README.md @@ -0,0 +1,3 @@ +# Federated Retrieval-Augmented Generation (RAG) +The examples in this directory illustrate how to use [NVIDIA FLARE](https://nvidia.github.io/NVFlare) for RAG tasks, including: +- federated embedding model training \ No newline at end of file diff --git a/examples/advanced/rag/embedding/README.md b/examples/advanced/rag/embedding/README.md new file mode 100644 index 0000000000..2dcbd97b60 --- /dev/null +++ b/examples/advanced/rag/embedding/README.md @@ -0,0 +1,79 @@ +# Embedding Model Tuning via SentenceTransformers Trainer +This example shows how to use [NVIDIA FLARE](https://nvidia.github.io/NVFlare) for embedding tuning tasks, a critical component of Retrieval-Augmented Generation (RAG). + +It illustrates how to adapt a local training script with [SentenceTransformers](https://github.com/UKPLab/sentence-transformers) trainer to NVFlare. + +## Introduction +[SentenceTransformers](https://sbert.net/) is a widely used framework for computing dense vector representations for texts. +The models are based on transformer, achieving state-of-the-art performance in various tasks. + +One major application is to embed the text in vector space for later clustering and/or retrieval using similarity metrics. + +This example illustrates a supervised fine-tuning (SFT) scheme for an embedding model with various training datasets. + +## Setup +Please make sure you set up virtual environment following [example root readme](../../../README.md). +Install additional requirements (if you already have a specific version of nvflare installed in your environment, you may want to remove nvflare in the requirements to avoid reinstalling nvflare): +``` +python3 -m pip install -r requirements.txt +``` +Models and data will be loaded directly from Huggingface, so no need to download them manually. + +## Centralized Training +### Single-session training +Centralized trainings, as the baseline for comparison with FL results, are done with the following command: +``` +bash train_single_session.sh +``` + +### Adaptation Step 1: iterative training +To adapt the centralized training script to federated application, under `launch_once = true` setting, we first need to "break" the single call to `trainer.train()` into iterative calls, one for each round of training. +For this purpose, we provided `utils/train_iterative.py` as an example, which is a modified version of `utils/train_single_session.py`. + +In the iterative training script, the `trainer.train()` call is replaced by a `for` loop, and the training epochs are split into six rounds, `unit_train_epochs = 0.25` epoch per round, in total `0.25 * 6 = 1.5` epochs, same as single session setting. + +The first round is trained with `trainer.train()`, then from the second round, +we call `trainer.train(resume_from_checkpoint=True)` with `args.num_train_epochs` incremented by `unit_train_epochs` to continue training from the last checkpoint. + +To run iterative training, we use the following command: +``` +bash train_iterative.sh +``` + +The training loss curves are shown below, single session and iterative scripts align with each other. + +![iter_single](./figs/iter_single.png) + +### Adaptation Step 2: federated with NVFlare +Once we have the iterative training script ready with "starting model" loading capability, it can be easily adapted to a NVFlare trainer by using [Client API](../../../hello-world/ml-to-fl/pt/README.md). + +The major code modifications are for receiving the global model, set it as the starting point for each round's training, and returning the trained model after each local training round. + +## Federated Training +We can use the Python JobAPI to create and run the federated training job. +``` +python3 train_fed.py +``` + +## Results +Below are the evaluation results on two test datasets - [stsb](https://huggingface.co/datasets/sentence-transformers/stsb) with embedding similarity evaluation, and [NLI](https://huggingface.co/datasets/sentence-transformers/all-nli) with triplet accuracy evaluation. The candidate models are: +- NLI: single site training using NLI data +- Squad: single site training using Squad data +- Quora: single site training using Quora data +- All: centralized training using the combined data (see `utils/train_single_session.py`) +- Federated: three sites federated learning, each site contains its own data of NLI, Squad or Quora + +We listed two similarity metrics for each of the two testing datasets: +```commandline +bash eval_all.sh +``` + + TrainData | STSB_pearson_cos | STSB_spearman_euc | NLI_cos_acc | NLI_euc_acc +--- |------------------|-------------------|-------------| --- +NLI | 0.7586 | 0.7895 | 0.8033 | 0.8045 +Squad | 0.8206 | 0.8154 | 0.8051 | 0.8042 +Quora | 0.8161 | 0.8121 | 0.7891 | 0.7854 +All | 0.8497 | 0.8523 | 0.8426 | 0.8384 +Federated | 0.8443 | 0.8367 | 0.8261 | 0.8249 + +As shown, the federated training results are better than individual site's, and can be close to the centralized training results, demonstrating the effectiveness of NVFlare in embedding model tuning tasks. \ No newline at end of file diff --git a/examples/advanced/rag/embedding/eval_all.sh b/examples/advanced/rag/embedding/eval_all.sh new file mode 100644 index 0000000000..b7afe7b600 --- /dev/null +++ b/examples/advanced/rag/embedding/eval_all.sh @@ -0,0 +1,8 @@ +for dataset_name in nli squad quora all +do + echo "Evaluation on model ${dataset_name}" + python utils/eval_model.py --model_path /tmp/embed/cen/models_single/mpnet-base-${dataset_name}/final +done + +echo "Evaluation on model federated" +python utils/eval_model.py --model_path /tmp/embed/nvflare/workspace_api/site-1/models/mpnet-base-nli/global \ No newline at end of file diff --git a/examples/advanced/rag/embedding/figs/iter_single.png b/examples/advanced/rag/embedding/figs/iter_single.png new file mode 100644 index 0000000000000000000000000000000000000000..ff6e6bce9d0ca442c0cf5c8ea28135189a552387 GIT binary patch literal 405301 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

@yV27lgteQGT#Rv#m{MDUstDZT+d^VJk+v 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%0AeEL!nT1fy*O_J_%jNTXucFmf zn#vMQGMz^M+*|!L!V5!s)*6Z`W|UDkJS2dzn$nxC=0efrQ1!ZtIbIAsAos(Nl$&#G zNSJ4kl%$Dki0Q|cbSB%;IoCB_#jHqGr%wN-V}tNnge65SUR4i&jlSNL?D@U-4b#5i zpiqM?`f3VR&M)LvEHo4LoTA+>C#&5`mQ&w~5Bpa{>pUcC&2>I9)FgxQB8;*`jHFUF zPh%tTQ|oE;jkJb19V=)?1U%lo4=vz3fP0^iN+ai>A?(Mi#5JZw#8ui{sXUmF6pUL; z?5*9Ts9>Qn@O4W??U%U(hvZ&p8HgXpfALVG^gcTHP|4*yc~-SZ!7gU0gvCPtKJItG_UA&nxNTWK;4qBwt|>4 zEpwR4&B3jd2QcOc-w}Iyt#*CNn{VJsf7soXl@Bj@Oz$zjwQ##V{B%8cQIlu86*xN< znAe`{t9D3;EY}E#jr^$^|M0v>KiUg4f^E&;uv5V2_04!w?4|>trIV4AU$zTB7vw($V&vE^T(>8oJ*YJ8{^9gCnUV5YRz;$sdNU4 z+aE2-isT(u>AHL9*@#jk!j+;NGgFe9dp1=C?pKh(h?C+FW>ue}BF50-ApC&29CY@0 zhFhfqoiddA{rwy#k6u2 zUZ>m2j8s%RASh;+Ij?^QX`8ydHN3ID)^lHZ{mS^VShKvpP}ukq;PLKt)B0dRQ0hUd zAozt(@S6KlGpt>PTd_AgE}fsRJBi@dzU8QGf~H@NXD1B(j<1DeCd&{OV9BPme6Pa) z{SwF49@zc>M3gFg=XG<88Q;=crL$2O_r;c5@R853$_jZBzKze7z|+>#M3}VHcbdDv z@RC@`fq6#_g1ED1v_jvSy|QdWXm5V)gasuz|5$d0oQ)(;21My5k;v*h=Q7>54!YMQ z=&|h^H}rUmRVW@W5dC7%bo=&e)iK$=yL?5fSG&fh!?YYK`4USKou*rz8QHbv*d)hx z7V*Tr!E43v{i1fNDu*W(YEEtBi(v^D(FAh@j?O;mGn>qZd>OvYWosex?)-F_nH1u? z1-jtsKEzt<^RmhTJ+Q4d=#}^sPe-uZ5(QK1{+ap+h-h4wd^BV9lGPWF{kSu^4dOn) zEQ1b2Yya9&K@~CoQPjG3#(QelR%5ZcmAaAV7j~dro?`af#)vU91+VC`5#$(4F74Gf zERi&BVWa`S^SV@Nep!`NDW7u`kD8%anpa^rMd8Let8n#&FZQt&%2byv?wE#jwmdx? zjc-KzSXch!Qoy@oXWrY+>5`)eDtVvIrQ`u@K`q zSV&-q_vTE#Qi`^|Zlva0h=1i%R5gaRnVr~0E8jtS39yi0zl2z!W^Q8S$OH~+S7X=~ zHOxp6I#op0NMg$-1m$XV`F$72l&CxRZHmfXuB~MHsC|DmDnj}q`)ZY!r8%$=e^Kei z^%84l??LzDah&A#QRNbFL|4rm=8Xda6if#hHyT3HJKQ1!fwI zPW30q{$#Kv|ALTQhFF>vuj$PAJOUp`m&bIFX)paLe7qdiV%d zNgrQFVFs61I=j_Cm)^mUQUUnHc4*9hA*Tjhq{oenBxTH;i`Qjuj447G&sFau+UVveaifja~up2o+jnO-03RQy!6*6d2 zlQ5L9kz7|%rK%9W*IMsP;rX{+I5YRU5fZQ>5%Ty}hhd4lKV{I{HeauXUmntYb}q)X zk~0$`pe3=Fxu$?u5}F{D!6gv?!OD#Lnj%6W-}_^J2UV)DhPEPS_t21B z7!pE1jrK;R1&Eb~;YHod((JFpA7$m;h&*LzE0J#9VTGO~2iXRvj|%*Fblz!f7#pf1 zyOAVzCu%-@0fLhv-EZIJAd>|q_btgtyq#SCLZTopTOAtBSsED?i@+AC&8sLlH+Hcq zZbN&V;+6d&u6rm`*>X3&wvW_F>WGblvq&|xu#|XDB2)uE#v)N;(g9QHaPqwHuzFIV zIUl7Vfil3swV?!bOR+7VC>VddL-Q3|G z7|y!nSOY`~dg48zQOBoCwU#KM1FF)?6lzUI(;cwlY>2(5B<7&}7hfk1eNJ=j!qv$s zZXF-8Bqzf`Dy`+oh8$IFhao3ju3x-!CaReR-ui0o;A-J=ueK(?DC&ak;GBoWB@TSU zawyv(XEDI}2qWF>$vjxU^^5rF2-}DT7+gSNJypc3Bj!E&L}NAljt zh5EwTrsbh$d63Q#lNLF~M$QpOQ1f$kzXWfmxCZb0J5<^Si3NlNn1)1(Oy|vyH}BIC zmiX>`^}Q(3e>ik&CBw-=H2_tU(J*ze#6**s{rVCgAJZh_CO?Ut#F`cKHG6^v;8*j1 zkA1@tU}wiv(A_3v z^-b@`k3~Im)+;|(D6z9&vV7?K@-4|DMC^mz#?f~bQ)MA9`*?{}cUU`t$avER(0>TdXcj!HFBreqr#?QB%=W#1%JM{*qBwMmV} z+*G(#(RlEkzGdE_{eVXUwltR{g~2kPVocIdE1S?tLoa$RO;^!R}!NH-TOcz7?@qL~CO<@r2X=#gJu!ptn{?hIg7Q-J?EMOmo~D zFwN#~>bH`}thc*74E2jLYjh$|(5xY7%>KIz%q;){Ekl6A6O7dt?g`#)#1T(6#b>Jk zaXrfmvqC*mcgGD#GiLl~lpfqHJ88a{^>%h)d9wF8Uzxk^cjrzSf`Kp+QG#NT=Z?EG z{_BLVOrwDFy(HD@ad`& zvGOJ^8cjnG(PP6Svk-O5){!+tO=XJN7!5BRrp=B%ZQkFO$d6QAE!~{>w6IB{icpk% z=u9FuhS`WoLsW%EgQJAe8SB8)J}bihuuJ5IH!Q{(slw#o+A9E^3Rm; zc%7gpXC|qB?No^v7&H>aVe@eIj6h|u^-=YXE)48_kzbcIPLQz0TFPd40-it1Z(D(y zy!A+z;*La1Kfl*+$!J-XMHTXsS28hIi)V$R^88lBde*z7XkAsD;`=-Mtxt;iZKvi6 zVN7v2dQq5e(WP(MIN-jwv8KzoLv~cA1H=JkW=gR^))vWo6%Zvo8D*}4l12)-pk$qM zJ_0SYY-!BtS3HvuCipbz%~p^Ose5q@jm~7vN9T4Zby*A|inBB-%=C-bMKK%R!eU}@ zV)|^3v{S!bmFQiex8vO}e#yzIJif=Gt=_$~hM z%oQJ-I+yL^AQPnASJ|f0PlzbB_TnTF107*Dh8@XfjTX9`)Lz_1XB;t@7CB|6XsJ|o z{EO@>11Nt}Xo8~IZ-_&Yr@P-9QzY^_UrA|C%QLjwjx?CXHi^7IEDFt8`lt%ikEY z|G=hB;5l%!t>wp!1SdYmty}}D+<*c(R^sgsEmcm1q26cg?jJ7*1&~S|p7Ksj-B;I> z816YY=Nzs)p6{MI+lX5#)wGj?N#(Z_H035Z9k~HBk%2C5>WKAqzE=uCZin z)J`$FP?$^Pn=0uW$G3C1tH`kgO)0Y#A>IY-+>YcO#EqxBN-!l^dLbXA60@QW{h0#i zgy9ex=C+OCc;LjX#YEe(tP;Qz2_FNn<=jfCvs6j%KE<^JJc`9Bd2tTJpOTWjKRFGK z4?qcn>Y;SvreM7RDv-BR+IGy_@e-0Da5}8$oRVQSy8+7+q~%S0Nv3%(weRsL-XhX0 zzlbDsF_Y(S#ALeA*u`gvIedUDJrIb7E6cP;3VW0&D9j<~e`96s!1~nvs|ECXcN#V9 zfFE(HEoPZGAA>KNeEp!^kJ{l2K^eAl=}UT$s-WJN-R|Wm%nX z_KRIiv-k%=d0ijz7{h4Gj+qDFWbX(HYRG<%Wp!r7F~+n=vb&89`&M{URHdvURb!WS zn6?p>97OMeTFj5oOKsyK-exSN(z;O_!x9e@PGJ9x;f9M2o-pdEGi^$q?W(6xW^fSe z`B-Qn^URyXHP2!;`CiJ;k4axxoHxK4Sk3m8Abk==^_+G6 z4c$h;p{0#2eCth!(;$)U^qUnbO4-1E6}AFsrR{iD7mbnHeEqk!13?38>IW_+^y z_0V!04yr+!ccFD@rHf7gd6Sb9nwL1XPoR>8bMk=B&YFE+U(>l%73;93@4nv{09Dk0 z{146f?>0}BTHgikwc|9p|Ce6<-xXf~wBcW`CVAr4okRX{BdgJTIlV29;%SfiB{2Us zB<*6F>I~4%hq-}nm$zyuifGgp#LEkMsF(oZK}VZyDXAun~U15PFp z!gbWKY%$|X(H*Yh$Qiw&*Ea@j(PQ#3fNl9`ajoIOe0PHh!2Jjt^bz_tXC4f?)F*l&ye z;wj`SW>GJad@u0Jd0S|Lx?8D;@0wDTlfuuS87fPPx*dlC+64AQv}_S`&G*r8 z1XZ(2Z?6_sK1*)Z-eQ04n~IU`kd&zc5ecC+8gp_HXVG&$7~QNO*`HdfbBjg^-Y&jV z=h-^flt0n*9NOq8gvQuJq*Uys(v|qLa;wVm)Z|pN`s`xI6LF*lR>TEvQLT7csZud2 zA*pcJ5L}g-%c*zGZ@lrS9fH+ zT7%)I*>mu^o|ne94zjq@q;RRtETUtZ#FVGj;ic6#D`{z#pa2cfM1P}Jr(QP>7@1j! zwb*AxV#R24fQ%$2R>o4OkriV6_|#a7EeOI=n(i^hOeUvf7x`FZeI5~r*um&~g2?1h z9y6ANlkImK>5T$4P?~I!#_<67KCr&0fg7Jq`ATPAVkO6Ys^+og{S23d4g1pV;W~1L zvir6;Nh~L73Z`IM92$}|U0_#Mo^i<}xhJrlep0~{`#&cT|NALLB*WMHd@tu-R{_$! zIvz7mNHFX}D(EJnZ~yj_r_C7H@?EK|S2M}71;=gpd>Ew!bIWO3M}bvuy_?#(%|Ucb(zn)x$RYLmJy4tuRo;pUIEV4>t#06vLm^@69Sk_FEx@o-Q0`dJLgn z&WP8^NH%W?U~D2HX^q0(BK7G@?XJ*~`c9SP>@o=%P-Z)v65yhj8=Ew)Q;^|T#u(GU zqT+;aOWk%Byx)IKU!y>sC&Qt>nf6OzO}w6_cr*4#$c7dvi9Jo4aEH0nd0tn6R@=&m z^C>E{d1&F(dx?5BjW8kyX=;it&j<{~4(?N9{YmDj0uYG@Dip;={iN}GgUN>1;k=az z2^y1}0Z=$>DczZ<(tWvAs)|K6RYIFX7l}(Du}2%P`s97jYn5JrH=m8?|`0cm`7vg zUqh4@W#VEyMsAHDASB$Y#C02-JunrLPVBLfn!OaSfL#{2yS_&A{sRlkO=@AKV4w5w z=&e$*Vl7R!$5?@6Y|zE3EK3bDlAy*@p$tB67G{V4@77{b_4hOhp1rC1*t7;S{mCl76uAdhV`<`N(38Iu{{ywY3L0f0ZLJnpzg>o5Gm>a40Rt z!khZ5j8^*6uedrsUF;`@BC!*FKt9>zMX}vss)^uNHpK`iK?AkCxf$tFOlkf=Iov_r zriq}dK%;jEb1MB@!`=NuF=)d|6tJay`QD2&-(B7tt}VD56unU$%nFJ4+9i^NEP$_t z^td<5o%0EiXf7R3jzf~LT8CZf* zs=iuWDHLvX^Ra|J;L8c6CpR$Z#N*m_Ibfbd)|OfHYkSVRg9jv!8jaTH{(0Ulw>(RYEp4-$FunZjgYPv4P`fVadM-UDXNMV2O*su23vvz4LxQz_o%h-33ziQeF2Ajb? z6tH{B-DS#frL|){$;^HP1YA$1KR-;9<2qyHa_tF4IQI3x%Tp8(S7-mE#)yw$Auh-i zH0Xp+e(eCW5gdco{&VGPwBNB%@M-5AtVNKNw{W4NCCOS^xUYoW3K^ajDFM<=)=cKw z3GjQd`6y9wqfwyLz{$QAA||aSmwqH|Y|##&>mpL2&ZT0ZYA3mVA$XdGSCs9pu=DwG z_$e7C5WUAaQMF2&4qk*@j4@kT2@UBrhMd$UF2|^N0>Uo(`+gF?1eQ3b*Tp66mTX|> zFeU^`#rlV-x|Y{aBH7dE{_)Ju<#$#M?uYO&QGSWU@A9?T=-!RApm=#pVcO0ysgt%= z>i+4e0S@Utf!ooj=aMPXPQW)69jAmfXnv|RO*q2(1j#s!;kS4ZKIk0Ac6qTB1yf zYBa9^QXI&hjzrWyj*?sYP8L3P!eBFzBGG;=_sthke~!Wfry7Y=VJ|$(cUkPxEIMp? zlT-8=tdC*_YUWi2jxvW&COU^R4{l4_u!T z);+7>!Xfp%UCxU5^PL;~UN}TA8_49KWVQ_(hSgGIc*2_+7wNz=GG+_f-r3;9PEt(y zn_nY~m){1SP%znr-p>lJC$g1oEDwqx4klC(TdY|tXa^g)&~S8t1G;T9#-~%pP?`|>_aBgCb1I2{lP0_$M0p56y^R&a6O<7AZNPwog6F$nV%qGW>PTvu zr$>5`N$H@D6j5o6Bnj+`{Lx&$%PEseeNcy6F*f`uqIilm;2!q_X&As>(Z}ok4zXJY z@D+`jvhPa#aI-eEvSOI*$QdIkN z;+~i)_=Dn=gz$W(w|9V|XW}HB086~bO$-gvCCo#zZq{T~qA))#cU|@eTS^wD0bkI< z7biW{2~*5-Q#g#u^07yNX^RXOEX1Vtno36%N;NVQO;6usT-JaQWd+OJk-g47S=B@8 zV}^qureEB}y5P@Ja%ECWwsf#2?p=zZ8pVPRq{hp}h=%oD>Ij>ev+DcPqxPnF!+t z(20(l;vG-dQBT*G^L9=Y(Sp+#4dxn%$TgZN)Gq48a_*SwLvy#K|7Tv%ef2FkAX2&R z#Td3e7a+V!x8x;~$Cvc9V0p0TZQ%XUTF-Sg&>u4>5c+RWfxN^3Dv%K6Q$7*pN3u2g z)Pg4P86LO<^l04TtPnh9A>VYc_~^}Sg`@elq14!ZU=r2Qbn>Zi)pIdvH@?XB&bZa9 zR-pdpsFx)tap;-&pi}3fYu(+Aq;jzT(y$o2|dXznghBIYlK8o%za;>-<>r^?{giKVnVuI6lST8iNg2$Q5}nq*o+ zp_kpv%p?g@Smlz}Isf_&TeoY=H9cJv)1&QTxlqGxBKeK&sv^>~P%j*?x|TxKh7A@jlBe50SWbul~vEgK6xlH&%H?;=Vz?}|5ZEz-7C z6nMIHh-&gNy;^2rTuL0r-K0yX%Uy9#M?93^AkI47COe1psoJoq<~89{99(OZFWGf0 zuCCkIzpe|z6g#MD8$QezRb^XJxH;M458@xBTdR_*t%*Ek_8;^Y;Mj5B$CsFrrvssq zOuCIR-q+6C!Ae4+Db}ctCw|D^buZ_{xz<`2ci6X%hnsJk_XEDQ8;^hRJ>q6eUToLD z*x2-u9^WkaXOuQ7A0$b(>61oXG!7%(Ar+sta1%YSIc_gRKCbpSI~cLgr+V$|dhbJu z)*ZU+OX_r(b^4yguiHW$j3xE*=8kl+T^ZlNGFrdYpW7E`<>KYozMR(UxJC)rcxXSr z^o&Fh*>PzKVY@0Pl+h1t(9WC}Z8$q`YP5NiGDHA1Syt7Y?(<>M+17O%vkbmHE^e~r z4ssNW?KwyRAKoqudat+}LYa-}hfz%6_aRtCacrUCxM|U*3hhK;WOK^1ppuKJHLzd& z6v5+WIWJBwF_y$8+Q0r=#a)9*YZ?bh|K?`Y9@*YQPeFTXuhshU5Y53ZD^Y5L+je{~ z4|e?grl<6Pqa$NEl5FcyXu@z-NH9NPn9Er&Y^WYQ>vU@RlE?Z>;idhw&Qp)GGShV= zb`HSbr%ssPV%plPM^5wXcx*i(=sH^Sodeh@cspViJj2?$rB%5kdPc1WbC#RQp+(a=K7mC~3n$L{vX%#P%%p#@eI9~kuPP=x#=QMtc z0{xY_j!>u2!!rB=+qUl8!?aF+na|M;ZbQ3zhrZy^BZ|(R&GMqf$xMey=Y5Z(HVUH) z^a*M!!k5F=M#q8NS21lQPh<7oH>ZH5s1+3F7)K*VHecxE3c&2mOC$Snx9pGH?3@rA z_0nd+XUqHjSMTRyl@c_*oKEY9v1S{WCPr(dheIwK`U-ioqbMq(Z}~)r@}DOOY+M@) zV8CV^&2`+X^<*_)Bmwl{|DLA**Gq&*&v6{7*PTn`%hZ8J?|cc2vBJ4s>cL^c&i<|S zW1n&Ds0A|j!Qha$-4vmlc4Xw9%X}9)#I|Y4)lg?kq{7X0*{0a1per4M&C9lZmU<$d1)EumNK*}a05Vy!l-T*vyrxV|FIlK4h7+7d9Du&@b+!5I#=p3fagD>Z zU#mY$C>QlK8#N%N?&jPtNeO)DkJptr0CBrpOVo6uT0V{#l-nw5|1@)$hIh^=Z%PzZ zK-Kt;v5tE&Lyv&bbrW>rxHD0fFlK(yI+Z!iKXve9*LC=fm;BqitzaLs?sS54`O8MC zCdlG$O^HPm)7QJH{)MZq3c{)B?=)<&P9TX@^Dl*dQY2TC?!_uPgDF$+9F2ew`%4Z9Wh)=j2hjUggbfcqJig!EfZRz42cP0@y?Pd-tp^2&|IEe-e)8$!XS6 zemVoR-xq5OBIY3wdXKc6wad%<>g1*-FjyAj*%nc`8+_7($Jl)AhgIxL&(fle6+H^9 zLyW)}AhE}TTn4r;2S&6Xad?6@(o8S=t#8}SPutxceMin{_mbj-n*WVdiMI{V>btoS z0g|s4bN9&(CDUBuPg8of&W#18kn|lxyGm@XHOtC0daVK1@Y%Ko2S{YACO7w?dxcly zG|z|qANy`zT=a+Vv$WJ_zVPw&!A!PRR^f+R!2DliasD{kpQq8Y za<{l44&fd7z3N!9y_q)nK+dgtdr&KU)|<<&#`JNw{`^U8juWk3uV4d1eKDPTzZy3E z(6oTSV8N)BLut8_^dp}5-r2K$aYrDcT%RYPyz{IqdTekLm4U*!3JnK=Ti#yT_pXq+ zAl~2KXFbAl9T-sUTMOBeOXtp8b8jHiQyc@pfbQGSjb)dBlitO_AY|6CN<(G~!1tea zo?NSQTt1wAI~+U8NH+otq!ZRL6nkwacNzQ}bd375G-E}OQ+9RZL1HVLEzy4c##h3_ z7YMowTL;Vc^^?8aG`1Aq@9s@Kf$nf4{RjhCJ6BHYc^v?VrTzC`tMS8KsEiw~W>9~w zfMvfQ4uXzX!xk#ah}dGk?e!!e{%9$+ZSS6yx2Sv(q5ld$0)+H% zpqs6{OXfXXosRc=md`VJ_MKhL&aT9jpZttw4uD;tHh8GP;7Uf|sWq3%NI19ukLh@C z`WFG@ynp5=ZEG^iXX=@` z?E$BMl`ocg8xoG-)(-vc^Zx}P4D}f`i>euti~5%~0qr|h zMX|SC2yC}^sA99CUz#U+Fg0`b;Qef8S2YRQtJaEl3Rl~kHOSz#%^BaR&WXIE!K7gR z(=^yF+*KRP>~F26XNA)^)kFl*STBZDM&gl=GhYf-PjH(YEAs_yQ{wM%tGGB}QtwbL4k0DzT-8M3y%HdgI zXSeX3fgfMq)hxVZ{O0IVOo?-J4_pae324YqC@jDEF88Nt1x%*4Q7WJZNA+`z|6y}+ zY!6pj1kpNh-Rt;tyjeN8lRY_a18(90v!{aVI5Gycff};9S+D89)G`P@M9??l(uTG*yqR0REt9T(@=Qy)$={^YO`? zv!^d7r=tf|)<62=KR)#$16l=k2vhxg7qqR3ewsPp<-@*=bjc6j(B{b*a^%vk)(Q_C zi0E5Qe;BQB3yKrnJI`#I)%^_KT@xjl{1=0MO&SPJy>2$jn*X@l0lc$z+1i6#D^ERp zdO9A`UAkNeWY-xmeYdLCxHqtKbp6?6P2W0-1FZCVZ7G<4pEG~&xBtIyf$bKc59l zojXe|p@!7o5eeme|+R6ET=F(m@**7npDPEU9b{{V)(05*>iCm(8-2w6r zK{szIhuiM8OkvkX*lz8#+t2LUI?sV!OO`C&&ZRFMd^0QCNSHl$Yr2zv>xosD1jybU z=v}q=8UG*Gp+DTVZTjQ$mgA+T&|hyF(AG(=P|S(YFqvgW5l?${knm~9z$|7Eg31A& zuhcV}Ay8}pbVeK52wGEA$=lL~PK{8gZnQ~&Y9{D-IZ)z6Hv z>M63>zkSWN2NdG4d7NR!gCT)gJK4=Lxe~tZnkZ!M0uJt8m;-}~$%BQcd8$uH^ahf! zcL!5NzE2&1$>`>BRL;((tyz_ZFYAx{-JrO2ZYnQuxVAsl7jdb7A&lMoY)}+6td;+) z2lL+-RZ^QHS1WhQ<9*Ift9Mm1v!zSpL7e}h6IEkH`VPNavzI3b49EkPxrsaFFYdO1 zHynZ8_@qAdO0&63t&U#m5cPT*?$y|){pU&zx6zQ@DcEu3|M~a-eV>0m;N%8|0}r=V zjLhFwwPjy;P7Yf;Zm*}F{UoAchNIIlzM6*S<~k)OS*(G+W-rqc5TCgV9>vT9jA!YV z%UqceV3fAFd~ffVzcjv-I%FqP@EPBQA6vd$Zu4wIic0;B-)ZF{A~nOGwgt-$&r9dp z&#vN7Xzqxs)-}Zlx zBmZfF;!{6If}#xx77}{_=)?h&JJ6Z*q1mIX6DRAXz0V>#`7072*72SXKA|{9;e zq<5!RLsDGRe65p*F5Z^PzM@oa?~V+b9?pM0%~h^E8m@G47W4uIPJY7S&mhoI7w2t* zL4lLO43T#bgH&fKis_$MCTG zz@xrLbN6G5tGk7hE!-B2cWXDNbLPGt1zQ`%ShYL=K(80}AmS1A*Q0sf#|PJ{C9j7W zQ?J=uXYRYnq3v{VA8gJ^<^i~-Y{&7UXHLB~NZ#g6rr zUko0hWpjY*acEvDT=jfjxg1qf?eHw*_3YU(WnlNTB5)rJsIwFDxPA*cSez8)=yfw4 z<2h>X+|srKUjQ|u>&~0dcT`e#SH!VRsjv7<$xwUvN?(KBVxJu}lNDd9$I@L?mo>=8rm&1gk94U-tE5F$iI`eL|W|R ziJzXtQSLcyxmcy;6|`y7H1A=_>25j0!?quF)yrWTF1@x>0ca`^5EMs}Qc_U>COCM36)D8+M(+E~ zkFdu-$Lf&uF7qD)xg##5!RH-Ntj^q%Y2n zo8u5L9;#-pZ*)Vh^frXQjvcke)@K7BF%bNv~u$Gyo}uW2))Lk7EVNjbBpIq5r##;!hNPs?-n zMQaCV+7QHfa6y#YkGb8n`CV(|IoPqr;Sz=w$W}&1=8r3<3_@o{TN`gDuT^U>ZCtWj z@h$z7T_G5W*a*d^oo85Yf<2U8+ zej4n0^(>xI2qWxsxtuQpc2g@>0dnQDDtp>i5MiJc832cmW_|v1`A zpZD%yNoS||;$&anj*cIqzb~^%bW~fuKfDB9||d|TuPa? zJSI*G4@D`=>U+|#+V^@wrfWIMW!1&I9`ZM?rq${or+yylg94Y=V{sB+{yUofKOWpY z&xVKCfo4XbFSjPV^N>^>2#)S-sveQNYj3<`_~`Fh(*aHJY03QIRpW!;|Hs%{#>5$L zZNe=M1&X`77K*#OyGwC*cXtMgJH@rQySuyV;O;IveK%k7?e3d>Hklt2=Eo!?_ndPs zbu-Fu>iEgixxw$@ErB=3dLt^to7<=&g2?5_ft?j5C&@+dJA^;#wy)S|>PU37Sn&KS z?-uZmYdk_D^49<^b5^7{x;U$-Sz{%D`68H&fs0J9N3eVjc=2;I#Xzi_^04c*t;;EX z1%zZv5*#wtnFDPjR?9Taha5Nyrj@uprf~yC;;HcMEd0gq58pGIs9_Mg+{{C^>u%uU)&$8v!sc2L7VqVNkQ%F8VnJ(Zos9n6UdEv$` zSI_=>Ug2xD{Kxu%Yl!{uQZIu`AV%n7(AeRA(6G9REWYh0LG)q5NNpSQu|DsN#{oyr zy5(-G&_zVQ6oq^1mY0iHGrzu0*5oE3sLRDvy+adJj_tS1zeGs*IJ*E??8X%Fec*}X zCKLUSXBMc?8MIklLweTFk$R>vn9dCtGp(&*>#t$^IU2o8Hpw! zA+N--lRZr4^p*^w$&<~M%9W+wPw-8MKomrOPn!d_t0v@ymmcIchK`Y zt0*P(z6wC4>JV92NqES%XNx^ok?mSdNfZNZA;J{)5^7t8Dj-D@z z#aUavTt2Usr{C2N2m$ZPkX10}jmZhu?M@z5kCP40QIxM$S(@#Rt&eZl7a>Nz(q6;Z zd`cG}*zH*G5*L~h8+Gt~uAw9Ad9UNW2E>hj-g-VRI=b`LY`i#p!i8=O2!*f?I;xL$Z)nY?%!1JRYdn*T!i??JOQ(IAZ# z&-VCsjDTz=|2qDA55iCV4&3=3FN`B;gm>Q zz3H{|_~U%Sm7;Fr9lLbBm^;6GbAvStaNxwCqU*ZK8#c(v6@!<{j(;ZKB-Ww(@CrO- zr%;!Ro|=e}g^gOjXb6qD@en|sI@I(X>8N6or%bTW2Qco_mXG<`OW_%;fGXKUum2h5 zxo0C(qAKn9Pgy=LS4$yIkU89O4ihIg{&6?@As+0Y{>Z-y8axxO z;t5$DD}ZZfGoH2E(fOn&|Dy`t^B<*Ks}-P{MC^$J;Iko@ZZyUF`;4_6U&i0bBr7*f zTLd|Hul^t3Z)Fg}z&UrL`Xhyeo{eShSn5`yM@KpKgUO(S0vt|gcVT@jVQX=V5o${7 zLa6>6xyuxU7!Ibc5U0|u=y&;MSw@yb5rh+Jp`x~I@R=XPyT+N|rE9+s*NyKB8qSqA zxzmf5{td5b*Hu}?1BpqGpN2PeSVsd037?I-gN9Xfv_ka$xKJT9m0^oRL8OI`6?Y<2 zC*{bB5@m9^z@b8J{!x+*^&V9lX%JAQ;~Ttw{Fv~2DfY_~y?s!s0?vyk)eqFjlQ}O6 ziJ~OaGbyR^spBn{jYQI7m+6*87iv8eRU-#VNC%87I4-T2zBOA#Qr-M4!7d$a@gBZs zjPn;;rVQ3_WLu)KCy`%RVPm!JkCd1drv=M;+wX(Y;PYTsm&!}s$C%0+D}%v>{!dSy5)#fIbBY$^0>00^MFR@CSCI(^>o4^ zq`V5UnI*HOBIk^CT7*Bi71n1gW_+Kh+%d+<$7tLC%b!`s5={jL(#A9ZrolI}Z;~VQ zufJ>FY{o*n-nV}+^C7gV+Pj;_8{{VkdccH-G?V{cHFd1)x8|8_@U-{t|6DQqb1#66 z7T$4U?XF&zsI$c{z`76T_pQ5d zR4~2mpb7ItsLvW)<4PL@w~G{lmE?5qw**)oE1FRA4$$PfRypQWI_^Ow4h=b5Qu$thkMme=N4sPkWy$9ARK+DDq{^U?}$O zk6E?T$3K^a`g6hX;a>4NJMs}#%r!-Dnz?o29A?9SZL`|y`WM?fn#-#2#izliY|G2W z3ph98y^O0%ATNG9@CrKKYa3S1y$@68?)fl>crSht5B66*xTFZ?wZoeuf6fJW^!_Gbn<9)^X}xsIn3JjLZM|q%4z$u?&IjlFNQ+%??>C& z-<4qVwJaP~0`AE1zkqZU%Ed7L7rpobf_07E-0a3P%CJ9de}awPgQF))McFo ziA))E#U|4(Aj*Q1LtsN72N^}0^Nss}0{0`B;Vb3m%|Hsjl3Rf9>)IBVUKC;wTV6j& zk^LkkYqSbAC1P{sRWcztl6>m@nEr>7F1hzk!d~E&=n?y-yYOn^E=ot5I~4-q#;iS1 z0k&V}UzCgay!nzjHw4WenpXE~lBQo6KkIBCTn~{U%cAVz%v#yk3oIk4A{&hPKcA;U zeo$k%MBRK|h4E`pyv5C{kP#}cJ2vXjYbM!2P_^VfPJj+(+^wh3{l2`r-9T(ynP@Lq+Hl|V?O_swnQf9C7SHceDbkqN|Qceza8uxe+hK21E%OaWg06aL)u-I(dZw4FR7;qZCqE-I> zR~)1?I>*uU&)epA6-3yr-I8|yuh{2?m(=N10WmLV`l?BBtYUz5Kv)HGReC~B0g{NO z79mkhpgU2(M|HKsKXsPJq38*x#x*Im0f_f=2R_ndbn9(mOCpr8p)MuV4r=Q=7Dkh4 zR3-m>gS1`5*g^fy{z%Y$gK)PZhf&knp!TFClwwkaR8pxjKO&EF!$mg3mZ++!aM8hy z&QuEeW5e4&y?6CepP{I?Uta$#*Wyy5cz4bnPp{Z|-~bwbBTwDHP&iex7*-r1)D*wTlt%dKx zyMFC+n+ta1m-8gQkGZafs~r40+XH2^{*&1&Y4nzzdhu(=QmoAxw_H_2<~XL;?eYGx zw_gnp|CujG8aDspD{2}g>^NzAk>vl@T>pOzbfIlYB72R%TeA5~oGxpys6|7TjTXL6 zZ7k+YpMR@i4| zQ@RSlc%~5T znLw}5SEF_j#d^&v9F-^}zEv+87fiFUVmQ)y(T2Hx6vaaSjFPFOJD3bQXjyddw{z81 zeDa`tnG8S&U~H#6cHM)#g%_WD_!N@0PBVhU&gr>u4-dCWUcV{ zZWsa}=BA?P?LOoeT^>M}dro%;Z8uW>+;Y6aXn<)Sv0^2y>{i9G(jMP8F$eEg1#21k z6itUN5D95yT5E-jfF;W_C$UIo@P=hc?st4xM_P&Uk&5E3w6yh)uBMlLWjJR*Tw&8tw+6}98Jp}HRpqo)p+)9i8OS|O`;4M>?s^9PSl&E$lTtL4cJ zc%Gx{FaKJ}r35}2OEj(1?N3DeNK0j)FeE}Bl0q8c#-A8cQ54i|bjP$9rEw{Ry(G)+ zRO*O!r%9pmFC_`qMKjo61y^~duObGPUsgd5o-)^T@%(HbV&iYkWH!Fk6{jQVDCsdQ zXGm+a&JV7p5wlpJ(>Ix`VJJN=kPdpRSd;Il|Nd%J@IVAW;2jl{%}dt=s!VmjRb4fu zPVSZ85fd?H@YDFB*g%cZ`ToQ&Od(5KUQl3I*XfsyEPgi7X9B?*#Ct${GaSlcfKf*-w&Vq#nTcq>8*qIrW!Zq z7<{xxP=FNRy0|T$mb>m$ujT})`MFk4aq0c6s?_ggE;quGdz!fVSKW&?Fz=NAo1b1m zS8Bpc9Gf(4M{TEeo;(pn5hjtbHqmI2c=!kkFppTCJ$ zklR3AD9MEji3w*C`-vlTfJ)rmkd)@>deM^7ccp>_A(bq`+YNtaom@#a_7*$!;=K

KVlOrTr4r5ZHB2OfdA#9lCML#Sg;){mRny{h@?Z-}%L+1V_suG2v zY{0F`rDq*j7D~++LdQdEo~BbF)Z9%h9E#jzRwJ*>#Z+TvxcKc{8g}d*7?Cc);}{ePit(zlqN_F8D$V?)^7$+O?s-pu(~NcnOzo zqX0Xc2?yuV1d&udgsSAp*A$Ked(4rTI&Ly7&`~lP7GP~M@I}&A`sU~)Ibvd6%YnKF zvVjL*u850OYJ4z19A!zD4T_gemBKvT_su>q zcA!?;WKxyBNovf-#>k4Eu+n?afHyC8@On=qKy7Zww6!y*lU`Ikg^4#BL+G4lH%yqV z6ZRbSj*dmgP?Je+IYkH&$xHZPaqIxIL=MRqh#`o@lv%AFSNPXXTGQc2vUVi_IWoQG zhHh0}@?c#zIFqB1nw5$vn8m4bItqNCXbJPIvO2pK zR*hUIpIO*-M^bpM_oYc!dE0TmO-*m6bP%j^UA1Ip=f~ycXXatlzKq}WP&`(i|KPRs z+SSG6cQ5k^sEbmcykp3={BwgbLs{aHa`tTCSH6@B@o~OcvbCA!kyW;(%AIxW__67J zQ;zG!$JfMpb)wpZ$0KO2WcmL<{~G)QDR%}u?v%8-j%`>v1hL$VZbl~WPB!;mF7{49 z4ehUUxOFST9*!HXW|F6kFHSpu-bb$FX_^*(IzoefhHlvhp52AurZ-PrJzqNj8^<-c zKzTg;L%X+(ci{VlY18crZ3lrrx}6G4J!WA%H98CcEG-e4CK$!?w*!*E^v`Kf?FT|FiZ=aOW4dzCoRge-f4 zx1&RYR76Jr?uFOh4EV_CdDJ>Lvwi(2zkfs=(XpEqy#L$r2RuRdNugp@KYC?EiNI02 zMPhbnSlNa%Yw}=J!0JA=*;@B5oP&au_H;aI+EFqXedG~@(zri~frGTCYLrx|fr1OG zVL*WaCOW%mV{j*eQG^eg1o}gK)-N6O{vV5hM1!uii8&D@$*pISa~?%*HH26iU{(eU z)Z*D^v?BX|1z?*8grC)`kmh;JsTLP^mBYcTDr4elQB_M+Y>95Wi|Z@?vNp&|#GIKC z6!Zt-tn>|Yf@fg=r~=Z-7PLTcq5WdZg*bD45SusQ)TzK%ENWAm<1qi{kNp6GP65}_ zadf4(%XR~}TJmb}6)zbnDRR{Midr)T&nribeWW~9+mm?o?2_sSet6>7$krWl#3dUxG%FIqGFO_B>8yHjNl6-^k zvbECNo*c z+pzOJtwMeVQws+FIIRTfTfqvM(0qc@)(OGvi&Rr>vOLA-!PXlt_t3`8NYF7G4}YNA z$NfNzf3ZJwL@63oL|UOnz3$Jww}1JVE8Q2^k3>u5zjE{4_U3Gt&Llb8RP{yBxt5Tc zAp_*voNUXTOzU26N(YL)HuyJFvsTPGRh*YIeC>^%N5Xk*KXwXSEZiI{n!1=RCXy?T zd#zNxD6%=+*Y2exUKBohdg*Jqm4toCZ%#L&)`T66z?uPiW_~j_g*<5tTWc9_PJUYq zt-ieE!!|CTXP6tLs-p3*|5;o^8QE>~+5aJ;C{go0#J?+Q5;I}OdJ0#??V&^Pel;7o zTg06|GU?uUI*?FK%ChSAp}cc)84m5IPp+#mzFM*Ay*rVTuww4l%6+5@B11fLB5@zM zf_#Vm7!d}t$%!~Z!-32Gu?+JLs1Ml-M+;gE{_qbEXbzb7j}9sdkO~qBq6kV3DG6i@ z1Pdkafd-$2@PtthgffJoftG>Qrgj6Gg#tf!Ns<=Fy<|yH!!hy6Dq)@l0zaa^-jH*_IDlY~YYPnsjq3mCPv8}3Nl#;SkcL9b+S)lwYfLD!- zt`VCRzOk|~G6za>hz_7jEV(AB7FlaHu9U+|!AtyvsfC)dJdClsB_abKX+5NB(t1 zO1rFKgg#A|GP60kkGZ!fo3(A89=Le)&+~v1{7duq1=bW zfQpTM+`fSD2k@!UCXa#wxUq`s7DUZ0B0jKVyce31X()B(?*~l4+;MAM!DEVw{NN;N zDjXI+t^=Gqm^GnU9X|g`fUf1xJMr;!rB5M$aLFJG8=znFGux7_}h@`}4 zBWj@$2MYauZ9JOjKQka;Vas&KlJ;@0Ghy!Sg7Cge)n1{Q+Z31$Z8GDbz9%b_BTm*6 zr)WgLHDRK)+wVyz!5E?4I(ZG~{lZc%k8W0o)*C_LEb4YY^Rk-knz$kKV*2Mb%`kU@ zb)5l(Gwhg~?w+}bU3i#~Yv~jvBS&=n!Hf#I%jM{N1@BC-;B6G#k?qPKzw;NiIux_l!uGp{4 zV%mbgVaCV7sc$BRF!rEsad*`D;q|@74yLy`r3tE{g2yU$<)t|D|H3!_&yU1Y|LZ3K zW+`#L>j#*gUrT0eaU1s>E%%&N{s>^i*{;zuwhUbCP12#J{g9bOir^5k;`X7ImoQel zY{8bt!Jig_(J`y{OxImwVCmAwIdA%s{MQ%6I5@T;{{X_*zI2j8KoW-pqwU9(E z9Ghe1$uQj!Pq-Wv+nxZakYayMFcH@&pj8Mh5QR^dm2h9?1`P6#2*El{wF+M?&7vvlV%zj3q6r zM8akzQfdSXVL4kOK$I%+)hNlNcTj807@tUeze1@YKQ*q-{Kf#JkCOgHttll#QcScwGx8s9GaywWGQ^jv0U~4S7>UHCIUKQEEv)7|8J|VOgctShs zsNpkqNb}QWBnGitw`2)AXZ_7Wi%Le9N2bo^NJlVPMnP z*Te7F3K*32AkT08XA{f&)%!DS3Zc^__x8@!%jur{wz<(o#g`9cH{9Z>5%hRjdpH6q zrC+Q&FA0OjQ_No93A1m|-L5juzD7-X#nPtFgIcrxe{#wH_PuyUch(2IcRjPbt9Xn* z{|7xr-H4$b%O*ac>Jr4b&dpf=B#$PIJo+2#aO$VgZu0>xRxV9_auD@g(6N=x6=Phz z!ri&m#fHPhU{h;dF>n37JjvFdD2NJ>nzN^~pZO!;B>*CzHIT8FJ`eh(1}`}igsXLM95^NSdkKEiIzjo4;T{h*6?L1B4RfU=)16E+&1wT>V1#WjsxE?u5p|zdZr2u8nm)Kmnhw>J zrMr0N6lRFDl`Y{bF5@|3sga6mY9jF$Y{wODJh4*warb~+Z}d3u#TZMB8Q;H) zW~Ex3;nE}g@SqL7_T;loHWRBBnygEuYq-h&DBYMK+o&+=28BvugX?|(U}J$U0gr{) znvK@hs#H|!rb?UQpZ=mDEIpvZELXOxudzjVq~)FrC8uxwsFAJp99S`VOiww|@Ul?@ zzH>(WIk+=xYsIC%i8Tchbj6t3(z}^$I$cgTe|UHDbgZo4)I*~=LT@RSe{Q~vohU+o zn+*Y}SJpCoA+MdR>QnuWnqpSof@bz&^RI`1$CK6$rUM2G1o9B7+Liz96*`*hkcEXGsbyKki+2I#in~B z`>tyze}+8bIv*a($F?-*j+C^ZwV;8(+;nqMSdI{pntjT8aD9kgz*S&-5K``V$qy_A zMyx$??b7-|V0=uHeE{m@2$2NFlik6r@NWhQf2~5j1aWW!IERSiU}P0ETSb-WcNqGw zHH&jVKzsfj>RX~rzYZ*t%vDYwZc`<^cLC(eNPx1*2v;_6T21 zZxX$gJ3)xr)#+W)sMNtt(=OW}*YkZQX90k;0U7P<;CAZ5Uq_>H+$>Ol*|dZOz<8)x zFrz>4#A-3I5^_Y0r7zZDPP7K@fM)2Xg^g|0Y|y`4cyHfm-F8PU?Sx(v<@-NWd|*L^ zn3tN>YN%*kOZkfxcN!R7v|h?chBgZ7@DCEjcz@%o8O%bIMyili5jU$5opR+dv-b4Z zvbyl-ds=LKH^|;Hv2j+CKF{ED`NZ^bt05Gvk%VBy^P6jp1v+J!za7SrdnUu$yhQV+ zbO7}m%NZIct6Tw281+#yAVg`fvMZQ#gTb%~ z$}MQV7HvK*S7)|Z9Cg9{+ilXT~Sc2?LuljbVco^4`| zngR!|URtuooMOvrNR)f}!%gmL`E-#;l>&ctBncb63M;`49dDBZB z{7>uZyYcrOt-~|Z$1}CH`#Z7Mr|OO!`tsPrN+;WOkh=h|=(xS*`&6@OYjYkA@*lbn zJQXJlaOYnWK8T+$4!TwWk9~NM*G(SxT>l@yG2(yVSnhy3ypn_Wpz+VFN%N%#F{i+S z_Z7!YlC-wZ1Yz?Nj6KG0hLmBm6XJ6NAI@yqRdNi^hO+>#9%(LtKmjrP;bv^gcJtNN z*}#t2^p?GE5bTu&-{*13kjYPXg7pI6!VFD$gEi~F%@g2g3d5QV?T12TH4*qmfNKPn6q$XOTWUIvKby?y_ z-EC!K<2$L6Uo!h;E1Qz7rL$xsLmhPAbE571I;~ebT20mXP~3)I(h`|h;bmVA#c8*T zGar^n$lX&phgWLCzYJSAUjr_U8{C*>y0%O(PIG%xO<>+(S1D^1m9F|7%nM)rcZU+H z4eXP-nyT)!Wq}TMQ^!8&3eYhRX~SUG4#ZBwsYyim#hmaH)<6xg#a=v$=$S$4ULY=Sqgj zK#ie-zM7J5tjm}$=gta>hKS?~lgK8@5n;Na2*7p$MMYtU#$a%?s*Q$=Woal>AfaV{ z(Z69!umj@*TQTHHG{ef2=fak zygrH7`_GROk10f_QqQQ-;E(-v8GpSANxiuN=QEzFXZJ>;kJKMh{f#eU+nDdCIZf3{ zZ+|~xYYl4Rzf2U}Qpe$yuBQ+Iw6pYGa(FeeOd2*36VdZimn3mu1Sxvw!M2S`I zAcBJ-!@=T&XC#pXe;cI6S~qMdyWRF@cN!CB&O-Rat1K?oS595vpoheDijZrbE&g*w zBRNa11iv#1&OAX+gJ=1D75{;&-C=(*mui2DW9OSqrlUENxu*n+JH-={BJmxSh%}j@ z9>(!D)lPjzIp5x!fzRLi!ZQ13^OwlHB!}$9tCYwAD=(_y*r6vRVAf@R zxxB6AEb%X15?s2;Ar=SOj;-XZ^*!$cTG-3=2e{RoxEbEMfB(08BvVg5cJ?kCno{k=}hPZZ|Rdacg2~gIs zD537Rel>Lkfh^QdI6zj6n2`ufZ|)#?2;2fbXO;lq4?}+4Mc0V8>ZaK`d~&8}ak@5> zVy$EQqC$B>a^e97uG^T{rz@^-z$j&*P)^KPUR+>e0(as_h8i(qTE+L1DnA}$kEPhA zOsgx`+_4=&%RjV^wwU{-hpdLJ)Xljad`p#7oM@cLGh_#1sY&mxO@^D}6+ThSVU^i| zTH-)eX`>bAQM21?g&{iPbgFtO=LBOL@;kEVx*SlDr5b9XDZb-AsYe2HYsp-q(acK9 zU)gvF4IZpJI;5tS$bGHsG4!T%O*&k(B!c$@gi_=T&v0iR2cBU7?`L{TC11LB#mO$< zvuH5V<#I_XCv6k-T~2O3?V0RNWD4h%f=LQ&H&t@Xv(7k_)(S36cm|pGj(RvfX;t_@ zqVOLjoe}I)`w+bP3isJMjFP*5zfA%@z0Uroc!W`#3<@wMse%IJnw&4T4c^rj%nK5| zy%#a75PpqWlrfuw(@s?0#?^#X-sPWG&VCPQL%q^r^Qx=k`daBU$=%ad;K*w>>{HME zYV7yCGkLd^Qrz|Ie7yr8mt41ANoPoYt(&CGf976l#gxC-=bQ7n&^UZ^JzTDEX?2qa z9%=p!5*)@%^{d<|&LWgZyl<=9*KQ;263#qx+vI4h@ikw6>CabJV}kq7guqbpKkM)L ztS^2@MS%l!asTmO7Kd_vEI#vcVc-GJTplUGbRtf46a|vp=DGLrHsWWaOoCy3K z!bK&fL4QT-*epGiY22y;vc(JFVPHd83yu&Q@8&rF*s(;#iQ7!wbYZh{)wL!++*s*c5oVpS&J^!-JK!#jJSJ5GwKd2ID zAgP^&fLs{~JPWA|%M((eIDKZMD0rQT_3hv6yqVch8s?Op*wM)3U?0=l@2P;>p)pKo zbbta=Ws+L_i-|kcyJpvQenn3S;EasMZn|koBsX-@!X-}@UKJ>hyFV0y(R47mb+?pB ztmwPt;Uj>M4>-@As>6%cZ+BNDev=U3L#bx|7f{Iua!iU9ED_Ng(wQis{7_7+at#*U z(b=NQV9`o?T-+A-MRd@xNHwoe@+r09|;oe z8H%vt!WeV@ratEB)GSOoF-ujq7#M(*PCpZ@@y8^R$>s}NS)H&kRpIEIr^SJkuaDY& zRJA5giqj^Go2kqE(=H&*g;e*l!&QT8nm&ErrPljdG7g^-pQo7VIno<$F5GgOboqRmgJe~iW z7rDq@2t%w`Xb=KOe}2iOp~}**zVLwv#k6G0R&6;iiUTvu@|v*!KEPVe=(tbCAw+H| zF-nh5SOF$wLJBd)1eM9VO}@jGc<4!C{TH7#bzD`2fJS?ArqV}MS*IM|(cF-_=FGB* zN1uRpuA%|m`(Fj|L){-vX_>M{=;zhP&PQH2&b3f>;6Hut=kuS>6`>5<$euyJEKKwM zyp(CF&?N9)V~qpPPY^59f>IHW)Ng;MfwJ9Cw?p;$uU}8S*|b$)pp4DRl*xWp~1fWI!nSs!P4@v`7ds7s&RI$S+p_@-pV>QO0P zg9oqk^=Em}ax$RY1$ZJIR1@jl_jXsz-$3$^%D$jQ$6e7$X+!hc&kj8UMOm&~1VX zj59TK!BWvCWLJu~3pt3Ql! zv^6ADVHytYqT@q|1{<({O56-QnD%tl$B}kTHdad3S+&1KTSKA!f(rR*wQimW&Yi~_ zluoR}Zaa67d_3*ht8498udYS7+8hm8iAtnc$C;KDB;M_8TG%|PEOrKgh}uqW4|Vfo z9|w)fG;RnLKLA+hrv=6<3hv+zIn$-~(s}uNvjb)9{-dcLK>XEUVo+ZrAwqePNFXiUUtBk%vD-7o@8b+kWF-ClQyy{ur8yEK; z#8zlBT5FRre%pb�$-ElV1A@#KSUk>zQ^pob2z-a}oe&cb`7`^4pb|5ezOHlV+JI zGnQlU;47rfL2nG_>hUVnQf`2>41y}+?f}y+TgmK1fA9R0-C`x{La5}tHF$s9_*h$1 zK(qL#YqAfHMjr>heJWN!H#&#WDA`74Be=1xgTVKKyPtMscn73wq3A<69|A$P66?*I zlZbfc_7r+h=^hhCfr5^Bc~?Pft?WWM;NT9SvSWhaz~(R$wXdX%W)<2%%kXYuq;1Of zVJFPC9y_@;=D5d6q3aFL>j_T}uc-90w;w?rS^JOfd9-$^OQ#7Z7mZ#9gPcoFnA{IC zNBv#%gV&fhKi|`A`Bj?F)-D{6P-T`O`eVD)%sHDVsLKRqM>esFwgwZ%OgM0x_mDQH zk}o3sVZ#5@tDOa`3#q5QUeow#56S*_mB&1o%bOVK&{C+k*J`4cPqxuvxstJ-Yz*=i zESDa;v(Xl8>2XNnLBkUPx*$|M3YJ5oMT4{=ItoUQ!^6|n+6Q8ZEA{F1&O-~b!| z30tmEZ;x3BX@qP)-D4~y1Rrn#y%2&d?2m5p9TGwjWDJrZNu4(*J&Gm(tN2brwugq5 z3rCz>rPE@FW^Jm9WR|16^NWZH8S$c#2B4;Fh~qvM?M#6*%arRwyoElpj3o+P4;~&8 zl*2csoL^?W{nqGj7)ylQAZc*PoKqQ+#7R^mO*7aB2x*QQ_fH&YGrZP>Lcx_Y3Obk>)`9&K=_XWit1% z0GJ3xj&b|;-Q?V!gfWc*2_C`b(dGw*u&k7IAM+7`0c=aeM`6? zkN`LI$bXQ|T8O|V8u%rae=Rn>OT9|Z=5TW*n|`^q|F5i5v`#Rkd!vi zs6AbS4r7&PY*5%J5|P3V&ld$#9-5jyfSGq@Zgsf_8Uw~|Bs%;%k1PdJ-Zosh(I69R zaLWKUwBd4b5cN)LP$M|DcRsV*by!w}1A&;~PM(MU*GQiM6h=G_9caw*KH>gQ5S000 zXYccNJ=EMY|2AMi^edTdOv^u9g6;(7dBlr*({!3lJk{fS| zK5&~7dWgbk(^JcKf59!m*PU-X?W)^6o+5ZAl-jc?5kLHT(o`WI6 zxx(La;ts&gHNDLwa&s)VMuP|NAttQ{paz|VJ1Z1Rn{Et0p=SknTwt7zRCA=HL_1v(O?~I)c+d z)MUsoCJIJa1F(Ux&fkxuk*ad?wtpBR|1b;&2a4tNiBPdIibB^rJO$Z;E26!?T9fn& za0$Bz0hhflJH(+8(Xa*)eO94t5KVi~(qsQ^T;sh4{ibWnlVYB=Nw%xdBpRuS#bm+0`I8(N0inW>%qA5wB7sL?c+HfR4wCdBL$;n_%pbQu zumo&>iT#e{kWn0Kmf#a84ZmZ^jc-%pIL6b(0gn(3GMjFkeI+56SvAkT0{of)c8gfc z%?I;zjfeb5W;Qw=yp8c$P2J}b663oGcfeQ9VVkgJSLeDs;wZ(DKuY z4a(Hw7m_?j_2Lg+ITQ+4d#pzdR#P*4S(q<-aGeHeh)AINyR;o^8dtO$MkMq0Qv1** zxQ*%&y5|0JsCzQRtMOW4BCq{fMkMZ09HPc(GEjJ=4KjOq-MuK>*mQq6*? zJm1F0>bk%BxsvuBgCiZ7PeZf)76h$q_j}wE{0lIEm)VSFi?^m zjf^b!h>NYYOw^Xt1l*p?EOTyL9~gPD)wXq>chz?N)TeU24LXm3^}XUkeYL>HROO`} zdj)#a<5!tIv#%w@oI3L!>g+LSLXXNn2mY{V{?Ah|ygLB`@y_Qeq0dyR)EMfnvLkj<#6P7Yc2chyCQ&?W*?T#o^Wa<0M4RUF$aL_bN1FcK}1l3+)`(bowG z6oh*GJHgz*YA9I5RhT^-2|T1lqJkX$?3_kH#eiRdXv)Jws0R|rD)$pJN5Bf~U`pm8v4 zsq)reVi0(L{6084bH54x560d)sO|OJ9xhVcwYU~2F2x-R6pCAMcXyXkv_R0}F2!Ag zJHg!@g1fu?a_*gX=ALu!e9t@cnMpF?AD--I?Y-8vM$sQ%f?Pr-!l2<5v&f-5(M;ho z9X`BBA(JI(-7iq<)p7O)$8Q&J;bC52La;&5L~y=BS6si_6`Iz^hsGr66L~J6u}C|z z;(b;ML_xF=fvGi{L{$!vC0jA#fdzg`mK_QpH61s&0N4>Hb8b%98K>Ay*cBFxUq=?$ z^3_Fcy79M)HsqCcJL3hfc4G)^kC2kf;(YrcmD&>}X7`?q>jN4GrWd*#4{oDXx|r@hPa|Dk10}413PMWPbx=Zcrtr1n+<`4XohU`OPq? z9l6Hw(edqSQ<{Eqa$wq$DnlCnhMHRh0&Uak;RHGUMyM;4>95ez_Gh0z*8S55P zfTM(yfTTcAS%;7@k8X*wP4t5O$Wk3{V6xYEAeu|RvwGr=L6-CTCx1xGYL)$#sjG(o z+ZeW?13}seUN>sG$CcWMkl6sIg3J|1h-&H-!FPg>coL<7u=n0>`xFFP#$U1+vG z25k#wLH!yP4hGoPI)>!c&Q(6irh^~)ygOSh3u)PH!I2lBA6p|`x^OlARXv$d>{ma3 z&yycTX@)ptoWOfVR@E;ow9abwy5TjTB458gopE3=wzhaUcP9c7;^|mTxu~NN;eA>A z0^Z-Eqg4^R7$XS$LgQa3EW8Lm@}V{{gU3Gy#Lhu+e%XjYjG4T1v3a>I^KI6yh#a1E zyfJ8Lt=C*3nIqbc89thI6r?XH?`><_VRp5xa~bA%Z9zWeFI)-U4NX}ERo zUtLG%#2V{I!qoi?Y<;xh{}gg#78lPJ)p+Z);VW>Z5?~KrKEhauRhs$o?_T(P3h^t^ z-4te4I^uoQM15PQXdnAD%kDJgr{S`);oOm;9?jWpJSYDIo~SdlN!=M&6_r`%z|J$t zSJ~scydT8G0k$uy7w7L0^SDHYeq_EYhl8hw7dowxCZoo@-V`x2tRn}=8%h<6m=j8h z8J-#i!NKEWre+6-p6!IDf! zXWNUEh?PrzCf;WqXbg&h&VeD}sruzuk@p~?D{8*N@oJD_hoDI39i9j+foz2vLN&M9 ztOS_Ao_%jyM;Q4hO-U&^JB%=mI0OYh7Tz(tu~T71(jia?3|XFvEkhG&Q1Z(hp1he3 z=PN?hgg^P%26K=9tRc!4g#bnLD-3tR4tpmQ4)7eq5&@b#S3I&W(&UG+TZ|Ki(4=F= zc|a$Y2o_jlw-W(gDec@btwr)zx6Vl`ti+z~t22H88Zr|095fU86dt32!}sxwVnW>5 zUw!BKf~%to=9CrKjH03*d}|FHz9Untv5NxJr;eB^I)->bax(h#SV<*N5$|?e9uoh-Jd9JolR?mZAQV1oNj#l17Z)UHE z#fFd~+hd{=B*~_7_sR}LPG~t+C3)0n$f)D(Xl~Sd@|htR^BD?Z{y^c911}aBbCqfi%a38; z`(R;%W!!?A9E;nV>ghl}__W#adep&ceLS5Kyg@aL8eYl|pBBTAyklVPXvQOHQKvTv z1-|dcb+Hrxuk8E*$;94bDFDCeIMDbAbpxVxOeC8x(w%6m(6*py;ORUTAceVIUm}CC zunE))eLV`k8QoizPw7XII7?T;LfM8|HFo`lX zvcvayBo%!6p((Cn!;;Z>boP*T+zE!8t85nnl#5O~1<(wPxGG|b_u9&~lF zwgj|XUHs;FcMj-he%SoUuzK#Y5z%r~qv z7BhzHbU-od$FBiyvzDCog9i=?p0VNlqPVi;{0G)rS}v?Ieb5g^=YjPJIN*%sjeA_b zYfp+DE76nSIx=SFGoQD@0U++(B2+kRowX!q_iu$;2~UGMas>Psa@L>#;sRRKyb%$v zpL78nFHK>RP}UYdCO$g6=Y*ley4JQJ95@nRw$P9HmCYr79zgy6BStD*S$#i2*#2Q4 zx=^;E2?m|+MA8OKI6NO!hXEyx1V>ju77B=sc?up8fe&j8Hq0n6U&e%5jNFKte_PYhpxwIFj zp6@9Td{_q}VNF+(X~c;dzABJQe;J5#fKl;4hIgS@`N*fUGva`PC4|I_EkuSGs=Z(5 zko+1nu2BoMbk5e7t1xce`kuU*Og1N)O}-}TzR5gUr2ZVU zo2){J03zr*fSx29V6Vg0b713^krE-ncFBX~PO;U+&c`v=x8I{dC}0V{mE#zl+0Xuc zsYPR#3O+IA_oC(Wy30l+<1e9+FqnKj|V(-9Mrk@rs#rQ!LfxTC?K2(3v%Qho}=ytlTvIRv>ym}RncQ80fe>Zv11>ol~t{Q zQZsbv=PAX%euimyHM8*({i?nXq=~fCuom3J!&oR95!;{}oXEuDY(ain`N=xYGD!g= zjw1CX+n8rQC5a20;Ng=Bm6NFo8^6s#XQm0@9D|I9b!x0dAyC63Jyzjj<2;D6iGz?c z#2{RRrz+ap>?HD2IydTWFc#Yu96B-!!&q-0#!u4|4P-`a9CIBbKEB4D2L%7Ciabm~$Vxy(R+! zgEw$ZZl(D#Nwfy30&0~4P$;>u#%e{C7<|3gXSQCz|r8p7~73YzqZH31Hq>5z{M35UCC>YOkejA?pD4rDFXI z*7?Pv8h-@dE^==Fy=Jb{hRDkg8OVjQ{erlUoB11a0$z8x<9WCvyI({#r~>)`4xhlt zM+Dfp02#POZYq-9sT)KUMxlj@$_H0R=)wx=C_>tX6~pLpu-klRgmB8vABVuG5E|l$ z!v3ilew&c^E7^qcq{wo>Cq^(LO!W^UkFPBmgx1%EFk^Yk8&vHCeOPdqdJ_Z>m|94x zJSbVD1Nm>)3U4MWJ>uKsyUbxgiy7fMNA%Gc%;1TDuydpbOg>y2_7)|QoF~zqfV~mx ze9~#dDL4|pEegEkh}vp6yp>LZGDkZQ;qeNmNiqT_;^ZcMz{ZC#*0A5O;3AF4?1?b5 z^TdPXh?Z**!cU6CNQQoffoyAvy>v~Uk%mSDc$J{Q^!NPtgEI>`T`ny@*~u<~S`f;U z!!{R8m{mo~<)#5)2KNbxqJG|ukZ-+xQ&rMc zzg*yCTwut>7sh)dGUf~g*h)h<8LQ$Ce#P6u6S8h1m3B@Urw}YU+0M9hl216GSVQ!A zegGhJ?*lcSn3>gBT@!R77afWbYG$O^i!=<{k1f6{`8%7?I@HIi#bo@X52m|)LY;t_ z$Waj&k1<{7tb*`T6j}{8n(j}M1QhtoFfPek28_P%zQT7yF?x(1e;H+Z-fn{7Ph7;M zu}U}8t6)tpN=Yp&AQ^DrGa#;Xi2HC5!Wi9v7_@j`ALbY#VFUIx3mik~9n7onJsx951b7boedxmW8?tS05Bb_lX z>i~(E{tn{~W_ok680P@jE`k`!OJjYCd@x=f@SAbc&OtQKJAV`-JhX*gGGgl|4E)OX zRKq*~VYq4pT12<1Z2+a;0f6N9jZBD1y_Bd@2p=0J$$NuP-NqI$K3*xP{ z9f@P($0HZvcB8=$h<=}#ObZ=)fgxO2sICpcfX<4JJAvgBxYw$=VjEr zw0g*_i6;=i$kgJa#EDj4kJ9MT-sHeb-C25;Bg>cCw;Fd^I$3^0vZa88tw%NsFzA%hWbm6RM)B1G?c9 zWbb>8Og>+mO9p*XMR~rSR***QZ}pH@;E3gQp48|h*cJ2ZZO+~@k_b!XsNE1Q{o%_2 zYwiH^VR`3h8?Y&|jBYd?idJczXk_JAukX3@4UI>-s zgJYo|19HIm`$`8ag#xNnJ7;9@7ddXc?tM#y+Eoe{xUgTrqakvSRlha-rWofTU3KeV zQaDZPpPa*};-5u=%qnW-H*zXbb@bHDMX*I-*Ra=l&pxNC4NJz*S*|Y#IjEW8P z00%fKV^2I*Q@8i4`y;t9;b_Osk01O;m@16Ppou^4uZ+pVC;r$m;|Uib#eieS43ph+ z({31(<$m|m1(yv2|00z0Bhsa7^#wwD;3llKIziy{oCB#sb{F0jicddb3MQKI5HV!Q zU<9<}F@^^bXZ&Ss`Fjx>PNK*$9T2UCz+BA=*F^xo+WS&U56)KIoAKR-Y53IxB5u+2!){I~!p7EiYeMY3)U$M~; zEY*Qx2}qu2H>_C%qTzM-Lf17tZByAqZoE@*Fyo=%zzh({e2L8Re;C$}9E*$i(raWG z%4x(%HX79jHFZ|)oIGDf)wt2=dX)_BnKt7V+Gm7j2^QJl6FnxU5Sn%!yU9pd2-h8U zFRR&Vq%JWu%R&DZ9_Lib-I%VoubX+Zu3r{fm^P0PyoG=3ajqYp6>9r?{h7S{;*b2f z(&Q&AYn>z_%lgd3^+;@_!AtSzy@hX^3c{vr4=jEtd^YAL3b0>9{_W|+xYxWUr=)bC zgC!mY_&B|exaRt$kGlO-Qo>J|&5r;NFou_2nv$=>y>20k#!FQkR68%$7hxW}C+!9{ zrC3yh$M1R`^r#}W$wSl6UXcJ_jh)wFE?~uAanL25JMU^Nklg?x`#*jL1PbliUEQ3_ z1l+%)fOdj)E^k}r0!HaU$-(g=MXH7y@1PVT1|vV}!Fc=?p*=6hr*5A7 zZ~Z?ViOhk)rf3D?6hWBrBasXz8idn%OGh?N4WWw$ySWE*ZrO%-zJ%Zkp^=Ewp)&lJ z(bjZ8sLrCZ703I2rS6nquJ1g?RV2%LJ~g6Mtd_J!2)0qWf>~VrwXFOqS3#$|Rto&n z_;NF5jUSNHwa4XpMuY^zx$prYzg~%VnE?mY-e@bP=JQgNMz|h)8q<)7sxEOfGJRB~ z$GIzz%eOHj6^+%?j(qnQ7}CWFV!o4g;o0J zjnteJLGJfIcsg-k5Bbn4u2OH<=s3LStirpjL2`K(;OTzqdB5OV@_IeZ1 zsnZRQBZh-TmU5^3tHR3e21Q>%wL!t!&0$a2!9?@YEq9&^UI5j{PCE(dW#p9z4pGgV zKlN1enaHJ~V5^v!8R9=Rhi+PS=B`R}&n^SYbPUf*dRb?S927Td#lRtZ-E&5g;$;?A zg1C8*~c;UB+TJ9?^(!!b)!Nxy%9Rp8*c$Qce7bH2!n9KyzNTjU5 z)-gbHmuy}&GM-tUigO0X)rDmZ=>3?VRY)LzQ|TUaLjSdH9@jz#%*(}_rLR^S^lIju zxmUmM5)1oE81?O>ef@TqYQI1D9u+KqY)tQ*!^Zn9+!x{Vqv zOywkT%gCxTsQ93AvTDxd@PoqTsUC)4DryzCfbD*yxR769{kY%O*)K{O05i^ZQ@5vJ zP2_)j9o}Y`$;dHx9Duj$>}`51JKnN)tl*q{biK}LvSfCYb5L8lSGTC!h{3Gi=9Lif zb*Mt8NlczUQ1ROa*tV4m=5gG{h9NTUA$}Ouk+7|@x}wIZ zt$uYu`c^4$xQWwuvo?mS)8KaJ=DllaN`Zv3c z{$`@#yWFx5g%1wt=rj+kJIIstU!$5fHSiz0WQ>rS8WI(*N=L8VDKk*KP&m=bUWci=PZUIo4F39z%C|fJH~f!B@MJ!nTG=%ccs7q^m6iTaCylDM1#TRIp4H@$RI4PJ;I}%GdWnr2 z@*nd2#~MW|yLnE_{%>y7v_<5SZslq%x?<`_j_ z^=JY>`kZYeye3buSPmKQNQj)c+wWP9pa-=JKjc4n=%B3pu6+NgX2(=QS-r`2c3@Sf zol1ge59p&wcu&IKuO!EL`?%`RK$e*rp)lTC*gV;K7R16V!xJ!kVI@wJlN6hyXb}5y zE^9u5rI3}yyB)?~cbR(NslPe)W%ILO3#LFoYKW!6Q*i@=NaryizE+U#YxsSnNAzGs zFepBEq|ts|@-YPG!zyd8Ax>i*d?3_($J^^uLIN)FE}pBd+!Ro^X{Rn;VuO>MHDj0Q zdgUQm|EB{T8u3%#fqWDDHEC416l7hyYPrIplDfUQsU*{FcU~Kp<0&eG(?CX=VkvK0eEdp9Q4Wl$ePA{4D!Bx`_0NkTFvS=RZpgkZ%LHgMQRG z+7F14HnM&t+2hUJaeum?><04eM^AV0tcTa2uKy}ZA~avNWc!qQs9bLxt3OuHwC*mr z4#=&VzuEPgwBgp-f4FM1sK94-`>9z8Sxx|AQhsn2ftHNB^pTF%k{E{C<4d)hcB*sh z|9(WjSU3RBMF^N!Ozt%(H-^*|eTJ&jJdW9P7?9Z3l&pKSazCr{4qdPd+zME|N)haB zLbF5aV@=5WL?ma%Q_~wOayrb?@ugFWo*zj;MG<$07q^;zbE4PUjl{J>-{C+@qwaH6SJvgJTU&~1{7Q3Dl6CynSm%>rUUR!f zN5{5qT4Tl1>6SthuD&Qae6kat`jX&$+Y+L1>WN2#E5{&>XM*aECCy#dfEsn(3irqKG1%ymvUkY;#;Fxq(9A`6Mmo7ZM(6K}Xbz0Y5 zSFWi279swc!DB%@_-GL~ANOOCVz;%{dJR$+J47}p$PF*n7=h1{E0gbVIGV=YaleJ! z>wsgyh0Y>G^^4#8_E?I{H%Q>Lym5`vb>#xZWPIO62{u!vv-)_VUTpqUGyi8T^9V4y z|D&496NQ=zN!;Knkw$5}6+fh>;;`Pao~?K)?n}}r*}82U+MW2JkM?%<&N1;i8M0&f z9`ASW&7!iY+%@_kMPK32%LEPqD(5M>U?^h{ryo;3hdP;Jb|U6P|Xk z1oKA~^I9j_)v}rahSF_oO8Aqs9Zx%qN5_4)-0b-qbFWDw?qqRR_ii?NAIya;NUM@V z!8Ro!VejVxAu6&zg^OgXzuLaRNzr@gwfm%yI6YolvM0t4Msk6EnL7Or@XnN?=jnBj zmB|H3MUzg_0LY5Tuw?|SqAiIM6A;}xfV!cZD-=~($m>vhPBWWR@og%7tmgM*O zoRu8g&z`H))-+h`?6vRUXU(+AWs%JDV$lILPBH4}jTsz*HK4_p&eL<1oeQSw!=+mt z9GyFoW#{?B!=umA@jl8pepc%@mt-LaO>~xzL3$wGe#6#lUx%MGPTw;5o|Y5smX0uh=4^PR_ZwKFM2xKR{_|r zfuCuANv5c|4rb91Az0#kB{pAHRd+pp7p$`pvK@~6Qn3dMVkK^(h6csFTPjFNNr@JI z{a}mAM?}pz#OaEXbdU_}ReyjidIw;g{#8BGUikaBRMTgH@>M(h8zKb;-fasMI0(N? z)YdT!C<2C$;qFihPEL{h@lO2)8x{7hLo7hRj=APB$J=qv+gqrkDwf6dc#SIV{oan5 z;D|JN5 z@5-$0hOy`)pv=OV@-IHm_;udlCBtz(KvixpF2`9&cielyR^3vY_N&C92pq;7F!=|Y(d?J+Nk(X&SmI*+^ zX9fM7jeq(K`U<+^gHq;=AbWQ6yDudv)gqY(uTV~&_Y4sh0>tc+FOP8jw0M?%k5oaY zaB{J8S!h>O;8GTJTLA|Tm&r2o9Ve{}`jf?>Au9%kqx#lXUg?&V`m&U6t&!4&F#U&z zME%DSPgS|vi2nXutqpjC;hj*cE#S(vbvp6B}d@}naqx&D7X zt}h!r*fEL+Je5&C*nb5A`f?(1srrCpYSiR4(&>}<-i?L6l3*UUZB@TpiV#ezod89eQg-bAfe)W^;55-=)UfiB5fV82i?gx%Cg5BiInPCt@`J z%npE~KmlaW-_`B3NeaD|%i%L6kOqhnUy2&k!zqhPPRU=W9pkD2%hZFzB;H9}6@yhe zbK8n;^6pBCivipT)Mp;BpIAt-7gRogMky?zK?m!Nv{`m?LhFP|2JWh=j5IIOlp0zI zx{v{`t!dkt9F)Su4^ZAw9MSa5NNcA-XLsNlyYN%WXy+_0kTKb{{l6w)3ja#2TAH}% z{v94ScCan3?A}M!F5rBt_X;3+GTnESWct2Bq{WbD#ZW#+d!wanFQ4w%NQys3Uad~W zaGTbuE4Ky&=K{p{6Thn;Xw3Mw5%Yng5^h_|+xfFk7MIm;43t;b>BwwiG%B2&O_WW3 zl@?A1axMXLbAOk#@ik2SysRmD$3(4+ume4hR8(I~U&`Wd{+dd#;Nz+J(N!*CCY`-l z!jmQEx7Fk9?fuco1;Fu^bVT9Gf`6_x0BCl^iT|l&ZD?R5 ztKTo+Ax;gTgdz-NpsqTlN~ok%{scwKUBoTbE3$HT}#F4jm{{jGt=LjK^$CQ z2cl*#R*KA-Zdw_x*8cFC=ft~<%gE13m@ZPmmn#Za^<)#8&K?#mjiu&WgQRIxkBgQE zjOWV_feq;dZ%T6=*nHNyEU2r$tdpW%I!oF|rmbRh{doi$Gd<#K98RpXPD3usF*`2C z!?B-EoyJ?*_uKsGJsRt%8qsu@9i#1(K2O&o$POJEYCRi!U*4Tu>}kiJ(GE(gjL%Kq1FZfsYm5G^Q*YZo+N#ywgrH?fnwb0mWKx#M$V?&3cae06zvzFq{ zAz|w9w42pGoh>t{>u3FgC_Cz(`iWdVMtjdS@3;SptNcn-DEN9~$^|Od z^d$V5v^t-(%i`HXU@-$98JC2_e7aZM@^6+M5s}YKjNX4Hlb0&wZ6DNjlGHb!BBJ>9 zm#>03>5l3uLgjsz-McgKNBF)izcxwlEPu=`>aI>Jb9`2r-^MKcRF`5l3$(ZlL!I)H zvNToEOgJ~kK$ao8lSz8G*k;7XRXtNE%1-rR`{3U$`0B*dBu5V{p>EO#-I@8G$$$j0 zAMIVc-Jd2CcxYT#($5OjaCy-Nq3~g%ZJeX01d1728l;1GJ{=hn0M64&un!?4Ps06N_)Zn5|rMx30Cv{8d3nqQy=$s?r z%i3I&#RJZXEn`MWTeWc@lAQ`$lL+ro?tx)`>Bk*|%Y(Ul`@l`~ymY=2)t5gNb{kE| z0Z)D`uO~WpZFWA)NM^q9qRWwIa1{WID4F8n*f-X};_8+-GilL2-IkKWP|XW4kElVT z)%0R5A+Hv?Gn!A9+eJf!Ei+p6PnrDq9_Bq8%G>%D>{E-(>bFj6^Z(}g zV6h+w56j#vhW9@Sa=?7hJA!I6s!Dt=t=grAn%pm>cNRJoXp^C8h0SBE^@>cqa=Sod zT&y(@*SvyDol+v6LgObJlSHGX4hDI#q_}MgRy?K+!E9SA^g?!Xg&gPUjP9P~9kFtBRW)5$=N@>lw%ab$h z`0)l%7OJGaeIa_SfIWQ?rB3ah*qt)Y%e2nfn|A8Ui4FWGA_kpW290f!w_WHv85`8_ zpOht~{Na2xlz6Vb)^V}6%ufB)M*>bxcpZ>sLR#RGX8y5>DbBo4^VZ9{^C{>=kc6Zi z&%S%iuS@gEJH8KmF0kx$e+Q|5Tu5^0N(xArrPm`7Km0elb8tfV{K)>g82jkaPUMw% zwve-TO*3nxs_?Z>opT5XE(C~=1pWBrRQ9pZZ@5;bW#pvB2B|kOdH_m&mZ;*6wT29j zH045|aqy$0tE^o-cLia==@QV3hyK)t{|>IN2h*y_i=WBf-qc^e*cU{$H{G2o&A+vZ*Q_bWfj@ z{(JoJKRxAtyrhezc9VQ`_mSKXvP|&*M1_GN)zE+RCyS~cP6K`3&t9*P%eqDX^uDHmOO}# zzuu*5Ny*!?L z<~S?5yDxiCDQO-rWsf;zb9wbgcm;CQx@`8pNrCcM5JQxovSLvGTeRY_il`VJ_xwFz z`M0t!3EFziJ+`)bC1b`(KB0%|4-#Cp)LcNR{ll%WS$c4=N5T4m)bqS%{9@@tbRA9e zl3)@~8>DS$YsOP^SFJwfH#ht&s}$lMv&-?~#O0@10!<2VzBk`9D%aN?lxJF0oHjR<$&vobry>nIl9=Ao-vwhXIe|3V0 zstg3A;rP3ayPFHR_unP?ygAYORN_OnzZBb0_|<-6@*?=&`D_b*y_&7lkh=uremI`-ka!8fKz{ujPcI;aor>kMGMqVz@iQU;6Vn>xwri=b4eqDs1 z-%)wpz2o$0=&8;z<6YSr3;f}l=2zn^)3UVstnR6wkuihFj?rfQh zSj)|{x40wuehA#tAV}I{(Am#!siSpT^3h6dvygq2hcGSG z=L*IB;j-Mrd)S8-rH#Va6@K!H>zV)k8vWz60_KxCbDo87EA8(ub^duX_4op~C&jn|0({N4~Cg4<8`Qx>b2Urd}vUKw_V3RauW)gzi;mgf9A zENZq&u)tC32C9^5a?i0J?{gFJ<0E1D@~-K_x7tM9G|%eT1Zz*xDPUTBB(<$@=blax?fu(~$di{Yyj5CG17E!@Q@w}M)SCiuWosRS56;z+3rEh_ z*1=&uwE)wN9BOm%@j_b;mCOHW_dfpl`VZpszwTTm_Fpl@{~@ARQUzEx5e0LN2d}}m zCFiEA%6tUlAC}rneX=U7G0%v;8zRLAo;u;LYI6>jJ}pC-!5F=Z)6P&)b!4xlt?Jup z`rGD#z6BWVd*ThBlW_8Q3r~RCM^gzbt3p4)^cCVl#t9%J=udsZPEYF>f8ZCL265=VD zTQ~>L$@a+1-1Ic}KVr6_URv?9Si~qYJDezKR+Eav6PlPcN=r&Ye=wZKbmk9-&{5XpXbHE6i3`eOqQ{@Ah=xH5^y3+%AhoD z7v}Asxf?WKL&X4rkV;7OX%Bd75PWd_O)hjzryDLa(qIPTz9#hn-+v-n_|RP_6Hs|$ zG-tOour^J6s8+E2sqyeOrY=}GMRGeSp=)tK7#mJ-{leB<=w@i>k~pH*i9y;=co@!8 zb53q@!BGiiP)vj0+Vg>K&>RLmEkEgq?^KeMou26^zieW})ffL0X-hboY?tWdY#!Qu zA;t~Mf4p!|nD?#_czSYeozed1ealRHcSu=Mpm%&9MMA4~v&#D5XS1q+G)@pd7V%h; ze?y43c`%W6(YE@jMF1o?jqK+>Cf2{r&nexhE_LH3*Cty?gvZUbTI-8UFs(cv^%bgL zmCuhPKuNQLy6+CWJzYLomN^ z9=5;Wo9$b<$Uopa3JPi}n(4jYcJq;@sHOarWBINpZwV$nE-vDR)#YH0rkEcN4^9uH zEqOfX_37KKjz#Rt5omPl){Jv3!%@8=dWb0PK}Uz`S4nxnJL{sixu^Hd=6)gx_jF9J zZ0XOw-p@&+lS#{iFVa!@BefZs-^PU8d9T+BqO4e&=Vpjd$4+J_PCT}4`SswNhu^OQ zR>K}!w*#DyXjWJA%Sit`yih+Gru)_lJ{YFkY&VH3=`Rzi&6=s(?1rr^2)S)7^iVcs z<@?{oP3O2XUsk$wqniy`JMw^AaG)i{xQ|*gNnoR~aY!rgcL4u#&15kr?mnup&ipfP z8bC#X!CkKsxWmJP>v81C#yAWwy>_*tA}u2~Yp9{La)lq2tY88s&gR~H)Kz%h(ETM9Tz54U{-7B~1|PB6T^Q<^a_5fwiUX0_q`1X0A>7fAit zl6^R2PftxEVQzi)W0>uDuUXvlj@r%x^?W#^5{>=)uTtsrL1)>opZqZ@V!11Bq6{#N zm}8?SuIQS-%{7+SIF!?XNjOc;yccD{F{;E;Q|9OB#=plcIbVhrKat;XU1CWS->4C2 ztG=t<^>yc^XZzqCw#`_B!;U$xv=p0ns-bKtT}1JJF~D;#?1{I#bFa#**1u}l1HOxj zECIiZ>N@|US0&vBdi(OwV=R~sxE9?w98Tl^L#4!Z zg$Qlw%T>2W$7ce(*->di zemm27le9F{l`AC&uIq8otJ4R@cRhAPP%0z!M@_FYbEfO5i|()G|BBoH6?3NocmI;u z|Mnm#>fDGC`-E{ZvvgF`Y#)gYNXoPLv+yqeUO~u-KVj_OJWEvKWy{VjI2X}MgC26PTRgyb2XAE?(C5xdGY=khInj+A(Pd_Qpi6f2IZHbtOZTYuJ4DE=mf)4m?G=g~uq?(@|JU+&|gcm3ZO?f+uFdd`0_-(6(7yMG{&o;b9{Dqn;1Cp0NjiMfg= z%Z60EqTlLMTYhm$Pfm00G3Gg0)=|1pd=1OU$H=vQwzEC0OR@tz-^(M9l$4ZBaUbxC z_iTm{b%xCOA~Fhqhj!R4jG5WdVeqvzl;78_;#TF5YkDan#qr#%<0uk{ls?at;EP4i zSS0102m0;xq};#g`IO_2KdsemAJvQZ<1Kt@45zy?Z=(Jj<}!9==7YbZV*zRG`be=N zsf2dLUdm9@_2&;K{qQJbma3YTW|Ug|&r>BWyL?YAHBZgT{*Q@DlM)r;1#QlnVb2wN z-Z*G;?cOK1zli@PJpH#}1Q^TzSV!F9*_9s>{4Zk(FqVMaG2?n-C&|A%w2dzqBBrw! zs|;@Yi*xP}as|=-*;~@KD>!m$tPB@THVIuzcLuU91g0EcppmkQn)$Gshkf4yi4BQQ zo`+|jLjhi2Y3j-&-vTFazB4hL$!unxE|R?AvmyH=-do1-V~jzBK` zUNQh~Kp`g2_2^sOFP9h2kLM#Kmm_H7C^{@7=9J3t5D@c4xNi_VYN^21jU2?9|5`bB zB|sEcP&#zfTvpPZd-#WhU!FB#|HwQr6Feq0r;RKRYBYzg_#Rl-+NNetZK{-~YDN8Z zKVfL80E;e|b&#~Mr>5a@3*>nFFt=~NJh%?uqaE*~q003~Ot9t5^IMMhA8g+V+V47h zPQ>XE-F*Xq^n&z#BA?Hu%C@w(-OfrPORX7itwpq^ZJD^}Q^z2s$GgrWG*F`sgUnF* zN`XfuctKiojbxrddho4Wv3k)8S+N$%R69+ktJ*pXS$wPoc=FnM)FAW^O#bH}oz9%U z^iM^{p=5+sBGzhy+(NL|mo-CG<2w(^&OJnMyu zr93_D!#-4esyJMd4}%_e!sm0_&}dPfXe;(9+@epT_HtdCfh*^}dhVxwdNO#Pz1=43 zxrom5VWRq;#d-F0E{y+}&Af7HAJ{=1m ziQ)8R;w~`nsC$#T6A5hfQ)#v8t1Id$9QV#B(GUP+s4m}_FPXSu{duTM$SX_u_gP-LhayM27Xg1Xb zg?NFZHH-uhJ72IQZVmQe$mDltjsgb~DJlE~8ObygGC>%~qn@YB85ZUGLGofRGMD|U z@-;snGc&L3gz1kgyf*AS@unK}_R|kMzwZqt#3m$J#Fx}N3d%(A!$iR9OGt~c2v?R3 z2Rk=M^bSI%6H2!{XyD0|m*?t8UoFSu7!qqv*eO!Dq_3u!qXAIFFmXf%S-Og`70R2?-Zc|*kk^ULCE2=P8b1M5Gx z2oCyv_~<^hrIZL5q?Kx#CC0gFte047Itz*a=IFqSHtzoOo03N{_H}DkpSwcE3=x77 z#s4`QikLp&`zy&#jwF@wfB#5QUqqS%sG!R&zijMaisV+;*Wb){yxxrazjAaiT@2D@ zJww)gUqQC;<HGKU`f2~WpTlXh3B)-hsYw!%ih$5{G}FMk<-dme|(84R8|SgN;%)N0&9$}d({h_Q;mRo|oGlFSxEJ3R#2 zJ+EjgYeq-qdTm>KEA-kPA(M|ziUG!8!^6Rhz#=YGb-1-mJ{T&zBIvM41w?uYX$2UQob4m< z=cp$nLf9^$@m?`g#wkj$is-dyU8f@=^m5&AU+hzJzYrY=es}7Z>d!6v)-L$ymAoQT zlR&*bG^C^!_XXkwzZ<oVN56 zdiu2n_Rk_u{=dtPHr^u&JiM)SWQ(HycaJ0w;$PT)sJ8pfyEq(NakJNO}#u#G^|7R}t*pPLh86-I{m4RI|?mJK}bv!*;g1 zURhQOWLU4KY~)h0@8=OF4n+LrBNna`WB`}Y#tCzl{=h!shv#i&QXfvwV!xN0`2leA zDs!Hhx%pxdG3~oFF#!yy%l=r+^H4HB@(vor?U>#RZbrf(LHIO)ITtlL`%eQj!si4) z|LJ6&RIAM!WZ>dO2zA0P+3R_zAYecDFDQDZhn8DoU-vI0+EaZV2`4fJJ%5PByH!sV z{u&N1Eu^43oOP|`z1%=G&c9l__DOnib~~Jb;WB6TNLoebrfcFhwY9@-pEsgfkf?oe z35bVL0u)uMh+}3Rw2zvy2MxOC1w}eCNLOd#i%?Q5iEZeHy+B|H-5fF%X6;n+DgbM| z0U<5qL4iF~{R%x)PIrdffpXr~B+-Te#EX4zZOKb_HQGviUdY%mbqF>4J%av|`|Y-T zMR!bGX`(CN`Q&mv60fo9f7Z&NFg>IpKeo5DL6%kG+5CeUNi`;~O#!ac%qv*iE&gKv z`QeIg8)(#?<6lxfe8JqX2Mjr`1_^wl5AGbO{oV zqs_!o^}7GDgy_3=FkL8DF3abDf43h(iJ|lfTBX;SIF$7TIr)dM7;&bfk7S|i!PLhR z?%Y04sCfHh#o9a#8LlcN6qs-wowA!Q{U2sL{7|wBqCLF{`2MhK8vC>?tfbOwSjVVq zABc}pmu%vEzn)V{e3d#;UE_KNjI;#5Msl)zyjtoS5W;i$_E*SqHkXL_4qUZ_5tw*-_BP<&r=c*HmUe>H*#Br|3AXM zG03to$g*tPt}ffQUDah*mu(wec9(72wr$%syRffkVmCHsW@CT7xN&d1i1#9Iewler zo>PG^zrT!OCy;?sWd=ZKM-X(r@HPil>L{R)aeM`&dbZ`eapb%4f4s~)vlQ%`1^Cj4 zeOha>WVE z-KIyN6<8WarQ&2Or-!9e4G&8>SH$5BTQNsZRR+V)fI;urF^Mu4{tQX4nvhbkXV6rT zbW|+l3Oe5uJH~3LxYMvLtC1YNBd^Wqo*qXaMI+UY_X9louba)bpwUbH?ymT76e&k@T+uBnJVxXx$9_RyhvXlCW7T9Jz8k(g=~+mNcv z2K6z?%e-~ls$nJ%;adDo>FIWEP}qihX@Mt;R1cmk{|&3n<0B^*XHSu0GTDjt?bfIhOob_E zjmaA)gB_c;>*S4Zox@wn1(&YxqLuoEB3=UWe~Ezqdbt`2V5fU2c|fnczI(Ic5dS6m zT#Cl!Fwgxf1UI67iPkNO5}G>vNL+*`OxPVIaRdkuhQ5>nR*UYO@+zaBB^557D>wqB z52`e}HExFv7#4@=oepTHdtRmfq7F?vO`RSzI*oxWYH~(gtPBmwsF$34pEfH>;&(Wc zLoI+xF<5Z`isog-8;_UZ(jd_%?CuzLtw4FGiQr!6);TW!?CbMyq2U0wawKxWnPAW# zM?m>NT2CG9API_Gc`GB`qSaPBb(Hd!&*Nmjx!#&3JOdT;x7*)W6D zd~dX8XUvY30i!aEqrGC?>=SjG{O`2D3+{bHY>hvl1wbD1w~X+FKd_|^n(yzA$wWXo zXr-wuvSWRev*PdQTsN_2vJf|84(>^Du!G*zcM}5E>b->QE!cM{ELNn>(+TUHRshRW z(f8-mYF}$2zQ`klndLir_A`%{2;@w1FegErUX_0Z6PU{q%h%V(;M^$2dhq4D*R$g| zu0xgD6VRJ=RXQ;G8~)KVWCHxCp2vpWnsD_Z1~kFKV-GU){*0_V-gH3|*;%34#;V$y zb1=9F|8)4NK<+~5=i7LdM2m}gv^D5@RcEsDK`^7dOZQ5UMHsuW(OUigYi=S@-G^Wj zFcEiM>UvX7N8KbbN8GN$OeHZxzYg|?A_25)3GjYhXW}qn$rylir9SaXo+VjYV*A$h z1?BUQ&(5ns^ps6?Yv@7HS#|?*xJsq=(K9!bzob zSq%H7QN?sirNJ1?v5nubBgr2}F9qlNn)~P<>4*quxaPI1@}WZos+djiw1oMepPyuS zgOq<(M1MSOd)>s#M=i?9$jFFVLgYILIYz8HySOCvGU&ASrgbcAUkeQ7?T8%=Eyzhr zW}9aU9Yz?%KG39GT%nd}&Z>i7eVg6L_Z+fUKiq*vZ<`)bYt~~VCX;U@G_9@4JNn+e zh)s`WeDraRgt=hw zo)YlVj@I*n$Whxgn~BI_4%_)YWVC3TKKRQ&4E%2`fO{ig&O^eViXFK=lnTJ#YKko- zBtk7H9V@kiI6tku+<>IEU}x(bb^Ub0HtU%VjqKF7uXSg-5Td^zBd>g*7}F%7@I1ke zd$!i+FGYJ^o|2BN8jhoLR&}@W^lg`L8_qxHUi}#C2+mxWJ+}(Bu2X(@sZ4ybn9S=;d_08m zR)nGvG2`*t&v>6 zCG9Q9eE#Y(Dm$gc+-f3NU)CpjmATo?yWi#e{jidp0?`(YfNKVkHT9wO?7-K?ozoR%w*x%XmJ)=o(R*`NF5Zft-|B)sq2q_7krx5AkV~!1+`%Q{ z%Kc>Aj5U>6LtQNYI~4MGV7h#X5UPh_y!J5$gP%2i=u+s@)1r!kL&wnrALYn((^f~B ztCIuF71U`~d8@;`GVme%}UQ#AM91zUCf^#M0=kT+I`og>ey9n4vIeO*0lUr$HTE!DPNE#c@K zU7S=BNmqyUq@Vj`h9Xg3N2l{NRx}J%41DaTzf3|BJXBkf>d87$feqL*ZjYv}9lo&9 z0yhiGJ9VBu-1nQB*VKIKd!9loJ`cKLb^>A%JtsKxc$y01|L5TNZ=rLE3KEXnq9AxJ zBxfCKe1J_$cw;VdH|HFcah2Bre`qa_`d8kA@usLEJIo`q2XYHBCv1f9$n-a2%agCq zRqWGojx}0}T#a#}%+nx`>WtaKM6{qT8^ijYpzZQRM1MxkCBC8pNBy2Ddq+Av{qaI% zlf0gZ$4&u_LX+c-`c#b_ZZm_S*L|2GxV;2Sk)Svc1G1Jq5s4e6rWO)yrm&%N6l4m- zn86`ZoV3l!wF#M=A-SoTuO=M9O!IY5XO}ZEt8J=n{#kk(|M2E29;_G~_QWgi_pfgE z(F`p9k;l?%d+o(N7BdXln-B8{p@p+NmQG7u%e>X!c^-X7dd}C4Mr1~YF<$+~qsI!3 zbz*c2&00|{_UngY<)XHI&1b}z_o!6^2+}8bUmvQOg&LMUQRc)90o)u23nBno zHaIG3HRRqY_XH5D>b>rdj&uvUr#61A3_%PKm@>uAYny^<+KY|9&Gg5R;t0vXBRVc^ zLWtX|Wt1A`G?d12Sv0CX%gccv#UYekd#*04#)_hn$DV`2GNY-S5R;|I4M9Ff3}9a_%d zWg3#0e&EvL0@`%Pl+GdjtT|iDSH^@h&x%C4hj6$|aActh#L1_{Ni)89 zcp2fnx51pv`zSz06;eXFzs_~pdxQ#gZ@09mKXZ-*Mq+B@Equ=I&aMO(v$C{cPGMLR z=lG6d7y~TRk*pvjhl!6CM06v3TV7#a5|9UP1(AA@xz{cPdX!)8r!8xo>UaJwEWd6V zzpoW`vZmRnPW5l6CaIeh!Ox4ExL9cM`%YO=IUQ`_5tn&YuIOH1b{EpRJdm3Be2Drz zwf*W|m)9W}FE6d%dz<PhKwWFi$`!qT~0l@ES5V{nbS`N&X`^B9R3n361 z=RAN`+J{tvzAhyjV)F>S<=?i?S8IJ_~w%iS7M!0xvPaUL;~qX0r_oZrshU?waMy<4ijXs(kpX4jkClGm8)6J$Nx+ z48FeHTWi$HEAdRUa~2B(%y4g(aS4qJV(ahLJRS2qddgcWr!TQM#?P5ylR@f*Z9%yZ z#qQfv52tuyi(Tv@jkh|M>soX~3hw$#%D#<*Q2&lb50Ld5+=|P0sOBB}Z(TfeHlcbQ zBr5QSZ~e80B^%n{WpatDM&dU(>S}pztsf)QLi`fCrO13@-i+IP;+8X<=Haj* z4D0r<^w%`XPhd>35X=9GG2aI!!Y)5>+e^5QWs}LFj$TGiiX$z7rm(20t=q^oRE_oK z|J=u&C9P!6%KQ1a(9Ci08z4nh*+NJa1%WyZFh2V-cPEQur6=KLlFIhJmtq(}ONs3` zwNARZyj4tmqFcx6ickO+d>zeb@Lxul|mRYd!8!WP#`#cd_#5BM68j(Jfxj~i4B-VO-A zN6iw9TP5<&aA+FG#xH zHK@c5OPv{MIZ>VJtYht*LsASEjLH;hLAn+(x<*05%_Sys!Y)i+44BX^%Y zq92IwsnRAU8@{LJMj>f z^(F6j9z)@T=eeSWFd3uYeB_cf!*XHTqu!(pr)5~}T9U}FXp{sC*5xjZKEjq|2uFfF zauCW`Dfp>{M~NH>H{9;(5*XBKoGh>B@%PGUh7YqWpp9ly+pY^7rq35373-S0QmHWf zT)IssZ%7MZsfMz*#r=dZo6g)5(IIQQss!=x^zm|cki=s(+??N7%^Q*IpMW+UVT#NI!?@a40r9(iVHpY*hJJ)TZ)pGYeh zh=$>&% zRJ+g%EqMRG#pb_kbWIR2Br)Mu!(`El4ni>Fl@N^;u#Yq|biyT)?K;9@Z3M>Kf>1tE z)yTJakS(0oWb@h9{qEWvg7xAc61B0;4>0Fha`sa2zw!aDUWjWhV3KLL5F1Dp$;dEn zaL`-R%(X5oub-aiWEu6eN~=0}F6h%4&=L%K1=ug$FXVhJCW_g$0Tz>Xdy_?Wq4c2C zfMLR-D{EnHe-=V`fzn)Dwd{zC#E=xIpBq z-=NdORQEdIzKn61DEwJF@5?Rj)2K9y=cu`{td#!$zy-U`yWfSQ{5Hqk57Rt9d{20G z_I}@m%-X92X8poLj&K|sn%)D|Lpb!HN5X%nLPOZ`KI~~@rKwHP^9=W0Beb@(Loo$DF5K#WWvbaI%fNQc`QsF70N`n8L12N zeoxu?4&-Y(;{*u21X>n|D2GU1SJZS<=gB563WJj4HIumG7SU_CzR5C&$wl2KqNFNf zkyizyxf&}rrIKtl$0Vlod~Wox^^e&0FiUJqg2O^LI1RR4jX~%;e;!b)4 z*L8{hITkkb~|Fc&bLmgv7mi`kAkxRuc ztrMLT7eb4KI>3#m=XJ&QGypt(*;!ahnf<+w*~6$lY90TFftW=|kFJe!PO#)lcz4f` zmKzubkKf-hV95akfr*36jUbH_$a2~5^Fm)6V27ZHW=#blMw!RZ{hD9Vg{)Ur3eI90Rf>WbG8%Uf?xU^xv> zfSD`bCS`?!M7ME_nd)a##lTB*at|*a?S_OmPu@#kh4KD0QtOtBr_lL=FenDg-`>2nk@yVIv>zhy)g1 z>-amheDlw&_=vqK9-GCx3b_bix(2cI%EAf4Qw_I#)9sK(tu_bi+A0!+%Nc~m+J4jG zC-ujCKqCy zE&{+lL`URB+N~8!sg2A@^-q6-~M>qmL6r6~6(24!1jUR*4!D{u+Nir838xx0| z+j|%6A4MxH0))N`b{1#4N4jIrhVf(J5<*IneaNVRJV}sP#4v<{+Xie=S)MpDjCPgc zRL)%Wc)l182;48AcM3||IlV~9NVN7nDv&0Xk5-vdE}mIp7gq_IEF_ocF1WRD2JF+E ziBj!D6nej{RZvv$mvB>~ljht$w}{gpm_M@6WCx>)!DEf$;TNf`I+a)^AVwdErCc?P zlzWB92bUWP5a`gSg%Fx@sq%MIb2=s>xKd!Ga+k7TKOl}q9Tg3VFH)@-!OVYy4wf1% zw#P&U#d@pIvC2r)=IV$@!t6NXTlPVD`#eG0An-heL|2UW7KxM4&a|%AQo2q_6tjiz zCLl|slj5CH5d=UZlkuPr9}eR)^Z>(0b_6-cSbB;v0OZ5i5l+FW{g!+ zMc0{S@1uR{uSTwky3xvTFs&3y#D(c|4Sg`8UY!i8avgfXllelRbq3-p#L#+BU~pTV4RJ8P?+c24(m#@y5wzmT-A`Izu{nNIncP6e2(+4mMa99R9|G`Z=%b$h!YOKN#@ zwDrzULi)QHX=daqXc{bkMXYFiIXHa`Jg|#Qc6T>FPTI$DM!o=jeJZVObJMM!wph9P z!I9AcMs~frr1l42Yu-am!Z%v_%KwIWmlPmZS&Pa=92k{CHUd**y8j;AA~uj}epxu( z%<5+40pzDuGq7WI%B8DM=bR}rm;d-8qFQ@UIeoVqkO|hOY@)bUhZnHrENNZXINW_3 z^Jxg!!QAeXqf_wg6tC1P`J(DubBK$Ig*qqYAv2VFq!Ek{DJNFrr1AOG?AtoaaSirC;XnPPf7}KHHq^%_ae_ zICMn}W8gYavB_nLRftn4l;Au63&4>!j?_q@{krNM*+2;k1=ne?W7}X$xbl@3EFqsZgVVt|89az9`;z4jy@7y(08CT+c0+NX`m6BPU#@!Ai z!QZ@PkKWv9X=~xZ zGFaHzr_-*t7@`>>7lfTGM{WZ1 zQWHZ-VX$ouUZb68hEJA9X#5@3JC2ZN-)M_7P7#{`JMIL@LaBGcVv2-{k2DS7p*f2i zT#cmhTMTkYWi*Tv$juckwgm?#4*+UP=AAmcQid?Z5i}f|0BP!P41PnTr|*lThaBQmI$K5mTwrNbh-^BSdu5-0pP+EN)lCKIIEWkUbF0A>3PhF|&j?KC zI)%r>Z`G%B$H&(s4D{vB{5?&*U>TkJ&0H;e4X4M$0O?OudEzgZh#}(Y4e;KM7x*FR* z_SfehtOgRhs=FRPZb8I6iylG8cH(W#TDdnXr8T|$Dm?NmMS?0C6vPt=^*cS6dWfkm zNGUo-JkPeu5y=F+nA5LIyaK79|4-@k|AZkB$wBmc+1)99_)F#UU%T6J&(5M`JX-HDH8h6lR1_gq*dCB2vxO0r)t4Kw5&Yqc#IKgB=40!pesu zV9SQ(d|sN3(o3R`LcWqSV+Eraqj@7ZgGtA+`!n?TJ#hF1xdgl+^TOdV7s5yv!XZJZ zf~bY!o=LBh_whn>}#YPoab+xEg5&NL|(odfMU7I^5m6>Ezsxm zE=UF~#Uc^oaDV|m73Z&Bs1nwOn;+2TCGKRM`&`ohM7PDuq9pR(MKpp;k9VgkK^0vU zuKHDV%y7wAK35hXtoO4?Rw+!*sK{NRD3&o4>uY@Hb8AOP70RCtL8RJf-d*98!S78* z5sDCUf_6Ir7zdG#&kWy#9*hgV9A+URKr96LD4-AoFPP2<;*B)J8#V0o)xS2sFId;< z4A>DWE|2k0N~@3rC5%!-v=Ok{8YYyxaEKN?+}dCaH0p$Y^GtSwlH_kW= zQP?!4h2PS0i53oEQZ&M(LG=@-F!t9pvk;y76gjCLeu8BZHBPNlSU}{A^ij|E-yW{; zWl(NIoKR|35LsKNY)7jRnEQEInQ(bCRidVGSti(I_B>#f1>j1maxsj`EWg)Kzt

2c5|D6O=tc=(5rI$j@P&2yBqo@4tTEu`+QE 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%0Dai${ujGr< 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 literal 0 HcmV?d00001 diff --git a/examples/advanced/rag/embedding/requirements.txt b/examples/advanced/rag/embedding/requirements.txt new file mode 100644 index 0000000000..dd1cf6cf27 --- /dev/null +++ b/examples/advanced/rag/embedding/requirements.txt @@ -0,0 +1,7 @@ +nvflare~=2.5.0 +torch +datasets +scikit-learn +tensorboard +transformers +sentence-transformers \ No newline at end of file diff --git a/examples/advanced/rag/embedding/src/st_model.py b/examples/advanced/rag/embedding/src/st_model.py new file mode 100755 index 0000000000..19c0ffd10c --- /dev/null +++ b/examples/advanced/rag/embedding/src/st_model.py @@ -0,0 +1,26 @@ +# Copyright (c) 2024, NVIDIA CORPORATION. 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 torch +from sentence_transformers import SentenceTransformer + + +class SenTransModel(torch.nn.Module): + def __init__(self, model_name): + super(SenTransModel, self).__init__() + self.model = SentenceTransformer(model_name) + + def forward(self, input_id): + output = self.model(input_ids=input_id, return_dict=False) + return output diff --git a/examples/advanced/rag/embedding/src/train_fl.py b/examples/advanced/rag/embedding/src/train_fl.py new file mode 100644 index 0000000000..b501f69e01 --- /dev/null +++ b/examples/advanced/rag/embedding/src/train_fl.py @@ -0,0 +1,158 @@ +# Copyright (c) 2024, NVIDIA CORPORATION. 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 argparse +import copy + +from datasets import load_dataset +from sentence_transformers import SentenceTransformer, SentenceTransformerTrainer, SentenceTransformerTrainingArguments +from sentence_transformers.losses import MultipleNegativesRankingLoss +from sentence_transformers.training_args import BatchSamplers +from transformers import trainer_utils + +import nvflare.client as flare + + +def main(): + # argparse + parser = argparse.ArgumentParser(description="Train a model on a dataset") + parser.add_argument( + "--model_name", + type=str, + default="microsoft/mpnet-base", + ) + parser.add_argument( + "--dataset_name", + type=str, + default="nli", + ) + args = parser.parse_args() + model_name = args.model_name + dataset_name = args.dataset_name + + # Load a model to finetune with + model = SentenceTransformer(model_name) + + # Load training datasets + if dataset_name == "nli": + # (anchor, positive, negative) + dataset_train = load_dataset("sentence-transformers/all-nli", "triplet", split="train[:16000]") + dataset_val = load_dataset("sentence-transformers/all-nli", "triplet", split="dev") + elif dataset_name == "squad": + # (question, answer) + dataset_train = load_dataset("sentence-transformers/squad", split="train[:16000]") + dataset_val = load_dataset("sentence-transformers/squad", split="train[16000:18000]") + elif dataset_name == "quora": + # (anchor, positive) + dataset_train = load_dataset("sentence-transformers/quora-duplicates", "pair", split="train[:16000]") + dataset_val = load_dataset("sentence-transformers/quora-duplicates", "pair", split="train[16000:18000]") + else: + raise ValueError(f"Unknown dataset name: {dataset_name}") + + # Load loss function + loss = MultipleNegativesRankingLoss(model) + + base_model_name = model_name.split("/")[-1] + output_dir = f"./models/{base_model_name}-{dataset_name}" + unit_train_epochs = 0.25 + # Specify training arguments + args = SentenceTransformerTrainingArguments( + # Required parameter: + output_dir=output_dir, + # Optional training parameters: + num_train_epochs=unit_train_epochs, + per_device_train_batch_size=16, + per_device_eval_batch_size=16, + learning_rate=1e-6, + lr_scheduler_type="constant", + bf16=True, + batch_sampler=BatchSamplers.NO_DUPLICATES, + # Optional tracking/debugging parameters: + eval_strategy="steps", + eval_steps=50, + save_strategy="steps", + save_steps=50, + save_total_limit=1, + # logging parameters: + logging_dir=f"{output_dir}/logs", + logging_strategy="steps", + logging_steps=50, + report_to="tensorboard", + ) + + # Define trainer + trainer = SentenceTransformerTrainer( + model=model, + args=args, + train_dataset=dataset_train, + eval_dataset=dataset_val, + loss=loss, + ) + + # initializes NVFlare client API + flare.init() + + while flare.is_running(): + # receives FLModel from NVFlare + input_model = flare.receive() + curr_round = input_model.current_round + print(f"current_round={curr_round}") + + # Update the key name received from global model if using model def file + global_model = copy.deepcopy(input_model.params) + for key in list(global_model.keys()): + global_model[key.replace("model.", "", 1)] = global_model.pop(key) + + # evaluate on received global model + trainer.model.load_state_dict(global_model) + eval_loss_dict = trainer.evaluate() + eval_loss = float(eval_loss_dict["eval_loss"]) + print(f"Evaluation loss: {eval_loss}") + # Save the global model + model.save_pretrained(f"{output_dir}/global") + + # Train the model + if curr_round == 0: + # First round: start from scratch + trainer.train() + else: + # Subsequent rounds: start from the previous model + # Since we perform iterative training by using "resume" functionality + # we need to replace the resume weights with global weights every round + resume_from_checkpoint_folder = trainer_utils.get_last_checkpoint(trainer.args.output_dir) + # update local record with global model weights + trainer.model.save_pretrained(resume_from_checkpoint_folder) + # increment the number of training epochs so that the trainer will continue training + args.num_train_epochs += unit_train_epochs + # continue training + trainer.train(resume_from_checkpoint=True) + + # update the key name sent to global model + out_param = trainer.model.state_dict() + for key in list(out_param.keys()): + out_param["model." + key] = out_param.pop(key).cpu() + num_steps = trainer.train_dataset.num_rows * unit_train_epochs + + # construct trained FL model + output_model = flare.FLModel( + params=out_param, + metrics={"eval_loss": eval_loss}, + meta={"NUM_STEPS_CURRENT_ROUND": num_steps}, + ) + # send model back to NVFlare + flare.send(output_model) + + +if __name__ == "__main__": + main() diff --git a/examples/advanced/rag/embedding/train_fed.py b/examples/advanced/rag/embedding/train_fed.py new file mode 100644 index 0000000000..428e28f8bb --- /dev/null +++ b/examples/advanced/rag/embedding/train_fed.py @@ -0,0 +1,56 @@ +# Copyright (c) 2024, NVIDIA CORPORATION. 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. + + +from nvflare import FedJob +from nvflare.app_common.widgets.intime_model_selector import IntimeModelSelector +from nvflare.app_common.workflows.fedavg import FedAvg +from nvflare.app_opt.pt.file_model_persistor import PTFileModelPersistor +from nvflare.job_config.script_runner import ScriptRunner + +if __name__ == "__main__": + n_clients = 3 + num_rounds = 7 + train_script = "src/train_fl.py" + + # Create the FedJob + job = FedJob(name="embed_fedavg", min_clients=3, mandatory_clients=["site-1", "site-2", "site-3"]) + + # Define the FedAvg controller workflow and send to server + controller = FedAvg( + num_clients=n_clients, + num_rounds=num_rounds, + ) + job.to(controller, "server") + + # Define the model persistor and send to server + # First send the model to the server + job.to("src/st_model.py", "server") + # Then send the model persistor to the server + model_args = {"path": "src.st_model.SenTransModel", "args": {"model_name": "microsoft/mpnet-base"}} + job.to(PTFileModelPersistor(model=model_args), "server", id="persistor") + + # Add model selection widget and send to server + job.to(IntimeModelSelector(key_metric="eval_loss", negate_key_metric=True), "server", id="model_selector") + + # Send ScriptRunner to all clients + runner = ScriptRunner(script=train_script, script_args="--dataset_name nli") + job.to(runner, "site-1") + runner = ScriptRunner(script=train_script, script_args="--dataset_name squad") + job.to(runner, "site-2") + runner = ScriptRunner(script=train_script, script_args="--dataset_name quora") + job.to(runner, "site-3") + + job.export_job("/tmp/embed/nvflare/job_api") + job.simulator_run("/tmp/embed/nvflare/workspace_api") diff --git a/examples/advanced/rag/embedding/train_iterative.sh b/examples/advanced/rag/embedding/train_iterative.sh new file mode 100644 index 0000000000..1ac5c89ff3 --- /dev/null +++ b/examples/advanced/rag/embedding/train_iterative.sh @@ -0,0 +1,5 @@ +for dataset_name in nli squad quora +do + echo "Training on ${dataset_name}" + python utils/train_iterative.py --dataset_name ${dataset_name} +done diff --git a/examples/advanced/rag/embedding/train_single_session.sh b/examples/advanced/rag/embedding/train_single_session.sh new file mode 100644 index 0000000000..248c7abb84 --- /dev/null +++ b/examples/advanced/rag/embedding/train_single_session.sh @@ -0,0 +1,5 @@ +for dataset_name in nli squad quora all +do + echo "Training on ${dataset_name}" + python utils/train_single_session.py --dataset_name ${dataset_name} +done diff --git a/examples/advanced/rag/embedding/utils/eval_model.py b/examples/advanced/rag/embedding/utils/eval_model.py new file mode 100644 index 0000000000..757819fbe8 --- /dev/null +++ b/examples/advanced/rag/embedding/utils/eval_model.py @@ -0,0 +1,58 @@ +# Copyright (c) 2024, NVIDIA CORPORATION. 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 argparse + +from datasets import load_dataset +from sentence_transformers import SentenceTransformer +from sentence_transformers.evaluation import EmbeddingSimilarityEvaluator, SimilarityFunction, TripletEvaluator + + +def main(): + # argparse + parser = argparse.ArgumentParser(description="Train a model on a dataset") + parser.add_argument( + "--model_path", + type=str, + ) + args = parser.parse_args() + model_path = args.model_path + + # Load a model to finetune with + model = SentenceTransformer(model_path) + + # Evaluate the trained model on the test set with embedding similarity + dataset_test = load_dataset("sentence-transformers/stsb", split="validation") + test_evaluator = EmbeddingSimilarityEvaluator( + sentences1=dataset_test["sentence1"], + sentences2=dataset_test["sentence2"], + scores=dataset_test["score"], + main_similarity=SimilarityFunction.COSINE, + ) + metric_score = test_evaluator(model) + print(f"Test set evaluation on STSB: {metric_score}") + + # Evaluate the trained model on the test set with triplet loss + dataset_test = load_dataset("sentence-transformers/all-nli", "triplet", split="test") + test_evaluator = TripletEvaluator( + anchors=dataset_test["anchor"], + positives=dataset_test["positive"], + negatives=dataset_test["negative"], + ) + metric_score = test_evaluator(model) + print(f"Test set evaluation on NLI: {metric_score}") + + +if __name__ == "__main__": + main() diff --git a/examples/advanced/rag/embedding/utils/train_iterative.py b/examples/advanced/rag/embedding/utils/train_iterative.py new file mode 100644 index 0000000000..9dcd02fba5 --- /dev/null +++ b/examples/advanced/rag/embedding/utils/train_iterative.py @@ -0,0 +1,152 @@ +# Copyright (c) 2024, NVIDIA CORPORATION. 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 argparse + +from datasets import load_dataset +from sentence_transformers import SentenceTransformer, SentenceTransformerTrainer, SentenceTransformerTrainingArguments +from sentence_transformers.losses import MultipleNegativesRankingLoss +from sentence_transformers.training_args import BatchSamplers + + +def main(): + # argparse + parser = argparse.ArgumentParser(description="Train a model on a dataset") + parser.add_argument( + "--model_name", + type=str, + default="microsoft/mpnet-base", + ) + parser.add_argument( + "--dataset_name", + type=str, + default="nli", + ) + args = parser.parse_args() + model_name = args.model_name + dataset_name = args.dataset_name + + # Load a model to finetune with + model = SentenceTransformer(model_name) + + # Load training datasets + # (anchor, positive, negative) + dataset_nli_train = load_dataset("sentence-transformers/all-nli", "triplet", split="train[:16000]") + # (question, answer) + dataset_squad_train = load_dataset("sentence-transformers/squad", split="train[:16000]") + # (anchor, positive) + dataset_quora_train = load_dataset("sentence-transformers/quora-duplicates", "pair", split="train[:16000]") + + # Combine all datasets into a dictionary with dataset names to datasets + dataset_all_train = { + "all-nli-triplet": dataset_nli_train, + "squad": dataset_squad_train, + "quora": dataset_quora_train, + } + + # Load validation datasets + # (anchor, positive, negative) + dataset_nli_val = load_dataset("sentence-transformers/all-nli", "triplet", split="dev") + # (question, answer) + dataset_squad_val = load_dataset("sentence-transformers/squad", split="train[16000:18000]") + # (anchor, positive) + dataset_quora_val = load_dataset("sentence-transformers/quora-duplicates", "pair", split="train[16000:18000]") + # Combine all datasets into a dictionary with dataset names to datasets + dataset_all_val = { + "all-nli-triplet": dataset_nli_val, + "squad": dataset_squad_val, + "quora": dataset_quora_val, + } + + # Load loss function + loss_mnrl = MultipleNegativesRankingLoss(model) + # Create a mapping with dataset names to loss functions + loss_all = { + "all-nli-triplet": loss_mnrl, + "squad": loss_mnrl, + "quora": loss_mnrl, + } + + if dataset_name == "all": + dataset_train = dataset_all_train + dataset_val = dataset_all_val + loss_func = loss_all + elif dataset_name == "nli": + dataset_train = dataset_nli_train + dataset_val = dataset_nli_val + loss_func = loss_mnrl + elif dataset_name == "squad": + dataset_train = dataset_squad_train + dataset_val = dataset_squad_val + loss_func = loss_mnrl + elif dataset_name == "quora": + dataset_train = dataset_quora_train + dataset_val = dataset_quora_val + loss_func = loss_mnrl + else: + raise ValueError(f"Unknown dataset name: {dataset_name}") + + base_model_name = model_name.split("/")[-1] + output_dir = f"/tmp/embed/cen/models_iter/{base_model_name}-{dataset_name}" + unit_train_epochs = 0.25 + # Specify training arguments + args = SentenceTransformerTrainingArguments( + # Required parameter: + output_dir=output_dir, + # Optional training parameters: + num_train_epochs=unit_train_epochs, + per_device_train_batch_size=16, + per_device_eval_batch_size=16, + learning_rate=1e-6, + lr_scheduler_type="constant", + bf16=True, + batch_sampler=BatchSamplers.NO_DUPLICATES, + # Optional tracking/debugging parameters: + eval_strategy="steps", + eval_steps=50, + save_strategy="steps", + save_steps=50, + save_total_limit=1, + # logging parameters: + logging_dir=f"{output_dir}/logs", + logging_strategy="steps", + logging_steps=50, + report_to="tensorboard", + ) + + # Define trainer + trainer = SentenceTransformerTrainer( + model=model, + args=args, + train_dataset=dataset_train, + eval_dataset=dataset_val, + loss=loss_func, + ) + + for round in range(6): + # Train the model + # First round: start from scratch + if round == 0: + trainer.train() + # Subsequent rounds: start from the previous model + else: + args.num_train_epochs += unit_train_epochs + trainer.train(resume_from_checkpoint=True) + + # Save the trained model + model.save_pretrained(f"{output_dir}/final") + + +if __name__ == "__main__": + main() diff --git a/examples/advanced/rag/embedding/utils/train_single_session.py b/examples/advanced/rag/embedding/utils/train_single_session.py new file mode 100644 index 0000000000..5c66976de9 --- /dev/null +++ b/examples/advanced/rag/embedding/utils/train_single_session.py @@ -0,0 +1,142 @@ +# Copyright (c) 2024, NVIDIA CORPORATION. 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 argparse + +from datasets import load_dataset +from sentence_transformers import SentenceTransformer, SentenceTransformerTrainer, SentenceTransformerTrainingArguments +from sentence_transformers.losses import MultipleNegativesRankingLoss +from sentence_transformers.training_args import BatchSamplers + + +def main(): + # argparse + parser = argparse.ArgumentParser(description="Train a model on a dataset") + parser.add_argument( + "--model_name", + type=str, + default="microsoft/mpnet-base", + ) + parser.add_argument( + "--dataset_name", + type=str, + default="nli", + ) + args = parser.parse_args() + model_name = args.model_name + dataset_name = args.dataset_name + + # Load a model to finetune with + model = SentenceTransformer(model_name) + + # Load training datasets + # (anchor, positive, negative) + dataset_nli_train = load_dataset("sentence-transformers/all-nli", "triplet", split="train[:16000]") + # (question, answer) + dataset_squad_train = load_dataset("sentence-transformers/squad", split="train[:16000]") + # (anchor, positive) + dataset_quora_train = load_dataset("sentence-transformers/quora-duplicates", "pair", split="train[:16000]") + + # Combine all datasets into a dictionary with dataset names to datasets + dataset_all_train = { + "all-nli-triplet": dataset_nli_train, + "squad": dataset_squad_train, + "quora": dataset_quora_train, + } + + # Load validation datasets + # (anchor, positive, negative) + dataset_nli_val = load_dataset("sentence-transformers/all-nli", "triplet", split="dev") + # (question, answer) + dataset_squad_val = load_dataset("sentence-transformers/squad", split="train[16000:18000]") + # (anchor, positive) + dataset_quora_val = load_dataset("sentence-transformers/quora-duplicates", "pair", split="train[16000:18000]") + # Combine all datasets into a dictionary with dataset names to datasets + dataset_all_val = { + "all-nli-triplet": dataset_nli_val, + "squad": dataset_squad_val, + "quora": dataset_quora_val, + } + + # Load loss function + loss_mnrl = MultipleNegativesRankingLoss(model) + # Create a mapping with dataset names to loss functions + loss_all = { + "all-nli-triplet": loss_mnrl, + "squad": loss_mnrl, + "quora": loss_mnrl, + } + + if dataset_name == "all": + dataset_train = dataset_all_train + dataset_val = dataset_all_val + loss_func = loss_all + elif dataset_name == "nli": + dataset_train = dataset_nli_train + dataset_val = dataset_nli_val + loss_func = loss_mnrl + elif dataset_name == "squad": + dataset_train = dataset_squad_train + dataset_val = dataset_squad_val + loss_func = loss_mnrl + elif dataset_name == "quora": + dataset_train = dataset_quora_train + dataset_val = dataset_quora_val + loss_func = loss_mnrl + else: + raise ValueError(f"Unknown dataset name: {dataset_name}") + + base_model_name = model_name.split("/")[-1] + output_dir = f"/tmp/embed/cen/models_single/{base_model_name}-{dataset_name}" + # Specify training arguments + args = SentenceTransformerTrainingArguments( + # Required parameter: + output_dir=output_dir, + # Optional training parameters: + num_train_epochs=1.5, + per_device_train_batch_size=16, + per_device_eval_batch_size=16, + learning_rate=1e-6, + lr_scheduler_type="constant", + bf16=True, + batch_sampler=BatchSamplers.NO_DUPLICATES, + # Optional tracking/debugging parameters: + eval_strategy="steps", + eval_steps=50, + save_strategy="steps", + save_steps=50, + save_total_limit=1, + # logging parameters: + logging_dir=f"{output_dir}/logs", + logging_strategy="steps", + logging_steps=50, + report_to="tensorboard", + ) + + # Define trainer + trainer = SentenceTransformerTrainer( + model=model, + args=args, + train_dataset=dataset_train, + eval_dataset=dataset_val, + loss=loss_func, + ) + trainer.train() + + # Save the trained model + model.save_pretrained(f"{output_dir}/final") + + +if __name__ == "__main__": + main() From 4e03b13cca9260a414092acee32469fd33b5b9dd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 26 Sep 2024 10:14:46 -0700 Subject: [PATCH 02/12] Bump rollup from 3.29.4 to 3.29.5 in /web (#2963) Bumps [rollup](https://github.com/rollup/rollup) from 3.29.4 to 3.29.5. - [Release notes](https://github.com/rollup/rollup/releases) - [Changelog](https://github.com/rollup/rollup/blob/master/CHANGELOG.md) - [Commits](https://github.com/rollup/rollup/compare/v3.29.4...v3.29.5) --- updated-dependencies: - dependency-name: rollup dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- web/package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/web/package-lock.json b/web/package-lock.json index 53a75a9611..ee0abbe825 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -6606,9 +6606,9 @@ } }, "node_modules/rollup": { - "version": "3.29.4", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", - "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", + "version": "3.29.5", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.5.tgz", + "integrity": "sha512-GVsDdsbJzzy4S/v3dqWPJ7EfvZJfCHiDqe80IyrF59LYuP+e6U1LJoUqeuqRbwAWoMNoXivMNeNAOf5E22VA1w==", "bin": { "rollup": "dist/bin/rollup" }, From d8047644e0565f14a3bd6940a2f93bf6206c9572 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 26 Sep 2024 11:52:24 -0700 Subject: [PATCH 03/12] Bump path-to-regexp from 6.2.2 to 6.3.0 in /web (#2938) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [path-to-regexp](https://github.com/pillarjs/path-to-regexp) from 6.2.2 to 6.3.0. - [Release notes](https://github.com/pillarjs/path-to-regexp/releases) - [Changelog](https://github.com/pillarjs/path-to-regexp/blob/master/History.md) - [Commits](https://github.com/pillarjs/path-to-regexp/compare/v6.2.2...v6.3.0) --- updated-dependencies: - dependency-name: path-to-regexp dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Sean Yang Co-authored-by: Yuan-Ting Hsieh (謝沅廷) --- web/package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/web/package-lock.json b/web/package-lock.json index ee0abbe825..7bd9c53073 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -5760,9 +5760,9 @@ } }, "node_modules/path-to-regexp": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.2.tgz", - "integrity": "sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw==" + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", + "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==" }, "node_modules/periscopic": { "version": "3.1.0", From 03ea272bcb47506c3d23b5b0751f3cf82be9e221 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 26 Sep 2024 12:13:55 -0700 Subject: [PATCH 04/12] Bump vite from 4.5.3 to 4.5.5 in /web (#2950) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 4.5.3 to 4.5.5. - [Release notes](https://github.com/vitejs/vite/releases) - [Changelog](https://github.com/vitejs/vite/blob/v4.5.5/packages/vite/CHANGELOG.md) - [Commits](https://github.com/vitejs/vite/commits/v4.5.5/packages/vite) --- updated-dependencies: - dependency-name: vite dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Sean Yang Co-authored-by: Yuan-Ting Hsieh (謝沅廷) --- web/package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/web/package-lock.json b/web/package-lock.json index 7bd9c53073..c259b44ca5 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -8039,9 +8039,9 @@ } }, "node_modules/vite": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.3.tgz", - "integrity": "sha512-kQL23kMeX92v3ph7IauVkXkikdDRsYMGTVl5KY2E9OY4ONLvkHf04MDTbnfo6NKxZiDLWzVpP5oTa8hQD8U3dg==", + "version": "4.5.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.5.tgz", + "integrity": "sha512-ifW3Lb2sMdX+WU91s3R0FyQlAyLxOzCSCP37ujw0+r5POeHPwe6udWVIElKQq8gk3t7b8rkmvqC6IHBpCff4GQ==", "dependencies": { "esbuild": "^0.18.10", "postcss": "^8.4.27", From a552e997093c4b31162d6adae374d717b8e9067e Mon Sep 17 00:00:00 2001 From: Yuhong Wen Date: Thu, 26 Sep 2024 18:21:22 -0400 Subject: [PATCH 05/12] Add the hello-pt-resnet example (#2954) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add the hello-pt-resnet example. * Removed the no use SimpleNetwork. * codestyle fix for hello-pt-resnet example. * renamed the simple_network.py -> resnet_18.py. And the resnet18 link to ReadMe. * updated license year. * codestyle fix. * black codestyle fix. * codestyle fix. --------- Co-authored-by: Yuan-Ting Hsieh (謝沅廷) --- .../hello-world/hello-pt-resnet/README.md | 20 ++++ .../fedavg_script_runner_pt.py | 41 +++++++ .../hello-pt-resnet/requirements.txt | 3 + .../src/hello-pt_cifar10_fl.py | 103 ++++++++++++++++++ .../hello-pt-resnet/src/resnet_18.py | 33 ++++++ 5 files changed, 200 insertions(+) create mode 100644 examples/hello-world/hello-pt-resnet/README.md create mode 100644 examples/hello-world/hello-pt-resnet/fedavg_script_runner_pt.py create mode 100644 examples/hello-world/hello-pt-resnet/requirements.txt create mode 100644 examples/hello-world/hello-pt-resnet/src/hello-pt_cifar10_fl.py create mode 100644 examples/hello-world/hello-pt-resnet/src/resnet_18.py diff --git a/examples/hello-world/hello-pt-resnet/README.md b/examples/hello-world/hello-pt-resnet/README.md new file mode 100644 index 0000000000..4b1a0f51a6 --- /dev/null +++ b/examples/hello-world/hello-pt-resnet/README.md @@ -0,0 +1,20 @@ +# Hello PyTorch ResNet + +Example of using [NVIDIA FLARE](https://nvflare.readthedocs.io/en/main/index.html) to train an image classifier +using federated averaging ([FedAvg](https://arxiv.org/abs/1602.05629)) +and [PyTorch](https://pytorch.org/) as the deep learning training framework. Comparing with the Hello PyTorch example, it uses the torchvision ResNet, +instead of the SimpleNetwork. + +> **_NOTE:_** This example uses the [CIFAR-10](https://www.cs.toronto.edu/~kriz/cifar.html) dataset and will load its data within the client train code. + +The Job API only supports the object instance created directly out of the Python Class. It does not support +the object instance created through using the Python function. Comparing with the hello-pt example, +if we replace the SimpleNetwork() object with the resnet18(num_classes=10), +the "resnet18(num_classes=10)" creates an torchvision "ResNet" object instance out of the "resnet18" function. +As shown in the [torchvision reset](https://github.com/pytorch/vision/blob/main/torchvision/models/resnet.py#L684-L705), +the resnet18 is a Python function, which creates and returns a ResNet object. The job API can +only use the "ResNet" object instance for generating the job config. It can not detect the object creating function logic in the "resnet18". + +This example demonstrates how to wrap up the resnet18 Python function into a Resnet18 Python class. Then uses the Resnet18(num_classes=10) +object instance in the job API. After replacing the SimpleNetwork() with the Resnet18(num_classes=10), +you can follow the exact same steps in the hello-pt example to run the fedavg_script_runner_pt.py. diff --git a/examples/hello-world/hello-pt-resnet/fedavg_script_runner_pt.py b/examples/hello-world/hello-pt-resnet/fedavg_script_runner_pt.py new file mode 100644 index 0000000000..ece630dcdb --- /dev/null +++ b/examples/hello-world/hello-pt-resnet/fedavg_script_runner_pt.py @@ -0,0 +1,41 @@ +# Copyright (c) 2024, NVIDIA CORPORATION. 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. + +from src.resnet_18 import Resnet18 + +from nvflare.app_opt.pt.job_config.fed_avg import FedAvgJob +from nvflare.job_config.script_runner import ScriptRunner + +if __name__ == "__main__": + n_clients = 2 + num_rounds = 2 + train_script = "src/hello-pt_cifar10_fl.py" + + job = FedAvgJob( + name="hello-pt_cifar10_fedavg", + n_clients=n_clients, + num_rounds=num_rounds, + initial_model=Resnet18(num_classes=10), + ) + + # Add clients + for i in range(n_clients): + executor = ScriptRunner( + script=train_script, + script_args="", # f"--batch_size 32 --data_path /tmp/data/site-{i}" + ) + job.to(executor, f"site-{i + 1}") + + # job.export_job("/tmp/nvflare/jobs/job_config") + job.simulator_run("/tmp/nvflare/jobs/workdir", gpu="0") diff --git a/examples/hello-world/hello-pt-resnet/requirements.txt b/examples/hello-world/hello-pt-resnet/requirements.txt new file mode 100644 index 0000000000..919cc32ba2 --- /dev/null +++ b/examples/hello-world/hello-pt-resnet/requirements.txt @@ -0,0 +1,3 @@ +nvflare~=2.5.0rc +torch +torchvision diff --git a/examples/hello-world/hello-pt-resnet/src/hello-pt_cifar10_fl.py b/examples/hello-world/hello-pt-resnet/src/hello-pt_cifar10_fl.py new file mode 100644 index 0000000000..860e6f0cac --- /dev/null +++ b/examples/hello-world/hello-pt-resnet/src/hello-pt_cifar10_fl.py @@ -0,0 +1,103 @@ +# Copyright (c) 2024, NVIDIA CORPORATION. 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 os + +import torch +from resnet_18 import Resnet18 +from torch import nn +from torch.optim import SGD +from torch.utils.data.dataloader import DataLoader +from torchvision.datasets import CIFAR10 +from torchvision.transforms import Compose, Normalize, ToTensor + +import nvflare.client as flare +from nvflare.client.tracking import SummaryWriter + +DATASET_PATH = "/tmp/nvflare/data" + + +def main(): + batch_size = 4 + epochs = 5 + lr = 0.01 + model = Resnet18(num_classes=10) + device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") + loss = nn.CrossEntropyLoss() + optimizer = SGD(model.parameters(), lr=lr, momentum=0.9) + transforms = Compose( + [ + ToTensor(), + Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)), + ] + ) + + flare.init() + sys_info = flare.system_info() + client_name = sys_info["site_name"] + + train_dataset = CIFAR10( + root=os.path.join(DATASET_PATH, client_name), + transform=transforms, + download=True, + train=True, + ) + train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True) + + summary_writer = SummaryWriter() + while flare.is_running(): + input_model = flare.receive() + print(f"current_round={input_model.current_round}") + + model.load_state_dict(input_model.params) + model.to(device) + + steps = epochs * len(train_loader) + for epoch in range(epochs): + running_loss = 0.0 + for i, batch in enumerate(train_loader): + images, labels = batch[0].to(device), batch[1].to(device) + optimizer.zero_grad() + + predictions = model(images) + cost = loss(predictions, labels) + cost.backward() + optimizer.step() + + running_loss += cost.cpu().detach().numpy() / images.size()[0] + if i % 3000 == 0: + print(f"Epoch: {epoch}/{epochs}, Iteration: {i}, Loss: {running_loss / 3000}") + global_step = input_model.current_round * steps + epoch * len(train_loader) + i + summary_writer.add_scalar( + tag="loss_for_each_batch", + scalar=running_loss, + global_step=global_step, + ) + running_loss = 0.0 + + print("Finished Training") + + PATH = "./cifar_net.pth" + torch.save(model.state_dict(), PATH) + + output_model = flare.FLModel( + params=model.cpu().state_dict(), + meta={"NUM_STEPS_CURRENT_ROUND": steps}, + ) + + flare.send(output_model) + + +if __name__ == "__main__": + main() diff --git a/examples/hello-world/hello-pt-resnet/src/resnet_18.py b/examples/hello-world/hello-pt-resnet/src/resnet_18.py new file mode 100644 index 0000000000..3420fdd741 --- /dev/null +++ b/examples/hello-world/hello-pt-resnet/src/resnet_18.py @@ -0,0 +1,33 @@ +# Copyright (c) 2024, NVIDIA CORPORATION. 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. +from typing import Any, Optional + +from torchvision.models import ResNet +from torchvision.models._utils import _ovewrite_named_param +from torchvision.models.resnet import BasicBlock, ResNet18_Weights + + +class Resnet18(ResNet): + def __init__(self, num_classes, weights: Optional[ResNet18_Weights] = None, progress: bool = True, **kwargs: Any): + self.num_classes = num_classes + + weights = ResNet18_Weights.verify(weights) + + if weights is not None: + _ovewrite_named_param(kwargs, "num_classes", len(weights.meta["categories"])) + + super().__init__(BasicBlock, [2, 2, 2, 2], num_classes=num_classes, **kwargs) + + if weights is not None: + super().load_state_dict(weights.get_state_dict(progress=progress)) From c0257c30e2bcae4b623c656dda7986a4ded67ece Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yuan-Ting=20Hsieh=20=28=E8=AC=9D=E6=B2=85=E5=BB=B7=29?= Date: Fri, 27 Sep 2024 15:49:50 -0700 Subject: [PATCH 06/12] Update CONTRIBUTING.md (#2969) --- CONTRIBUTING.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index fabed9dfbf..32843e03e6 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -47,10 +47,11 @@ To collaborate efficiently, please read through this section and follow them. #### Checking the coding style We check code style using flake8 and isort. A bash script (`runtest.sh`) is provided to run all tests locally. +You can use `runtest.sh -f` to use black to fix your code style automatically as well. License information: all source code files should start with this paragraph: ``` -# Copyright (c) 2021-2022, NVIDIA CORPORATION. All rights reserved. +# Copyright (c) 2024, NVIDIA CORPORATION. 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. From c6fc4a42b71c72f7c2c944553a74b210847ebe4b Mon Sep 17 00:00:00 2001 From: Chester Chen <512707+chesterxgchen@users.noreply.github.com> Date: Tue, 1 Oct 2024 10:12:08 -0700 Subject: [PATCH 07/12] update PSI to support python 3.11 (#2972) * update PSI requirements.txt to support openmind-psi==2.0.4 which support python 3.11 * add comments --- examples/advanced/psi/user_email_match/README.md | 16 ++++++++++------ .../psi/user_email_match/requirements.txt | 3 +-- nvflare/app_common/psi/dh_psi/dh_psi_workflow.py | 3 +++ 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/examples/advanced/psi/user_email_match/README.md b/examples/advanced/psi/user_email_match/README.md index 2b01108e8e..324bc8483e 100644 --- a/examples/advanced/psi/user_email_match/README.md +++ b/examples/advanced/psi/user_email_match/README.md @@ -113,18 +113,22 @@ copy NVFlare/examples/advanced/psi/user_email_match/data to /tmp/nvflare/psi dir **run job** ``` -nvflare simulator -w /tmp/nvflare/psi -n 3 -t 3 user_email_match/jobs/user_email_match +nvflare simulator -w /tmp/nvflare/psi/job -n 3 -t 3 user_email_match/jobs/user_email_match ``` Once job completed and succeed, you should be able to find the intersection for different sites at ``` -/tmp/nvflare/psi/simulate_job/site-1/psi/intersection.txt -/tmp/nvflare/psi/simulate_job/site-2/psi/intersection.txt -/tmp/nvflare/psi/simulate_job/site-3/psi/intersection.txt +/tmp/nvflare/psi/job/simulate_job/site-1/psi/intersection.txt +/tmp/nvflare/psi/job/simulate_job/site-2/psi/intersection.txt +/tmp/nvflare/psi/job/simulate_job/site-3/psi/intersection.txt ``` to compare these intersections, you can check with the followings: ```bash -diff <(sort /tmp/nvflare/psi/simulate_job/site-1/psi/intersection.txt) <(sort /tmp/nvflare/psi/simulate_job/site-2/psi/intersection.txt) -diff <(sort /tmp/nvflare/psi/simulate_job/site-2/psi/intersection.txt) <(sort /tmp/nvflare/psi/simulate_job/site-3/psi/intersection.txt) +diff <(sort /tmp/nvflare/psi/job/simulate_job/site-1/psi/intersection.txt) <(sort /tmp/nvflare/psi/job/simulate_job/site-2/psi/intersection.txt) +diff <(sort /tmp/nvflare/psi/job/simulate_job/site-2/psi/intersection.txt) <(sort /tmp/nvflare/psi/job/simulate_job/site-3/psi/intersection.txt) ``` + +**NOTE** +>>The PSI operator depends on openmind-psi. It now supports up-to-python 3.11 +python 3.12 is still working in progress \ No newline at end of file diff --git a/examples/advanced/psi/user_email_match/requirements.txt b/examples/advanced/psi/user_email_match/requirements.txt index b6e4a897ad..8a68abc1ed 100644 --- a/examples/advanced/psi/user_email_match/requirements.txt +++ b/examples/advanced/psi/user_email_match/requirements.txt @@ -1,3 +1,2 @@ -nvflare~=2.5.0rc -openmined.psi==1.1.1 +openmined-psi==2.0.4 pandas diff --git a/nvflare/app_common/psi/dh_psi/dh_psi_workflow.py b/nvflare/app_common/psi/dh_psi/dh_psi_workflow.py index 95212ff73f..a69a372394 100644 --- a/nvflare/app_common/psi/dh_psi/dh_psi_workflow.py +++ b/nvflare/app_common/psi/dh_psi/dh_psi_workflow.py @@ -261,6 +261,9 @@ def parallel_backward_pass(self, ordered_clients: list, intersect_site: SiteSize other_sites = [site for site in ordered_clients if site.name != intersect_site.name] other_sites = self.get_updated_site_sizes(other_sites) + # todo: we might be able to skip these steps, simply broadcast the final intersection result directly + # todo: to all other sites, this avoid the backward pass of the intersection calculation + s = intersect_site other_site_sizes = set([site.size for site in other_sites]) setup_msgs: Dict[str, str] = self.prepare_setup_messages(s, other_site_sizes) From 475c45ac9fd0f6a265bfc250935e6ea922d9e17b Mon Sep 17 00:00:00 2001 From: Sean Yang Date: Tue, 1 Oct 2024 16:41:28 -0700 Subject: [PATCH 08/12] add web versioning (#2974) Co-authored-by: Chester Chen <512707+chesterxgchen@users.noreply.github.com> --- .github/workflows/deploy.yml | 53 +++++---- web/astro.config.mjs | 4 +- web/src/components/code.astro | 18 +-- web/src/components/footer.astro | 5 +- web/src/components/gettingStarted.astro | 14 ++- web/src/components/hero.astro | 32 +++++- web/src/components/overview.astro | 6 +- web/src/components/series.astro | 62 +++++----- web/src/components/tutorials.astro | 144 ++++++++++++------------ web/src/pages/404.astro | 4 +- web/src/pages/agnostic.astro | 5 +- web/src/pages/research.astro | 6 +- web/src/pages/security.astro | 4 +- 13 files changed, 201 insertions(+), 156 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 23b921309f..5501c295eb 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -1,19 +1,22 @@ -name: Deploy to GitHub Pages +name: Deploy to gh-pages on: - # Trigger the workflow every time you push to the `main` branch - # Using a different branch name? Replace `main` with your branch’s name + # Trigger the workflow if any web/** files are modified push: - branches: [ main ] - # Allows you to run this workflow manually from the Actions tab on GitHub. + branches: + - "main" + - "2.5" + paths: + - 'web/**' workflow_dispatch: env: site_path: ./web + version_path: / # Allow this job to clone the repo and create a page deployment permissions: - contents: read + contents: write pages: write id-token: write @@ -21,7 +24,11 @@ jobs: build: runs-on: ubuntu-latest steps: - - name: Checkout your repository using git + - name: Update version_path for non-main branches + if: ${{ github.ref_type == 'branch' && github.ref_name != 'main'}} + run: echo version_path=/version/${{ github.ref_name }}/ >> $GITHUB_ENV + + - name: Checkout your repository uses: actions/checkout@v4 - name: Setup Node @@ -31,28 +38,20 @@ jobs: cache: npm cache-dependency-path: "${{ env.site_path }}/package-lock.json" - - name: Install - shell: "bash" - working-directory: ${{ env.site_path }} + - name: Install dependencies run: npm install - - - name: Build - shell: "bash" working-directory: ${{ env.site_path }} + + - name: Build project run: npm run build + env: + PUBLIC_GH_BRANCH: ${{ github.ref_name }} + working-directory: ${{ env.site_path }} - - name: Upload Pages Artifact - uses: actions/upload-pages-artifact@v3 + - name: Deploy + uses: JamesIves/github-pages-deploy-action@v4.6.4 with: - path: "${{ env.site_path }}/dist/" - - deploy: - needs: build - runs-on: ubuntu-latest - environment: - name: github-pages - url: ${{ steps.deployment.outputs.page_url }} - steps: - - name: Deploy to GitHub Pages - id: deployment - uses: actions/deploy-pages@v4 \ No newline at end of file + branch: gh-pages + folder: ${{ env.site_path }}/dist + target-folder: ${{ env.version_path }} + clean-exclude: version diff --git a/web/astro.config.mjs b/web/astro.config.mjs index 32414d4b29..1efb442010 100644 --- a/web/astro.config.mjs +++ b/web/astro.config.mjs @@ -1,8 +1,10 @@ import { defineConfig } from "astro/config"; import tailwind from "@astrojs/tailwind"; +const branch = process.env.PUBLIC_GH_BRANCH; + export default defineConfig({ site: "https://nvidia.github.io", - base: "/NVFlare", + base: branch === 'main' ? '/NVFlare' : `/NVFlare/version/${branch}`, integrations: [tailwind()], }); diff --git a/web/src/components/code.astro b/web/src/components/code.astro index 58bc6bb585..36c92fdad0 100644 --- a/web/src/components/code.astro +++ b/web/src/components/code.astro @@ -15,6 +15,8 @@ import 'prismjs/plugins/line-numbers/prism-line-numbers.css' import GoogleColab from '../images/google_colab.svg.png' +const gh_branch = import.meta.env.PUBLIC_GH_BRANCH; + // PyTorch Code Sections -------------------------------------------------- const installCode_pt = ` @@ -625,8 +627,8 @@ python3 fedavg_cifar10_tf_job.py const frameworks = [ { id: "pytorch", - colab_link: "https://colab.research.google.com/github/NVIDIA/NVFlare/blob/main/examples/getting_started/pt/nvflare_pt_getting_started.ipynb", - github_link: "https://github.com/NVIDIA/NVFlare/blob/main/examples/getting_started/pt/nvflare_pt_getting_started.ipynb", + colab_link: `https://colab.research.google.com/github/NVIDIA/NVFlare/blob/${gh_branch}/examples/getting_started/pt/nvflare_pt_getting_started.ipynb`, + github_link: `https://github.com/NVIDIA/NVFlare/blob/${gh_branch}/examples/getting_started/pt/nvflare_pt_getting_started.ipynb`, sections: [ { id: "install-pytorch", @@ -679,8 +681,8 @@ const frameworks = [ }, { id: "lightning", - colab_link: "https://colab.research.google.com/github/NVIDIA/NVFlare/blob/main/examples/getting_started/pt/nvflare_lightning_getting_started.ipynb", - github_link: "https://github.com/NVIDIA/NVFlare/blob/main/examples/getting_started/pt/nvflare_lightning_getting_started.ipynb", + colab_link: `https://colab.research.google.com/github/NVIDIA/NVFlare/blob/${gh_branch}/examples/getting_started/pt/nvflare_lightning_getting_started.ipynb`, + github_link: `https://github.com/NVIDIA/NVFlare/blob/${gh_branch}/examples/getting_started/pt/nvflare_lightning_getting_started.ipynb`, sections: [ { id: "install-lightning", @@ -733,8 +735,8 @@ const frameworks = [ }, { id: "tensorflow", - colab_link: "https://colab.research.google.com/github/NVIDIA/NVFlare/blob/main/examples/getting_started/tf/nvflare_tf_getting_started.ipynb", - github_link: "https://github.com/NVIDIA/NVFlare/blob/main/examples/getting_started/tf/nvflare_tf_getting_started.ipynb", + colab_link: `https://colab.research.google.com/github/NVIDIA/NVFlare/blob/${gh_branch}/examples/getting_started/tf/nvflare_tf_getting_started.ipynb`, + github_link: `https://github.com/NVIDIA/NVFlare/blob/${gh_branch}/examples/getting_started/tf/nvflare_tf_getting_started.ipynb`, sections: [ { id: "install-tensorflow", @@ -838,7 +840,7 @@ const frameworks = [ - + NVIDIA logo @@ -848,7 +850,7 @@ const frameworks = [ - +
- + NVIDIA logo NVIDIA FLARE diff --git a/web/src/components/gettingStarted.astro b/web/src/components/gettingStarted.astro index f9101ca406..1738f9a651 100644 --- a/web/src/components/gettingStarted.astro +++ b/web/src/components/gettingStarted.astro @@ -1,4 +1,6 @@ --- +const gh_branch = import.meta.env.PUBLIC_GH_BRANCH; + const walkthrough = [ { id: "step1", @@ -17,7 +19,7 @@ const walkthrough = [ description: "Use the ModelController API to write a federated control flow for FedAvg.", button_text: "View Source", - link: "https://github.com/NVIDIA/NVFlare/blob/main/nvflare/app_common/workflows/fedavg.py", + link: `https://github.com/NVIDIA/NVFlare/blob/${gh_branch}/nvflare/app_common/workflows/fedavg.py`, video: "https://developer.download.nvidia.com/assets/Clara/flare/Flare%202.5.0%20Getting%20Started%20-%20Part%202%20-%20Server.mp4", }, { @@ -27,7 +29,7 @@ const walkthrough = [ description: "Use the Client API to write local training code for a PyTorch CIFAR-10 trainer.", button_text: "View Source", - link: "https://github.com/NVIDIA/NVFlare/blob/main/examples/getting_started/pt/src/cifar10_fl.py", + link: `https://github.com/NVIDIA/NVFlare/blob/${gh_branch}/examples/getting_started/pt/src/cifar10_fl.py`, video: "https://developer.download.nvidia.com/assets/Clara/flare/Flare%202.5.0%20Getting%20Started%20-%20Part%203%20-%20Client.mp4", }, { @@ -37,7 +39,7 @@ const walkthrough = [ description: "Formulate the NVIDIA FLARE job and simulate a federated run with the multi-process simulator.", button_text: "View Notebook", - link: "https://colab.research.google.com/github/NVIDIA/NVFlare/blob/main/examples/getting_started/pt/nvflare_pt_getting_started.ipynb", + link: `https://colab.research.google.com/github/NVIDIA/NVFlare/blob/${gh_branch}/examples/getting_started/pt/nvflare_pt_getting_started.ipynb`, video: "https://developer.download.nvidia.com/assets/Clara/flare/Flare%202.5.0%20Getting%20Started%20-%20Part%204%20-%20Job.mp4", }, { @@ -47,7 +49,7 @@ const walkthrough = [ description: "Learn more about NVIDIA FLARE and taking federated learning from simulation to the real world.", button_text: "Tutorial Catalog", - link: "/NVFlare/catalog", + link: "catalog", video: "https://developer.download.nvidia.com/assets/Clara/flare/Flare%202.5.0%20Getting%20Started%20-%20Part%205%20-%20Next%20Steps.mp4", }, ]; @@ -70,7 +72,7 @@ const km = [ description: "What is Kaplan-Meier Analysis and how can we adapt it to a federated setting?", button_text: "View Source", - link: "https://github.com/NVIDIA/NVFlare/tree/main/examples/advanced/kaplan-meier-he", + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/advanced/kaplan-meier-he`, video: "https://developer.download.nvidia.com/assets/Clara/flare/Flare%202.5.0%20KM%20-%20Part%202%20-%20Kaplan%20Meier.mp4", }, { @@ -80,7 +82,7 @@ const km = [ description: "Dive into an end-to-end implementation of federated Kaplan-Meier.", button_text: "View Source", - link: "https://github.com/NVIDIA/NVFlare/tree/main/examples/advanced/kaplan-meier-he/src", + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/advanced/kaplan-meier-he/src`, video: "https://developer.download.nvidia.com/assets/Clara/flare/Flare%202.5.0%20KM%20-%20Part%203%20-%20Implementation.mp4", }, ]; diff --git a/web/src/components/hero.astro b/web/src/components/hero.astro index f03a253016..e55fd687cd 100644 --- a/web/src/components/hero.astro +++ b/web/src/components/hero.astro @@ -1,6 +1,9 @@ --- import NvidiaLogo from '../images/nvidia_eye.png' import NvflareAnimation from '../images/nvflare_graphic_animation.mp4' + +const gh_branch = import.meta.env.PUBLIC_GH_BRANCH; +const base_url = import.meta.env.BASE_URL; ---
@@ -9,6 +12,29 @@ import NvflareAnimation from '../images/nvflare_graphic_animation.mp4'
+ + + + + + + @@ -22,7 +48,7 @@ import NvflareAnimation from '../images/nvflare_graphic_animation.mp4' class="inline-flex space-x-6"> - Just shipped v2.5.0 + Just Released Documentation Tutorial Catalog diff --git a/web/src/components/overview.astro b/web/src/components/overview.astro index 164d60a43b..582791c3c3 100644 --- a/web/src/components/overview.astro +++ b/web/src/components/overview.astro @@ -9,7 +9,7 @@ const features = [ `, description: "Provides user-friendly APIs for client and server programming. Use the Simulator and POC modes to quickly simulate a federated learning application.", - link:"/NVFlare/research", + link:"research", }, { id: "framework-agnostic", @@ -20,7 +20,7 @@ const features = [ `, description: "Designed as a federated computing platform agnostic to frameworks, workloads, datasets, and domains. Federated learning apps are built on this foundation.", - link: "/NVFlare/agnostic", + link: "agnostic", }, { id: "open-arch", @@ -42,7 +42,7 @@ const features = [ `, description: "Prioritizes security with secure provisioning, event-based security plugins, authorization control, data filtering, audit logs, and advanced privacy-preserving algorithms.", - link: "/NVFlare/security", + link: "security", }, { id: "integration", diff --git a/web/src/components/series.astro b/web/src/components/series.astro index eb1b0d3fc7..2e83dd5a00 100644 --- a/web/src/components/series.astro +++ b/web/src/components/series.astro @@ -1,4 +1,6 @@ --- +const gh_branch = import.meta.env.PUBLIC_GH_BRANCH; + const series_100 = { id: "100", title: "FLARE 100: Core", @@ -12,7 +14,7 @@ const series_100 = { title: "Getting Started", tags: ["beg.", "pytorch", "lightning", "sklearn", "tensorflow"], description: "Getting started examples using the Client API, Model Controller API, and Job API for different frameworks.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/examples/getting_started" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/getting_started` }, { title: "Client API", @@ -36,19 +38,19 @@ const series_100 = { title: "ML/DL to FL", tags: ["beg.", "numpy", "pytorch", "lightning", "tensorflow"], description: "Example for converting Deep Learning (DL) code to Federated Learning (FL) using the Client API. Configurations for numpy, pytorch, lighting, and tensorflow.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/examples/hello-world/ml-to-fl" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/hello-world/ml-to-fl` }, { title: "Hello FedAvg", tags: ["beg.", "pytorch"], description: "Demonstrate flexibility of the ModelController API, and show how to write a Federated Averaging workflow with early stopping, model selection, and saving and loading.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/examples/hello-world/hello-fedavg/README.md" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/hello-world/hello-fedavg/README.md` }, { title: "Job API Examples", tags: ["int.", "pytorch", "lightning", "sklearn", "tensorflow"], description: "Various examples using the Job API for different workflows and frameworks.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/examples/advanced/job_api" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/advanced/job_api` }, ] }, @@ -61,21 +63,21 @@ const series_100 = { title: "Intro to the FL Simulator", tags: ["beg.", "tools"], description: "Use the NVIDIA FLARE Simulator to run a local simulation with multi-process settings within a single computer, offering quick response and debugging.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/examples/tutorials/flare_simulator.ipynb", - colab_link: "https://colab.research.google.com/github/NVIDIA/NVFlare/blob/main/examples/tutorials/flare_simulator.ipynb" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/tutorials/flare_simulator.ipynb`, + colab_link: `https://colab.research.google.com/github/NVIDIA/NVFlare/blob/${gh_branch}/examples/tutorials/flare_simulator.ipynb` }, { title: "POC Mode", tags: ["beg.", "tools"], description: "Proof-of-concept mode to simulate real-world deployment on a local host with different processes represent server, clients, and an admin console.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/examples/tutorials/setup_poc.ipynb" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/tutorials/setup_poc.ipynb` }, { title: "FLARE API", tags: ["beg.", "tools"], description: "Manage system and jobs programmatically with the python FLARE API.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/examples/tutorials/flare_api.ipynb", - colab_link: "https://colab.research.google.com/github/NVIDIA/NVFlare/blob/main/examples/tutorials/flare_api.ipynb" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/tutorials/flare_api.ipynb`, + colab_link: `https://colab.research.google.com/github/NVIDIA/NVFlare/blob/${gh_branch}/examples/tutorials/flare_api.ipynb` }, { title: "Operating NVIDIA FLARE: Admin Client, Commands, FLARE API", @@ -151,55 +153,55 @@ const series_200 = { title: "Step-by-Step CIFAR10 Examples", tags: ["beg.", "algorithm", "pytorch", "dl"], description: "Step-by-step examples series with CIFAR-10 (image data) to showcase different NVIDIA FLARE features, workflows, and APIs.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/examples/hello-world/step-by-step/cifar10" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/hello-world/step-by-step/cifar10` }, { title: "Step-by-Step HIGGS Examples", tags: ["beg.", "algorithm", "pandas", "sklearn", "xgboost"], description: "Step-by-step examples series with HIGGS (tabular data) to showcase different NVIDIA FLARE features, workflows, and APIs.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/examples/hello-world/step-by-step/higgs" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/hello-world/step-by-step/higgs` }, { title: "Hello FedAvg", tags: ["beg.", "algorithm", "pytorch", "dl"], description: "Example using the FedAvg workflow to implement Federated Averaging.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/examples/hello-world/hello-fedavg/README.md" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/hello-world/hello-fedavg/README.md` }, { title: "Hello Numpy Cross-Site Validation", tags: ["beg.", "algorithm", "numpy"], description: "Example using the CrossSiteEval workflow for cross site evaluation. Demonstrate option to use previous results without training workflow.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/examples/hello-world/hello-numpy-cross-val/README.md" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/hello-world/hello-numpy-cross-val/README.md` }, { title: "Hello Cyclic Weight Transfer", tags: ["beg.", "algorithm", "tensorflow", "dl"], description: "Example using the CyclicController workflow to implement Cyclic Weight Transfer.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/examples/hello-world/hello-cyclic/README.md" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/hello-world/hello-cyclic/README.md` }, { title: "Simulated Federated Learning with CIFAR-10", tags: ["int.", "algorithm", "simulator", "pytorch", "dl"], description: "Running FedAvg, FedProx, FedOpt, and SCAFFOLD algorithms using the FL simulator.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/examples/advanced/cifar10/cifar10-sim/README.md" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/advanced/cifar10/cifar10-sim/README.md` }, { title: "TensorFlow Algorithms and Examples", tags: ["adv.", "algorithm", "tensorflow"], description: "FedOpt, FedProx, Scaffold implementations for Tensorflow.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/examples/advanced/job_api/tf" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/advanced/job_api/tf` }, { title: "Financial Application with Federated XGBoost Methods", tags: ["adv.", "algorithm", "xgboost", "finance"], description: "Example using XGBoost in vertical and horizontal approaches to train a federated model to perform fraud detection with a finance dataset.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/examples/advanced/finance" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/advanced/finance` }, { title: "Federated Learning Research", tags: ["adv.", "algorithm"], description: "Collection of research work for Federated Learning algorithms implemented with FLARE.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/research" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/research` }, ] }, @@ -212,43 +214,43 @@ const series_200 = { title: "BioNemo example for Drug Discovery", tags: ["adv.", "algorithm", "nemo", "healthcare"], description: "Running BioNeMo (NVIDIA's generative AI platform for drug discovery) in a federated learning environment using NVIDIA FLARE.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/examples/advanced/bionemo" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/advanced/bionemo` }, { title: "Federated Learning for Prostate Segmentation from Multi-source Data", tags: ["adv.", "algorithm", "healthcare", "monai", "dl"], description: "Example of training a multi-institutional prostate segmentation model using FedAvg, FedProx, and Ditto.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/examples/advanced/prostate/README.md" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/advanced/prostate/README.md` }, { title: "NVFlare + MONAI integration", tags: ["adv.", "algorithm", "healthcare", "monai", "dl"], description: "Using NVIDIA FLARE to train a 3D medical image analysis model using federated averaging (FedAvg) and MONAI Bundle.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/integration/monai/README.md" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/integration/monai/README.md` }, { title: "Federated Learning with Differential Privacy for BraTS18 segmentation", tags: ["adv.", "algorithm", "healthcare", "dp", "monai", "dl"], description: "Illustrates the use of differential privacy for training brain tumor segmentation models using federated learning.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/examples/advanced/brats18/README.md" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/advanced/brats18/README.md` }, { title: "Federated GNN: Protein Classification", tags: ["adv.", "algorithm", "healthcare", "pytorch", "dl"], description: "Example using GNNs for Protein Classification using PPI dataset using GraphSAGE.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/examples/advanced/gnn#federated-gnn-on-graph-dataset-using-inductive-learning" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/advanced/gnn#federated-gnn-on-graph-dataset-using-inductive-learning` }, { title: "End-to-End Federated XGBoost for Financial Credit Card Detection", tags: ["adv.", "algorithm", "xgboost", "finance"], description: "Show the end-to-end process of feature engineering, pre-processing and training in federated settings. You can use FLARE to perform federated ETL and then training.", - link: "https://github.com/NVIDIA/NVFlare/tree/5fc5ff31f35be63330dec38e1c4e80a6f84586ed/examples/advanced/finance-end-to-end" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/advanced/finance-end-to-end` }, { title: "Federated GNN: Financial Transaction Classification", tags: ["adv.", "algorithm", "finance", "pytorch", "dl"], description: "Example using GNNs for Financial Transaction Classification with Elliptic++ dataset using GraphSAGE.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/examples/advanced/gnn#federated-gnn-on-graph-dataset-using-inductive-learning" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/advanced/gnn#federated-gnn-on-graph-dataset-using-inductive-learning` }, ] }, @@ -269,26 +271,26 @@ const series_200 = { tags: ["int.", "algorithm", "healthcare", "he", "analytics"], description: "Kaplan-Meier survival analysis in federated setting without and with secure features via time-binning and Homomorphic Encryption (HE).", - link: "https://github.com/NVIDIA/NVFlare/tree/main/examples/advanced/kaplan-meier-he", + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/advanced/kaplan-meier-he`, }, { title: "Federated Learning with Differential Privacy for BraTS18 segmentation", tags: ["adv.", "algorithm", "healthcare", "dp", "monai", "dl"], description: "Illustrates the use of differential privacy for training brain tumor segmentation models using federated learning.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/examples/advanced/brats18/README.md" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/advanced/brats18/README.md` }, { title: "Real-world Federated Learning with CIFAR-10", tags: ["int.", "algorithm", "poc", "pytorch", "learner", "dl", "he"], description: "Provisioning secure workspace and running FedAvg with streaming of TensorBoard metrics to the server during training and homomorphic encryption.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/examples/advanced/cifar10/cifar10-real-world/README.md" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/advanced/cifar10/cifar10-real-world/README.md` }, { title: "Secure Federated XGBoost with Homomorphic Encryption", tags: ["adv.", "algorithm", "xgboost", "he"], description: "Federated secure training with XGBoost using homomorphic encryption.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/examples/advanced/xgboost_secure", + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/advanced/xgboost_secure`, }, ] } @@ -412,7 +414,7 @@ const series_list = [ To dive deeper into what NVIDIA FLARE has to offer, explore our full catalog of various tutorials and examples showcasing everything from the core features to advanced applications.

-->
Tutorial Catalog -> diff --git a/web/src/components/tutorials.astro b/web/src/components/tutorials.astro index d763e831c4..b3a0ea51f3 100644 --- a/web/src/components/tutorials.astro +++ b/web/src/components/tutorials.astro @@ -1,38 +1,40 @@ --- import GoogleColab from '../images/google_colab.svg.png' +const gh_branch = import.meta.env.PUBLIC_GH_BRANCH; +const base_url = import.meta.env.BASE_URL; const highlights = [ { title: "LLM Tuning via HuggingFace SFT Trainer", tags: ["adv.", "algorithm", "huggingface", "llm"], description: "Example for using NVIDIA FLARE with a HuggingFace trainer for LLM tuning tasks.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/examples/advanced/llm_hf" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/advanced/llm_hf` }, { title: "Survival Analysis with Federated Kaplan-Meier", tags: ["int.", "algorithm", "healthcare", "client-api", "model-controller", "he", "analytics"], description: "Kaplan-Meier survival analysis in federated setting without and with secure features via time-binning and Homomorphic Encryption (HE).", - link: "https://github.com/NVIDIA/NVFlare/tree/main/examples/advanced/kaplan-meier-he", + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/advanced/kaplan-meier-he`, }, { title: "Real-world Federated Learning with CIFAR-10", tags: ["int.", "algorithm", "poc", "pytorch", "learner", "dl", "he"], description: "Provisioning secure workspace and running FedAvg with streaming of TensorBoard metrics to the server during training and homomorphic encryption.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/examples/advanced/cifar10/cifar10-real-world/README.md" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/advanced/cifar10/cifar10-real-world/README.md` }, { title: "Financial Application with Federated XGBoost Methods", tags: ["adv.", "algorithm", "xgboost", "finance"], description: "Example using XGBoost in vertical and horizontal approaches to train a federated model to perform fraud detection with a finance dataset.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/examples/advanced/finance" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/advanced/finance` }, { title: "Parameter Efficient Fine Turning", tags: ["adv.", "algorithm", "nemo", "llm"], description: "Example utilizing NeMo's PEFT methods to adapt a LLM to a downstream task.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/integration/nemo/examples/peft" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/integration/nemo/examples/peft` }, ] @@ -41,28 +43,28 @@ const tutorials = [ title: "Intro to the FL Simulator", tags: ["beg.", "tools"], description: "Use the NVIDIA FLARE Simulator to run a local simulation with multi-process settings within a single computer, offering quick response and debugging.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/examples/tutorials/flare_simulator.ipynb", - colab_link: "https://colab.research.google.com/github/NVIDIA/NVFlare/blob/main/examples/tutorials/flare_simulator.ipynb" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/tutorials/flare_simulator.ipynb`, + colab_link: `https://colab.research.google.com/github/NVIDIA/NVFlare/blob/${gh_branch}/examples/tutorials/flare_simulator.ipynb` }, { title: "POC Mode", tags: ["beg.", "tools"], description: "Proof-of-concept mode to simulate real-world deployment on a local host with different processes represent server, clients, and an admin console.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/examples/tutorials/setup_poc.ipynb" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/tutorials/setup_poc.ipynb` }, { title: "FLARE API", tags: ["beg.", "tools"], description: "Manage system and jobs programmatically with the python FLARE API.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/examples/tutorials/flare_api.ipynb", - colab_link: "https://colab.research.google.com/github/NVIDIA/NVFlare/blob/main/examples/tutorials/flare_api.ipynb" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/tutorials/flare_api.ipynb`, + colab_link: `https://colab.research.google.com/github/NVIDIA/NVFlare/blob/${gh_branch}/examples/tutorials/flare_api.ipynb` }, { title: "Job CLI", tags: ["beg.", "tools"], description: "Job CLI for options to create and submit jobs from a command line interface in POC or production environments.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/examples/tutorials/job_cli.ipynb", - colab_link: "https://colab.research.google.com/github/NVIDIA/NVFlare/blob/main/examples/tutorials/job_cli.ipynb" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/tutorials/job_cli.ipynb`, + colab_link: `https://colab.research.google.com/github/NVIDIA/NVFlare/blob/${gh_branch}/examples/tutorials/job_cli.ipynb` }, { title: "Operating NVIDIA FLARE: Admin Client, Commands, FLARE API", @@ -75,19 +77,19 @@ const tutorials = [ title: "FL Experiment Tracking with TensorBoard Streaming", tags: ["int.", "tools", "pytorch"], description: "Example integrating NVIDIA FLARE with TensorBoard streaming capability from clients to the server.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/examples/advanced/experiment-tracking/tensorboard/README.md" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/advanced/experiment-tracking/tensorboard/README.md` }, { title: "FL Experiment Tracking with MLflow", tags: ["int.", "tools", "pytorch"], description: "Example integrating NVIDIA FLARE with MLflow streaming capability from clients to the server.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/examples/advanced/experiment-tracking/mlflow/README.md" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/advanced/experiment-tracking/mlflow/README.md` }, { title: "FL Experiment Tracking with Weights and Biases", tags: ["int.", "tools", "pytorch"], description: "Example integrating NVIDIA FLARE with Weights and Biases streaming capability from clients to the server.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/examples/advanced/experiment-tracking/wandb/README.md" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/advanced/experiment-tracking/wandb/README.md` }, { title: "Containerized Deployment with Docker", @@ -142,328 +144,328 @@ const tutorials = [ title: "Federated Policies", tags: ["adv.", "deployment"], description: "Example to demonstrate the federated site policies for authorization, resource and data privacy management.", - link: "https://github.com/NVIDIA/NVFlare/blob/main/examples/advanced/federated-policies/README.rst" + link: `https://github.com/NVIDIA/NVFlare/blob/${gh_branch}/examples/advanced/federated-policies/README.rst` }, { title: "Custom Authentication", tags: ["adv.", "deployment"], description: "Example to demonstrate the custom authentication policy and secure mode.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/examples/advanced/custom_authentication/README.rst" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/advanced/custom_authentication/README.rst` }, { title: "Job-Level Authorization", tags: ["adv.", "deployment"], description: "Example to demonstrate the job-level authorization policy and secure mode.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/examples/advanced/job-level-authorization/README.md" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/advanced/job-level-authorization/README.md` }, { title: "Federated Learning Hub", tags: ["adv.", "deployment"], description: "Allow hierarchical interaction between several levels of NVIDIA FLARE FL systems, e.g. Tier-1 (hub) and Tier-2 (sub-systems).", - link: "https://github.com/NVIDIA/NVFlare/tree/main/examples/advanced/fl_hub/README.md" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/advanced/fl_hub/README.md` }, { title: "Getting Started", tags: ["beg.", "algorithm", "client-api", "model-controller", "job-api", "pytorch", "lightning", "sklearn", "tensorflow"], description: "Getting started examples using the Client API, Model Controller API, and Job API for different frameworks.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/examples/getting_started" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/getting_started` }, { title: "Step-by-Step CIFAR10 Examples", tags: ["beg.", "algorithm", "pytorch", "dl"], description: "Step-by-step examples series with CIFAR-10 (image data) to showcase different NVIDIA FLARE features, workflows, and APIs.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/examples/hello-world/step-by-step/cifar10" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/hello-world/step-by-step/cifar10` }, { title: "Step-by-Step HIGGS Examples", tags: ["beg.", "algorithm", "pandas", "sklearn", "xgboost"], description: "Step-by-step examples series with HIGGS (tabular data) to showcase different NVIDIA FLARE features, workflows, and APIs.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/examples/hello-world/step-by-step/higgs" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/hello-world/step-by-step/higgs` }, { title: "ML/DL to FL", tags: ["beg.", "algorithm", "client-api", "numpy", "pytorch", "lightning", "tensorflow"], description: "Example for converting Deep Learning (DL) code to Federated Learning (FL) using the Client API. Configurations for numpy, pytorch, lighting, and tensorflow.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/examples/hello-world/ml-to-fl" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/hello-world/ml-to-fl` }, { title: "Hello FedAvg", tags: ["beg.", "algorithm", "pytorch", "model-controller"], description: "Example using the FedAvg workflow to implement Federated Averaging.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/examples/hello-world/hello-fedavg/README.md" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/hello-world/hello-fedavg/README.md` }, { title: "Hello Numpy Cross-Site Validation", tags: ["beg.", "algorithm", "numpy", "model-controller"], description: "Example using the CrossSiteEval workflow for cross site evaluation. Demonstrate option to use previous results without training workflow.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/examples/hello-world/hello-numpy-cross-val/README.md" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/hello-world/hello-numpy-cross-val/README.md` }, { title: "Hello Cyclic Weight Transfer", tags: ["beg.", "algorithm", "tensorflow", "model-controller", "dl"], description: "Example using the CyclicController workflow to implement Cyclic Weight Transfer.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/examples/hello-world/hello-cyclic/README.md" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/hello-world/hello-cyclic/README.md` }, { title: "Hello PyTorch", tags: ["beg.", "algorithm", "pytorch", "model-controller", "dl"], description: "Example of an image classifier with FedAvg using PyTorch as the deep learning training framework.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/examples/hello-world/hello-pt/README.md" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/hello-world/hello-pt/README.md` }, { title: "Hello TensorFlow", tags: ["beg.", "algorithm", "tensorflow", "model-controller", "dl"], description: "Example of an image classifier with FedAvg using TensorFlow as the deep learning training framework.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/examples/hello-world/hello-tf/README.md" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/hello-world/hello-tf/README.md` }, { title: "Job API Examples", tags: ["int.", "algorithm", "job-api", "pytorch", "lightning", "sklearn", "tensorflow"], description: "Various examples using the Job API for different workflows and frameworks.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/examples/advanced/job_api" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/advanced/job_api` }, { title: "Simulated Federated Learning with CIFAR-10", tags: ["int.", "algorithm", "simulator", "pytorch", "learner", "model-controller", "dl"], description: "Running FedAvg, FedProx, FedOpt, and SCAFFOLD algorithms using the FL simulator.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/examples/advanced/cifar10/cifar10-sim/README.md" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/advanced/cifar10/cifar10-sim/README.md` }, { title: "Real-world Federated Learning with CIFAR-10", tags: ["int.", "algorithm", "poc", "pytorch", "learner", "dl", "he"], description: "Provisioning secure workspace and running FedAvg with streaming of TensorBoard metrics to the server during training and homomorphic encryption.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/examples/advanced/cifar10/cifar10-real-world/README.md" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/advanced/cifar10/cifar10-real-world/README.md` }, { title: "Logistic Regression with Newton-Raphton", tags: ["int.", "algorithm", "client-api", "model-controller", "ml"], description: "Federated binary classification via logistic regression with second-order Newton-Raphson optimization.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/examples/advanced/lr-newton-raphson", + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/advanced/lr-newton-raphson`, }, { title: "Survival Analysis with Federated Kaplan-Meier", tags: ["int.", "algorithm", "healthcare", "client-api", "model-controller", "he", "analytics"], description: "Kaplan-Meier survival analysis in federated setting without and with secure features via time-binning and Homomorphic Encryption (HE).", - link: "https://github.com/NVIDIA/NVFlare/tree/main/examples/advanced/kaplan-meier-he", + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/advanced/kaplan-meier-he`, }, { title: "Swarm Learning", tags: ["int.", "algorithm", "pytorch", "learner", "dl"], description: "Example using Swarm Learning and Client-Controlled Cross-site Evaluation workflows.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/examples/advanced/swarm_learning", + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/advanced/swarm_learning`, }, { title: "Federated Linear Model with Scikit-learn", tags: ["int.", "algorithm", "sklearn", "ml"], description: "Using scikit-learn for federated linear model learning on tabular data.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/examples/advanced/sklearn-linear/README.md" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/advanced/sklearn-linear/README.md` }, { title: "Federated K-Means Clustering with Scikit-learn", tags: ["int.", "algorithm", "sklearn", "ml"], description: "Using scikit-learn and k-Means for federated clustering on tabular data.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/examples/advanced/sklearn-kmeans/README.md" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/advanced/sklearn-kmeans/README.md` }, { title: "Federated SVM with Scikit-learn", tags: ["int.", "algorithm", "sklearn", "ml"], description: "Using scikit-learn and SVM for federated model learning on tabular data.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/examples/advanced/sklearn-svm/README.md" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/advanced/sklearn-svm/README.md` }, { title: "Histogram-based FL for XGBoost", tags: ["adv.", "algorithm", "xgboost", "ml"], description: "Histogram-based algorithm for XGBoost.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/examples/advanced/xgboost/histogram-based/README.md" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/advanced/xgboost/histogram-based/README.md` }, { title: "Tree-based Federated Learning for XGBoost", tags: ["adv.", "algorithm", "xgboost", "ml"], description: "Tree-based algorithms including bagging and cyclic approaches for XGBoost.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/examples/advanced/xgboost/tree-based/README.md" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/advanced/xgboost/tree-based/README.md` }, { title: "Federated Learning for Random Forest based on XGBoost", tags: ["adv.", "algorithm", "xgboost", "ml"], description: "Example of using NVIDIA FLARE with scikit-learn and Random Forest.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/examples/advanced/random_forest/README.md" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/advanced/random_forest/README.md` }, { title: "Federated Vertical XGBoost", tags: ["adv.", "algorithm", "xgboost", "ml"], description: "Example using Private Set Intersection and XGBoost on vertically split HIGGS data.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/examples/advanced/vertical_xgboost/README.md" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/advanced/vertical_xgboost/README.md` }, { title: "NVFlare + MONAI integration", tags: ["adv.", "algorithm", "healthcare", "monai", "dl"], description: "Using NVIDIA FLARE to train a 3D medical image analysis model using federated averaging (FedAvg) and MONAI Bundle.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/integration/monai/README.md" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/integration/monai/README.md` }, { title: "Federated Learning with Differential Privacy for BraTS18 segmentation", tags: ["adv.", "algorithm", "healthcare", "dp", "monai", "dl"], description: "Illustrates the use of differential privacy for training brain tumor segmentation models using federated learning.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/examples/advanced/brats18/README.md" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/advanced/brats18/README.md` }, { title: "Federated Learning for Prostate Segmentation from Multi-source Data", tags: ["adv.", "algorithm", "healthcare", "monai", "dl"], description: "Example of training a multi-institutional prostate segmentation model using FedAvg, FedProx, and Ditto.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/examples/advanced/prostate/README.md" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/advanced/prostate/README.md` }, { title: "Federated Statistics for Images", tags: ["adv.", "algorithm", "pandas", "analytics"], description: "Example of gathering local image histogram to compute the global dataset histograms.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/examples/advanced/federated-statistics/image_stats/README.md" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/advanced/federated-statistics/image_stats/README.md` }, { title: "Federated Statistics for DataFrame", tags: ["adv.", "algorithm", "pandas", "analytics"], description: "Example of gathering local statistics summary from Pandas DataFrame to compute the global dataset statistics.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/examples/advanced/federated-statistics/df_stats/README.md" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/advanced/federated-statistics/df_stats/README.md` }, { title: "MONAI & NVIDIA FLARE Integration with Experiment Tracking", tags: ["adv.", "algorithm", "experiment-tracking", "monai"], description: "Example using NVIDIA FLARE and MONAI integration with experiment tracking streaming from clients to server.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/integration/monai/examples/spleen_ct_segmentation_local/README.md#51-experiment-tracking-with-mlflow" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/integration/monai/examples/spleen_ct_segmentation_local/README.md#51-experiment-tracking-with-mlflow` }, { title: "KeyCloak Site Authentication Integration", tags: ["adv.", "algorithm", "security"], description: "Demonstrate KeyCloak integration for supporting site-specific authentication.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/examples/advanced/keycloak-site-authentication/README.md" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/advanced/keycloak-site-authentication/README.md` }, { title: "NLP-NER", tags: ["adv.", "algorithm", "huggingface", "dl"], description: "Illustrates both BERT and GPT-2 models from Hugging Face on a Named Entity Recognition (NER) task using the NCBI disease dataset.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/examples/advanced/nlp-ner/README.md" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/advanced/nlp-ner/README.md` }, { title: "Parameter Efficient Fine Turning", tags: ["adv.", "algorithm", "nemo", "llm"], description: "Example utilizing NeMo's PEFT methods to adapt a LLM to a downstream task.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/integration/nemo/examples/peft" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/integration/nemo/examples/peft` }, { title: "Prompt-Tuning Example", tags: ["adv.", "algorithm", "nemo", "llm"], description: "Example for using NVIDIA FLARE with NeMo for LLM prompt learning.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/integration/nemo/examples/prompt_learning" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/integration/nemo/examples/prompt_learning` }, { title: "Supervised Fine Tuning (SFT)", tags: ["adv.", "algorithm", "nemo", "llm"], description: "Example to fine-tune all parameters of a LLM on supervised data.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/integration/nemo/examples/supervised_fine_tuning" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/integration/nemo/examples/supervised_fine_tuning` }, { title: "LLM Tuning via HuggingFace SFT Trainer", tags: ["adv.", "algorithm", "huggingface", "llm"], description: "Example for using NVIDIA FLARE with a HuggingFace trainer for LLM tuning tasks.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/examples/advanced/llm_hf" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/advanced/llm_hf` }, { title: "Federated GNN: Protein Classification", tags: ["adv.", "algorithm", "healthcare", "pytorch", "dl"], description: "Example using GNNs for Protein Classification using PPI dataset using GraphSAGE.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/examples/advanced/gnn#federated-gnn-on-graph-dataset-using-inductive-learning" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/advanced/gnn#federated-gnn-on-graph-dataset-using-inductive-learning` }, { title: "Federated GNN: Financial Transaction Classification", tags: ["adv.", "algorithm", "finance", "pytorch", "dl"], description: "Example using GNNs for Financial Transaction Classification with Elliptic++ dataset using GraphSAGE.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/examples/advanced/gnn#federated-gnn-on-graph-dataset-using-inductive-learning" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/advanced/gnn#federated-gnn-on-graph-dataset-using-inductive-learning` }, { title: "Financial Application with Federated XGBoost Methods", tags: ["adv.", "algorithm", "xgboost", "finance"], description: "Example using XGBoost in vertical and horizontal approaches to train a federated model to perform fraud detection with a finance dataset.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/examples/advanced/finance" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/advanced/finance` }, { title: "BioNemo example for Drug Discovery", tags: ["adv.", "algorithm", "nemo", "healthcare"], description: "Running BioNeMo (NVIDIA's generative AI platform for drug discovery) in a federated learning environment using NVIDIA FLARE.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/examples/advanced/bionemo" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/advanced/bionemo` }, { title: "Hierarchical Federated Statistics", tags: ["adv.", "algorithm", "analytics"], description: "Show to generate hierarchical statistics for data that can be represented as Pandas Data Frame.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/examples/advanced/federated-statistics/hierarchical_stats" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/advanced/federated-statistics/hierarchical_stats` }, { title: "FedAvg Early Stopping", tags: ["int.", "algorithm", "model-controller", "pytorch"], description: "Demonstrate flexibility of the ModelController API, and show how to write a Federated Averaging workflow with early stopping, model selection, and saving and loading.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/examples/hello-world/hello-fedavg" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/hello-world/hello-fedavg` }, { title: "TensorFlow Algorithms and Examples", tags: ["adv.", "algorithm", "model-controller", "tensorflow"], description: "FedOpt, FedProx, Scaffold implementations for Tensorflow.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/examples/advanced/job_api/tf" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/advanced/job_api/tf` }, { title: "End-to-End Federated XGBoost for Financial Credit Card Detection", tags: ["adv.", "algorithm", "xgboost", "finance"], description: "Show the end-to-end process of feature engineering, pre-processing and training in federated settings. You can use FLARE to perform federated ETL and then training.", - link: "https://github.com/NVIDIA/NVFlare/tree/5fc5ff31f35be63330dec38e1c4e80a6f84586ed/examples/advanced/finance-end-to-end" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/examples/advanced/finance-end-to-end` }, { title: "Auto-FedRL", tags: ["adv.", "algorithm", "research", "pytorch"], description: "Efficient reinforcement learning (RL)-based federated hyperparameter optimization algorithm.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/research/auto-fed-rl" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/research/auto-fed-rl` }, { title: "ConDistFL", tags: ["adv.", "algorithm", "research", "pytorch"], description: "Conditional Distillation for Federated Learning from Partially Annotated Data.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/research/condist-fl" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/research/condist-fl` }, { title: "FedBN", tags: ["adv.", "algorithm", "research", "pytorch"], description: "Federated Learning on Non-IID Features via Local Batch Normalization designed to address the feature shift problem when aggregating models across different data distributions.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/research/fed-bn" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/research/fed-bn` }, { title: "FedBPT", tags: ["adv.", "algorithm", "research", "pytorch"], description: "Efficient Federated Black-box Prompt Tuning for Large Language Models.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/research/fed-bpt" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/research/fed-bpt` }, { title: "FedCE", tags: ["adv.", "algorithm", "research", "pytorch"], description: "Fair Federated Medical Image Segmentation via Client Contribution Estimation.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/research/fed-ce" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/research/fed-ce` }, { title: "FedSM", tags: ["adv.", "algorithm", "research", "pytorch"], description: "Personalized Federated Learning with FedSM Alogithrm. Closing the Generalization Gap of Cross-silo Federated Medical Image Segmentation.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/research/fed-sm" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/research/fed-sm` }, { title: "One-shot Vertical Federated Learning", tags: ["adv.", "algorithm", "research", "pytorch"], description: "Solve the communication bottleneck and the problem of limited overlapping samples simultaneously based on semi-supervised learning.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/research/one-shot-vfl" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/research/one-shot-vfl` }, { title: "Quantifying Data Leakage in Federated Learning", tags: ["adv.", "algorithm", "research", "pytorch"], description: "Present new ways to measure and visualize potential data leakage in FL.", - link: "https://github.com/NVIDIA/NVFlare/tree/main/research/quantifying-data-leakage" + link: `https://github.com/NVIDIA/NVFlare/tree/${gh_branch}/research/quantifying-data-leakage` }, ] @@ -518,7 +520,7 @@ const tag_list = [
- + Back to home @@ -535,7 +537,7 @@ const tag_list = [ To read more, visit our documentation and - GitHub. + GitHub.

diff --git a/web/src/pages/404.astro b/web/src/pages/404.astro index 7cd6ab2cdc..be1263507c 100644 --- a/web/src/pages/404.astro +++ b/web/src/pages/404.astro @@ -1,5 +1,7 @@ --- import Layout from "@layouts/Layout.astro"; + +const base_url = import.meta.env.BASE_URL; --- @@ -53,7 +55,7 @@ import Layout from "@layouts/Layout.astro";
- + Back to home diff --git a/web/src/pages/agnostic.astro b/web/src/pages/agnostic.astro index 62e9f739a8..2e3abca5fb 100644 --- a/web/src/pages/agnostic.astro +++ b/web/src/pages/agnostic.astro @@ -2,6 +2,7 @@ import Layout from "@layouts/Layout.astro"; import FrameworkAgnostic from '../images/framework_agnostic.png' +const base_url = import.meta.env.BASE_URL; --- @@ -11,7 +12,7 @@ import FrameworkAgnostic from '../images/framework_agnostic.png'
- + Back to home @@ -22,7 +23,7 @@ import FrameworkAgnostic from '../images/framework_agnostic.png'

NVIDIA FLARE is designed as a federated computing platform that is agnostic to frameworks, workloads, datasets, and domains. - View the Tutorial Catalog to see different examples in these categories. + View the Tutorial Catalog to see different examples in these categories.

framework agnostic diff --git a/web/src/pages/research.astro b/web/src/pages/research.astro index 795a92f8da..b67860330a 100644 --- a/web/src/pages/research.astro +++ b/web/src/pages/research.astro @@ -7,6 +7,8 @@ import MammographyGraphs from '../images/research/mammography_graphs.jpg' import Pancreas from '../images/research/pancreas.jpg' import Sun from '../images/research/sun.jpg' +const gh_branch = import.meta.env.PUBLIC_GH_BRANCH; +const base_url = import.meta.env.BASE_URL; const case_studies = [ { @@ -72,7 +74,7 @@ const case_studies = [
- + Back to home @@ -149,7 +151,7 @@ const case_studies = [

NVIDIA FLARE offers a lot of state of art research work, here is a quick view of the recent work. - Learn more in the research directory in our GitHub and view our list of Publications. + Learn more in the research directory in our GitHub and view our list of Publications.

NVFLARE research diff --git a/web/src/pages/security.astro b/web/src/pages/security.astro index fac52bac78..4152e620fc 100644 --- a/web/src/pages/security.astro +++ b/web/src/pages/security.astro @@ -3,6 +3,8 @@ import Layout from "@layouts/Layout.astro"; import DataPrivacy from '../images/data_privacy_arch.png' import FedAuth from '../images/fed_auth_arch.png' +const base_url = import.meta.env.BASE_URL; + --- @@ -10,7 +12,7 @@ import FedAuth from '../images/fed_auth_arch.png'
- + Back to home From 5d0ebc5ceb5f89f9b21b6464008bba8693865fdb Mon Sep 17 00:00:00 2001 From: Yan Cheng <58191769+yanchengnv@users.noreply.github.com> Date: Tue, 1 Oct 2024 20:06:15 -0400 Subject: [PATCH 09/12] [Main] Support object reuse (#2975) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * support object reuse * fix formatting --------- Co-authored-by: Sean Yang Co-authored-by: Yuan-Ting Hsieh (謝沅廷) --- nvflare/app_common/ccwf/ccwf_job.py | 21 +-------- nvflare/job_config/api.py | 72 ++++++++++++++++++++--------- 2 files changed, 52 insertions(+), 41 deletions(-) diff --git a/nvflare/app_common/ccwf/ccwf_job.py b/nvflare/app_common/ccwf/ccwf_job.py index 13631ab1d3..0f66af4567 100644 --- a/nvflare/app_common/ccwf/ccwf_job.py +++ b/nvflare/app_common/ccwf/ccwf_job.py @@ -20,8 +20,7 @@ from nvflare.app_common.abstract.shareable_generator import ShareableGenerator from nvflare.app_common.app_constant import AppConstants from nvflare.app_common.ccwf.common import Constant, CyclicOrder -from nvflare.fuel.utils.validation_utils import check_object_type -from nvflare.job_config.api import FedJob, has_add_to_job_method +from nvflare.job_config.api import FedJob, validate_object_for_job from nvflare.widgets.widget import Widget from .cse_client_ctl import CrossSiteEvalClientController @@ -318,21 +317,3 @@ def add_cross_site_eval( get_model_timeout=cse_config.get_model_timeout, ) self.to_clients(client_controller, tasks=["cse_*"]) - - -def validate_object_for_job(name, obj, obj_type): - """Check whether the specified object is valid for job. - The object must either have the add_to_fed_job method or is valid object type. - - Args: - name: name of the object - obj: the object to be checked - obj_type: the object type that the object should be, if it doesn't have the add_to_fed_job method. - - Returns: None - - """ - if has_add_to_job_method(obj): - return - - check_object_type(name, obj, obj_type) diff --git a/nvflare/job_config/api.py b/nvflare/job_config/api.py index 3fd0c888bd..495b808f94 100644 --- a/nvflare/job_config/api.py +++ b/nvflare/job_config/api.py @@ -14,14 +14,14 @@ import os.path import re import uuid -from typing import Any, List, Optional +from typing import Any, List, Optional, Union from nvflare.apis.executor import Executor from nvflare.apis.filter import Filter from nvflare.apis.impl.controller import Controller from nvflare.apis.job_def import ALL_SITES, SERVER_SITE_NAME from nvflare.fuel.utils.class_utils import get_component_init_parameters -from nvflare.fuel.utils.validation_utils import check_positive_int +from nvflare.fuel.utils.validation_utils import check_object_type, check_positive_int from nvflare.job_config.fed_app_config import ClientAppConfig, FedAppConfig, ServerAppConfig from nvflare.job_config.fed_job_config import FedJobConfig @@ -33,25 +33,39 @@ class FedApp: - def __init__(self): + def __init__(self, app_config: Union[ClientAppConfig, ServerAppConfig]): """FedApp handles `ClientAppConfig` and `ServerAppConfig` and allows setting task result or task data filters.""" - self.app = None # Union[ClientAppConfig, ServerAppConfig] + self.app_config = app_config self._used_ids = [] + # obj_id => comp_id + # obj_id is the Python's object ID; comp_id is the component ID for job config + # _oid_to_cid keeps the mapping between obj_id and comp_id. + # this is to make sure that when the same object is used, it is configured only once in the job. + self._oid_to_cid = {} + def get_app_config(self): - return self.app + return self.app_config def add_task_result_filter(self, tasks: List[str], task_filter: Filter): - self.app.add_task_result_filter(tasks, task_filter) + self.app_config.add_task_result_filter(tasks, task_filter) def add_task_data_filter(self, tasks: List[str], task_filter: Filter): - self.app.add_task_data_filter(tasks, task_filter) - - def add_component(self, component, id=None): - if id is None: - id = "component" - final_id = self.generate_tracked_id(id) - self.app.add_component(final_id, component) + self.app_config.add_task_data_filter(tasks, task_filter) + + def add_component(self, component, comp_id=None): + # is the component already configured? + oid = id(component) + cid = self._oid_to_cid.get(oid) + if cid: + # the component is already configured + return cid + + if comp_id is None: + comp_id = "component" + final_id = self.generate_tracked_id(comp_id) + self.app_config.add_component(final_id, component) + self._oid_to_cid[oid] = final_id return final_id def _generate_id(self, id: str = "") -> str: @@ -79,7 +93,7 @@ def add_external_script(self, ext_script: str): Args: ext_script: List of external scripts that need to be deployed to the client/server. """ - self.app.add_ext_script(ext_script) + self.app_config.add_ext_script(ext_script) def add_external_dir(self, ext_dir: str): """Register external folder to include them in custom directory. @@ -87,7 +101,7 @@ def add_external_dir(self, ext_dir: str): Args: ext_dir: external folder that need to be deployed to the client/server. """ - self.app.add_ext_dir(ext_dir) + self.app_config.add_ext_dir(ext_dir) def _add_resource(self, resource: str): if not isinstance(resource, str): @@ -122,26 +136,24 @@ def __init__(self, obj: Any, target: str, comp_id: str): class ClientApp(FedApp): def __init__(self): """Wrapper around `ClientAppConfig`.""" - super().__init__() - self.app = ClientAppConfig() + super().__init__(ClientAppConfig()) def add_executor(self, executor: Executor, tasks=None): if not tasks: tasks = ["*"] # Add executor for any task by default - self.app.add_executor(tasks, executor) + self.app_config.add_executor(tasks, executor) class ServerApp(FedApp): """Wrapper around `ServerAppConfig`.""" def __init__(self): - super().__init__() - self.app: ServerAppConfig = ServerAppConfig() + super().__init__(ServerAppConfig()) def add_controller(self, controller: Controller, id=None): if not id: id = "controller" - self.app.add_workflow(self.generate_tracked_id(id), controller) + self.app_config.add_workflow(self.generate_tracked_id(id), controller) class FedJob: @@ -571,3 +583,21 @@ def check_kwargs(args_to_check: dict, args_expected: dict): def has_add_to_job_method(obj: Any) -> bool: add_to_job_method = getattr(obj, _ADD_TO_JOB_METHOD_NAME, None) return add_to_job_method is not None and callable(add_to_job_method) + + +def validate_object_for_job(name, obj, obj_type): + """Check whether the specified object is valid for job. + The object must either have the add_to_fed_job method or is valid object type. + + Args: + name: name of the object + obj: the object to be checked + obj_type: the object type that the object should be, if it doesn't have the add_to_fed_job method. + + Returns: None + + """ + if has_add_to_job_method(obj): + return + + check_object_type(name, obj, obj_type) From 78a4e60d2d5d2b02ec3f9f028e27283d42a478bb Mon Sep 17 00:00:00 2001 From: Chester Chen <512707+chesterxgchen@users.noreply.github.com> Date: Wed, 2 Oct 2024 11:20:40 -0700 Subject: [PATCH 10/12] update openmind-psi to 2.0.5 for python 12 support (#2981) --- examples/advanced/psi/user_email_match/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/advanced/psi/user_email_match/requirements.txt b/examples/advanced/psi/user_email_match/requirements.txt index 8a68abc1ed..e4ffc72b58 100644 --- a/examples/advanced/psi/user_email_match/requirements.txt +++ b/examples/advanced/psi/user_email_match/requirements.txt @@ -1,2 +1,2 @@ -openmined-psi==2.0.4 +openmined-psi==2.0.5 pandas From d3cdfadb74b2eb4156a5a95db327e136975a190e Mon Sep 17 00:00:00 2001 From: Yuhong Wen Date: Wed, 2 Oct 2024 14:35:28 -0400 Subject: [PATCH 11/12] Replace the distutils with shutil. (#2978) --- nvflare/tool/job/job_cli.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/nvflare/tool/job/job_cli.py b/nvflare/tool/job/job_cli.py index a5688e7195..e458e9b96f 100644 --- a/nvflare/tool/job/job_cli.py +++ b/nvflare/tool/job/job_cli.py @@ -15,7 +15,6 @@ import os import shutil import traceback -from distutils.dir_util import copy_tree from tempfile import mkdtemp from typing import List, Optional, Tuple @@ -157,7 +156,7 @@ def create_job(cmd_args): for app_name in template_srcs: src = template_srcs[app_name] app_config_dir = get_config_dir(job_folder, app_name) - copy_tree(src=src, dst=app_config_dir) + shutil.copytree(src=src, dst=app_config_dir, dirs_exist_ok=True) remove_extra_files(app_config_dir) prepare_meta_config(cmd_args, template_src, app_names) app_variable_values = prepare_job_config(cmd_args, app_names) @@ -352,7 +351,7 @@ def submit_job(cmd_args): raise ValueError(f"invalid job folder: {cmd_args.job_folder}") temp_job_dir = mkdtemp() - copy_tree(cmd_args.job_folder, temp_job_dir) + shutil.copytree(cmd_args.job_folder, temp_job_dir, dirs_exist_ok=True) app_dirs = get_app_dirs_from_job_folder(cmd_args.job_folder) app_names = [os.path.basename(f) for f in app_dirs] @@ -704,7 +703,7 @@ def prepare_app_scripts(job_folder, app_custom_dirs, cmd_args): if os.path.exists(script_dir): if script_dir == job_folder or is_subdir(job_folder, script_dir): raise ValueError("job_folder must not be the same or sub directory of script_dir") - copy_tree(cmd_args.script_dir, app_custom_dir) + shutil.copytree(cmd_args.script_dir, app_custom_dir, dirs_exist_ok=True) remove_pycache_files(app_custom_dir) else: raise ValueError(f"{cmd_args.script_dir} doesn't exists") From 5809a32e8f9f59908c43599f01c6c6ee35d0e84e Mon Sep 17 00:00:00 2001 From: Yan Cheng <58191769+yanchengnv@users.noreply.github.com> Date: Wed, 2 Oct 2024 16:17:43 -0400 Subject: [PATCH 12/12] Allow multiple workflows in CCWF (#2980) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * support object reuse * fix formatting * allow multiple workflows in ccwf * allow multiple workflows in ccwf --------- Co-authored-by: Sean Yang Co-authored-by: Yuan-Ting Hsieh (謝沅廷) --- nvflare/app_common/ccwf/ccwf_job.py | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/nvflare/app_common/ccwf/ccwf_job.py b/nvflare/app_common/ccwf/ccwf_job.py index 0f66af4567..36ef6a1300 100644 --- a/nvflare/app_common/ccwf/ccwf_job.py +++ b/nvflare/app_common/ccwf/ccwf_job.py @@ -30,6 +30,8 @@ from .swarm_client_ctl import SwarmClientController from .swarm_server_ctl import SwarmServerController +_EXECUTOR_TASKS = ["train", "validate", "submit_model"] + class SwarmServerConfig: def __init__( @@ -189,6 +191,7 @@ def __init__( name: str = "fed_job", min_clients: int = 1, mandatory_clients: Optional[List[str]] = None, + executor_tasks: Optional[List[str]] = None, external_resources: Optional[str] = None, ): """Client-Controlled Workflow Job. @@ -199,9 +202,19 @@ def __init__( name (name, optional): name of the job. Defaults to "fed_job" min_clients (int, optional): the minimum number of clients for the job. Defaults to 1. mandatory_clients (List[str], optional): mandatory clients to run the job. Default None. + executor_tasks (List[str], optional): tasks for the executor external_resources (str, optional): External resources directory or filename. Defaults to None. """ super().__init__(name, min_clients, mandatory_clients) + + # A CCWF job can have multiple workflows (swarm, cyclic, etc.), but can only have one executor for training! + # This executor can be added by any workflow. + self.executor = None + + self.executor_tasks = executor_tasks + if not executor_tasks: + self.executor_tasks = _EXECUTOR_TASKS + if external_resources: self.to_server(external_resources) self.to_clients(external_resources) @@ -249,7 +262,10 @@ def add_swarm( wait_time_after_min_resps_received=client_config.wait_time_after_min_resps_received, ) self.to_clients(client_controller, tasks=["swarm_*"]) - self.to_clients(client_config.executor, tasks=["train", "validate", "submit_model"]) + if not self.executor: + # We add the executor only if it's not added yet. + self.to_clients(client_config.executor, tasks=self.executor_tasks) + self.executor = client_config.executor if client_config.model_selector: self.to_clients(client_config.model_selector, id="model_selector") @@ -287,7 +303,11 @@ def add_cyclic( final_result_ack_timeout=client_config.final_result_ack_timeout, ) self.to_clients(client_controller, tasks=["cyclic_*"]) - self.to_clients(client_config.executor, tasks=["train", "validate", "submit_model"]) + + if not self.executor: + # We add the executor only if it's not added yet. + self.to_clients(client_config.executor, tasks=self.executor_tasks) + self.executor = client_config.executor if cse_config: self.add_cross_site_eval(cse_config, persistor_id)