From 32862dbb6f91667b605c93a2f5de411bd3bf1e76 Mon Sep 17 00:00:00 2001 From: Kristian Georgiev Date: Thu, 23 Mar 2023 01:05:38 -0400 Subject: [PATCH] update sphinx docs --- docs/conf.py | 2 +- docs/html/.buildinfo | 2 +- docs/html/.doctrees/environment.pickle | Bin 122641 -> 127196 bytes docs/html/.doctrees/trak.doctree | Bin 400710 -> 425550 bytes docs/html/_modules/index.html | 6 +- .../_modules/trak/modelout_functions.html | 51 +++++++++++++ docs/html/_modules/trak/savers.html | 38 ++++++---- docs/html/_modules/trak/traker.html | 18 +++-- docs/html/_static/documentation_options.js | 2 +- docs/html/bert.html | 6 +- docs/html/clip.html | 6 +- docs/html/genindex.html | 20 ++++-- docs/html/index.html | 6 +- docs/html/install.html | 6 +- docs/html/objects.inv | Bin 1332 -> 1353 bytes docs/html/py-modindex.html | 6 +- docs/html/quickstart.html | 8 +-- docs/html/search.html | 6 +- docs/html/searchindex.js | 2 +- docs/html/slurm.html | 6 +- docs/html/trak.html | 68 ++++++++++++++++-- 21 files changed, 195 insertions(+), 64 deletions(-) diff --git a/docs/conf.py b/docs/conf.py index a372a8f..e4a549f 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -22,7 +22,7 @@ author = 'Kristian Georgiev' # The full version, including alpha/beta/rc tags -release = '0.1.0' +release = '0.1.1' # -- General configuration --------------------------------------------------- diff --git a/docs/html/.buildinfo b/docs/html/.buildinfo index 7f9c650..a4d6b90 100644 --- a/docs/html/.buildinfo +++ b/docs/html/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: def77ad9866373dc2cf63179c7913729 +config: 1a000b88aa8f9cf78e81853015c446f0 tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/html/.doctrees/environment.pickle b/docs/html/.doctrees/environment.pickle index 4321e10d1cdb1a8367942b3c23bbfff0c76b41a9..698c812336cdf6efa9bedca7f9bfd59103191d20 100644 GIT binary patch delta 26509 zcmc(I349bq)_98CcS7!Dl5`Gokp#kh1&CY;!*C;_z%ZHVWTu(S40CYHfUZYyIBT>y z6vP9>2*Sn{U6uV%*>zXfy4?Qx3?ad4uyuM2oqPb0Y_%H= zR$gziI9>i#K$|_g{07z_zr)h$aq@cB4rj+y0Vk7V=4wdCz67V;?$(>^M!(s_SQ%rU zU~a|7V#-%g&MM8r7@ZUo-(m1r-Fm0pDtDf5Fq!ln9-Gk((&!xqCvS6`c^B{U-^p5K z5QHwf$pakP3|*`OYhs5r(C$-QX8Q)c!Q(dDf%|UOCe5*_vkM5h^e*=%+LsR7Vk^9~ zMW)%(X|}@uZoS<>dUg44_A}1Q%;jdP-gGzL<**vuyuRIOF;P`fcO)<#9Niyvr4=S;Z*&a)EP;&BSli8|_^omFPbkBQyI!TJnecI-Y#CLdRmvn>MU*;E^{Hn zPo^+7wtjPo`67Nfp`d`Gr_m}PXSKM@ypz>_laPll;+#azOL16pmyz`6H~$Z#nLrzQ zEG7b>x?nvU?I60pRtf3^EIt5|Is`Z9uvkINzyPN+M(kvOUF!m;y|*u)(5E>8y-OhAE*4B=E!fuBt+Dx_RX-IIXoa+oc)jf5}!d1?-jk58+B z>+rNfxXw;1gR41BGl4eCVqEhEr_rqRYg)-n#KkJXo}I*5=iz75O7mzv8`E}!i}yIK zWY*H*zo%7<{(?!uTGL5G^gH1-ML4=S7NO(zn( zonFa?E{#wnNMK7O3Q9H>Xgewld~_(hlXttp#7KO17>sUEnSoeuMgUGGQ)>TGMM`I# z)WSoeP&Y##8bF6=XVI3cFS`{x>0X2=?!j} zyV^ZuLLiY6pUN!)IewYD9kAv&RJZ=f)Bh%<`^wW^2GMiM<%pjC3RWzvu z5B7BGt#1=pYDR~6L_iHaia(+m!W zl{fQN=$?iZp>BUcO-z$tsKfOIMS$H}PzqObK{;ISDyW3(nS$czH=zFYfBHFcnoMh!{i zmTAa1tk)1bJESRw>rM`+p@<3)L9llhYt6?F4BJf=h)D)SM4ri3)fktXdG;p0&QUh083E^UYNn^S%g{!G{ z@>U)cQ(f!F&zCHl6l1hn9AKf4(SS7Z7MsgW5*uGEi=hE8h;>;#&MxqVbsmdxE#Nra zy^Bg$4nYDwUG@}u19z5}whNEI@Xu-aKXG4dAHD<$CxTDj{}CRQpXxOq2`7V3zv>cB z1)u(&EIcMZHT>vZp+|l)q#noLmQO6ApgsN?UruA=2;!t8Aj1=QqucJpmny69*^1?8 zG~Q8FpTvWIH99u=eGB2SEoOa}!GX6_neeB>xb)0GV?u#<;^;~N#|#^bZX&4ohN|qm ztN?}{1_Jb~r=-Ra%Bf`Lvs&6IL<^8f_>syiFhWu)tj@--S7uksJ-7^HVL@>Bx_k-J zpql)`yC9nIKEAGcSR5_Bhr6na(Ifb->ZZ(jz67Hg0v1GQaP}Gj;a^vmc;lj@qI~f! zCKJaQIKMBBrS^Uy2H>7{0nuuh=y<2W>c{@t9WcSx2((qoB%|HLPg>(PxYn-m3-N%u z$}c357BK|ozs;|}W*{L0s)a1Lc-jrVBm)*|Ztx13q)nVOWzP4-kRa!u&u}G17+KD3 z=R(L*kP3AuP*d`mCh|q$YRnwbCsD(R~PN;*@d|^1fQXK^4!XMTS#ib1iC=P#6o0G4sRf>XB>k1PBO2#AV z3fR~s>tGP93p{Rz$L(kQ&VpV*z26tVQNGM5u9o`{Z<&w-Jik|$?^W>3hv{|z1r4G6 zQtuX`p{y7@^E}C}YM5ckma4KXuMB1i&@+Nc?E%Dh?FQRP35M0E7pkwp1SB>GW7=UP zl1$sXCY)_w&9t`+EZ89B$_ugWfM8(H*`b!*k0gV)>^W93WleoA@xe&rR zH}Qm!7#~Am>HyC`OtHUKiM8N6itiGeNqA3Np=3)OU0Aue4!iRz!emHO){M5aWTOnGJh|d2&FhrvatcpfcW7;10)<)-fG#*hs^lu zDkkZ_2DS-rM~&Jr&FZFXA(X?Ps5BNjT!}PQ*s+DZgapa!pM^fq)LDV|J4s_0rx96$WDLXDn2~HetThNpxNJcYgu$`}S<{&q z)gfZ2r5Gp-;>%<5mXieqO>SAbL1H;wNC+gn(nW+o!W>;d2*lLs;z1x{(p7>$`-cSA zZX|n6HFSjnx%BF>g(FB-EGH~1bxwqhPuL`aeQI^`OwjO&v16zagtl?=9k7LBgY6?# z!Y!i>lnV*zgi~s4TB@ngKq=%9gg_oiB11pfx=31YXPiUDX$m1#^4L*uF>Cens1P)vfdVqM~uol%&kt_fDm3Rf{VOvQkH z-60RwNoekcwRuPeBv=SWz^tI$pI_T$DrbPowJ#Fcn!WF;mhc9wg;~-Fo8|5$#84S- z4wa!_zrHn^57^j+|4585Yx95C40gXGtA9Twu(%Y*J4&aZ2Ph#ec!n7ymV zv%xtd4^DjSKpq&PMjCVp$5$Jim`JEnRY`F>I5>!s5JFUAp68YKV#4X>T2uo(_!1Vt ze&%`$zd@b92ElYfX%wm=5ss(~J&HTllz8brTpQR6o0uvhA=AH(xJXDatCsW}oS2H4 zp1*5l#!Kt>pf0Bq9m`;*gSn9iAgS__p*U2Pb0Q(rzba=&LgLy~c}+e`4RZ#2E#nF( za|YY{PLSbDo3=<~khFP&v5#S{jf719+B8!VeVsRu8O#7L@WsRO#qH#IU6>U{1beu_ zR|b#b>r6tC2>lBO$>lJ)+(#})$>mrq{)I_Mrmomc0Cji@KgCP7#I@4e?sfo&&q+ce zqEdVk(b+&S@dr8M0f~-P{vX0G@wSfqM0srjPX(js8tp>5T4L};Bvh4(4cf>*D2cwY<@)a-F@VJoZn~}*_I{eK z%keVB6vWZhMaZH-eyTgPTH~5e>h@CLR7ET#dSW0$`o@BMqKAqbT@_w`)e= z#lehaGh1Mj%x+z43B2R&8YJu2&Ur0Z?hNG{{2>5QvL2c3@-xSU+V1=TWf+w0Y9k@> z|I>Ewql|{`+4z#B9sSNerW*|)wdqg@8-Rxg6gz0RF#6uX$1RD+{^FJ}26|+DGps=l zesmP>)fJ$V__f)6l9odQ3NfhR7b77NCTU@zYtZt*93Vx%VA8_o#jBARIBEI(TBm1e zH-o-hjXY_Ie8o;8^K-3b^v#9v3Yh?DCi^iRickX=ULy#qP02nlV}&IC&X6ad6hu*O)2?`pucdTJZI=kSX^VhVAT7w)=U{EELLA<_?%1Nu zyQojHBt}A}e|`8PAwgay%9&0uWbb1-{qELzpg7Iq23Y0KU0lVs#Lh>;rlhd*i^qg6 zE}n^mj8fR30X-E7i7?sa_nle?W8Mf~E%H{o#~lTqX5!0B@<5FVOC>da7zy*T z8cXrvr8%Lhd_NLW{j2ibNJ#vEw)fmJjbdB&xn;%72ICS2O6EeQ21$7}*Vl(CE;mL)YhRy2j$pEeRQ{cEo^5)wab49uk3^SCWm z7stLl$475W)RLbz`TEvLTUX9V0h(fNJ#vEo?WuCxQ*&C9lk7q z&-pp&%e26+!0(BKZ%KpquPh7IAdZAg{~FvI35fx1bC635B^$xrAC_lcjfAu$P`y3~ z1{h}~^J6F*o_3Ef9p31Ya|HD84WZKl-*X0jo2q4>&1owU{hg~emj1|98$*BL3YBD~ z1UHhCYZLKlb8`jxmB}jjW$Qq1a?>nD3rIbDG)KwqrLTO0PvqTi@QJ(x4nC2$!NI3v zfhWAtvLx>eSsKJG+0@l;SA1@kfj_jgqTzVBFdLo5PN6*SG+{T&1D~{6r0>>=yr*%G zFml-YU=~6zAP65oN&X2f*`=B<{1HI&g+C?iUpw0S5iS2;dSzc`eGKJp;V*E7{gl7a zo2MN<=%fc)-0T+u-Admw(mp9CzW7kR0|D||D!4IyQnkYq*`I+Ms6Ce4d+?dHli-`m zzpkATKX1Mpgvh~Ttvb2fZCxdoKe4Wm%et=Ra=E7~2v4@nN|ER!f-1-1%YP`q9$SE5 zCjO;ujuK%qZn-xfpLP$!E9|3{6*_#Mvthp@AMbW0;aAp;5*?*zXsTI3dkJoFjSgV! za%g3K-goR*Q~KPcprqoj8J~3(((YF}$I1i_IPa6oQ(PzI^50xR_+Ix08J^}jESJxC zPRQle>-|bb=3`(4PxoApzg?FlA!Xvj8&nDzC$1ZUvM}B>3|DPzR5sU&JIp8>f3{tN z_ikLHtZBiSTdDw9jHhjyDEIE&WR%MvZ@N?2U`~*fV@o=Ic5|DInX+Yjrb5Xx=^+xh zX=@9|B*q7 zJw`mc2NmF*w-n;QrOG6{?DjEoCwp&SAeaAq zyIwBOyJL}De&~)hayj`3oDCdf#S-8D^#G(l{70Th|$TcU*4;T_!t`2Jm4 z_@J*mUD5Gy_?j9o+L=e|7VgT!$-7cy(j~i=$>q(vf+O=sMS1@2U^IPfcTm{6J%O># z#GQLuWIB)UvB>4pyJ$${A##nsn@G2!>0?xg6i4rgw z|NdwW-g)n=R0W->iTM1F^YFNJS-8YqsP3Z$H{N%HlEO^9|31AEFb98g-wGwUxrx~R zcplz-q%l{~iH^86JCFi@c61WS0kV{27UI04tCfHyc*oJDO2GBN`%Ox~3fy|XN@Xk6 zDjQCMGt8w~YLWE#rTbNc+i}e?t&%X0y~m~~0cQM*V{?^&wYd0!MM|My*F^6nNx8m9=fAz%L)1q{O^g!Ysfex0R}T+KvxAv{;FH zEB@C*Ym|W7ar?v9EBWqD#IN<{;ddWanX3<%9yco6?ZLZ`->3xa$LLf(9(Oz|Fd-Ky zsotH4GkbI8>c9+~z$x`|fLKIa7Y_%y!KpaZ$otN|=}NMP6R{1L4fIOLRwu^n1f0Ut9%)qq&S3n=WF?>%zw^jc zCE!V1d2*?e`=^;-+*OdU;Ai;2qviPZ+f(u6I}%mH`#i8&fp^`Ju7X|! ze3j9>MD1h7ZJGF!JJQ8%8&Q(l{$Hl`(|XdBntGLKYIV;rB`*0NoQ1ZLpD8F_>hX9`*97-`#JdjeTivG zm&r)N+mGepC-;}DhZH8Vv$K@~=iPff7)IYo91pN<5rNyy6L!6*c0WPc$jpHQ`@8F+vF#gNOV?rKItA=1)}KGzsti zNs(9K+Re19!1U-5u7e_(-{%py4lX`&oC$0?&4OKwP4MG%X^PJRLx)4h=Fxy7xCr(; z$#McfCf#7|>5y74nP7s|iO^2jm_(ak?aYu`;$gwsyFzM-tpsb&htv|iLhUq(>o-HH zi7w>E!IUQ&&YYBT9-$+_{FUlF2L$mMHt z`6d}3K3CzLCwvJ{HG;aXxcfP0$`kQ%QHpIY$J%C;tJm!R1K$78?=s+&vS6N z8b^;f;M{O#n$u#i-ZK^DiC@@JP4E3LY>gQc5Y@$7I~x1y2h`UW*jw~cQMCBcdQ?`| zx3W15rQUHbm(|8@=ACwz_{NhcXaCC@?EQCg?+gFf6+MI-j=dii_S(K|Mfl@?Pt(-s zr9(ePaCCbX7D_yv)(U4znriWguO3A!@jG7?C9DGL(yrFp@Hby+*n>lR7cRS!n@MW! zzIZu`{?qQ#p2yR!l%!Dn|I+>m{InDwvvCyyg?yy_H$YOD@*8Q-epYiuHw-^^rC3YQ zbk#^_Ld3-xqF)fec(qv+=mBF6R?wenWJvTnc!S&HgcCVn+Y%b!mMfYVT6p|QAuGK5 zRROrM{p;c!+AxHX9(?TUD%8{a($}*}V@WqsQg5OhNV!B)3nV{Spj>9McE1}M3*hv*?0KG9UK}7Ew&Y-X>dDVj3&bE z%VJbLL>MBLm7qp=Tv&o8z^%IkO@-S_>(Q2C7EI z6D4|ld9aAg6ZZh_kT&hPGiB(NmLz&cASdm#6^Lu=QKQ!l`)(Yquyk11X_n-@7?@il zx0E;*95V<9y}H1a4B%YgPqdbE!)bNky*BEN78{%+1}8ka>cRci@;1GDlLL-FCC>(% ziN+2aIVV%!1t+{U(k6|K99im%^&?TTcO~Is3mgY)ao>Csdw|nKop6@k&8xTuZY9*L zwDKM9nw7wdev5@$Y2(*%YQ&r6xUiDn=%`VVw5+OK=_IE@*HWbG+4y#sh~c3N(P z2;;On?BHG`+Egzir;)=sVGb3I6{jih|?RflME2kBrJ_qH9v13uSOrmi$8WBQ*fI>-(9E*M}9-4uQ#PefOns{s+`d#fnBd2EI z^@*rl2#j-cu$`=S5=vEaxSG|E^(s`ge9h{|+9WZx4poSnNk|(3k3F+MNoiwINo|19 zehgA2R;@UHHWJ0HM)XJwF+%ZPBPs}N`WA>96Vicy3nnx?na0XG8d=00%_v*k+KKX@ z@)Z-}h}VB=LZeyuS)#oOB1|nVd$>y6YeKPrw1P*Y;kJuM)8Y0ikA{;bS9mm@HF;8d z9-1`lzol^q1T$!2;wYxp$MJxA(_NgZDIP*EabM7JBj;!itKNi2=|L4~rQRw5oV zft^z2^@t~u=7mUQm^UjSGkiU|Q`OCXeRT8zOZ0!h` zZFKukF$`hB9#lfAC+?y1i+K-f2Iz5kVuoPR+Chs2boZZG!Z&+R1)!AeMI#x?e(hm0 zLiqBnFbk~`Z`(`jPwquUgz(SzqH;k0nB7wLp+W+!*@wzNRde?tE|1EYcAddxF)j?8 zWJ)HS9s9u6dc@QFP#x3x?!BmxDU$IM$22Lf+e2r!h5J!WE+v*a!(%e2XzkvQG*U+r z9Hxb(Fk6t0EB{_8}+by7>bpyB{^cyrVsc7S)GIP5Vu9MSKul)X?cWOtW)0974s>g&F?zxwbB4cuPeLr>~woFA?Y&u@tgNBL^ zJPa=ldwx}4)z^fY`+{mQ_lwD*-GQ>t{k#YLE}QvYzE%&uSBk&g$tAPg*`PIpcelKV z8dz#BXq{r}1tewRZtYfzU$!#~AKjUn$l7ev?iANtK*fxvPkT4@=lR`L*Rgt0djue< zE$uG&6_e3TElA44Q)yKO4f$;|XKggXUm_qU^Rq1dnD#;O^9v}SvGSPqteE*cDq~N* z+E>I$&!ge&=~e9;V%PJikUjlI`;NFretK8?Z}F_$?usr`eCK(jNu(15oH|@2{x6`W z(Z^z>8%Dx@8J_AZpH8_a3y69GOVq&u$V%RiQ#f5igv!QZF9sEmocQbuG+TcC1<15} z#LF+BDi(&Q-U-6g7tzR}w2iWp9&!7NsHT*{v*gYjA<5NuIt?cHjS{I6?a!lpAp60K zs0eOfzX)h82tAqw_lgr0NvTtq|CAhI6(4XR@UH&mMq zVpd>8_x0k$?QfwZR+FpEhZQ`fdy~!>pS^{u8D63I#+xWFd82zH)1$AL zzI&uI@#?qH2q3!qZIA}yJ7K%$+^26N6bGzbeh(DAN=&(gG#V;gjy4yRkZN)1ZSZGj z+TqU|z!A$Zlg+$DvmDzcI_$eIp7@J8NjJSDM8&A12-2+8&??BH zGw6tHM#Tk%aeVH+!F}8qnKz<7H+-M(%^T-aU!8Mq-#*>xgtVi6uYcToZdIK+RduTB z)IELg{oqX0)~BN)Zj9I-ntwFnB|_>4Pmvo4n8FIk9JoEKx~+BoZ7ye2uik1intNOZ zwP6kd3`GVNYd9n9<_>MY2kwkvmzvIQyK6oth&E|^x*XarJq2tFFG9Ae@X2_*GW?Q! z%F7vTHJk044ztc>&~fffhRKFGa3Z{o2{;qC)kKLxR+4~uFD>x%ck>p53?qbHb*id3%>LuCr-4>J9uGh3% zjU7x>22WV2*IP7wT5FH7r_1JA&!tGQIV={d-e&V+mb*~ig2OjI;5Mdj$2>Tw=yr?HE&q(+Xln`|1KMPp~b2NXv^I;~D`wc8Xq z9X86b3k~N1#o4;GR{JW48RcXGei}t5F*@ zqqo>xYg`-`%W+0KPJ|(s!{QiB>#!TlR+piW0}~ifaT#Z*9(|6nPh=Pz!eq1=^xhtc z0}P=vTl%fWE`!}=$mboB7~I%_su(+s*uxp+=vmog?(=Zu0@!p^Vwd3^-Yc5*au_=( zgj-JLkH&LVi=Zx~(z~id(e(RbvPu~-AJk%|Gio%U!Ki1TbquwJI>WQ@eoWpnM#uHE zn{^#}i{0Q-hjGSSBnoy|Jkz9*+E7Onw4ammkvfg5HO6k7FXo-FD3*q;Iku2I3!7py z^O)t5nF1Ypo6c%v^TL#c6R}xgs5HDATV6`(4Aq7)ayS_5-6nY^E$C=eiB>3%%OkDO z9G90`uR^bNbfaOlbebtriYp!%3TBSSm?<$xK`{)3pm~el-SLE7T`sBcFK*`FQM1 zD8u81gxq{J7ms(L4xq6)I&qGuO7I8P<-LSFAHD{2pT=e}7<*Q;v6B)rkXLzPX+9e~ zl?|>lcU!bNy9Qk!LzRlykyt#95u|hJ^jfRVpi$yRHfx%Q6k@U!PA29MHN2Ntl*PDk z`?qUtdWY3SlX)v7CzTfd4_Ai^!IFwqj~1|EBw#X!MM>#Y`=mu&A(oUR?P@XlTj8~& zQY8BCq%uA;iIfc`!inxQ()`#84ar&ZY{844d1L_z2|l`r89$*G7?Au4{au6 zkG>Bb3d7PF?&v`Wz>&3?c{uW#%;FkG7rPpR4A&96UCGEvI*qYIqqXD8(C(n=maQu< zvwojs_G0gAvNG}L$fC>Mjx1FfM7?g;*YLAxY?OdFXgL&CJ8scR%TZLTCh#qr~wiojg zGlhur@zHJhtcu7VgVt!xuV8DfGmH8S<~fb0<`Cj%4!H8E7d@6w)9u^&WqAB&eghtB z3MfQfK-+5y3d8CAKwDTLT_k>6P|ORSRLU50iO%Hc&}--g&EBnWrXaJ4iOLD|-I#HN z;)9`*dX4%%of-QXyDerbU8U79wlE(pIJdA0kE;r)WZMgCLlNC(nv*V(UOQNv{TUbDNJU$#N3WSI2Oh(I~w&?0mVuYuQA0wxrucT_AZC}2g)4Am9E#T$HL5{mm_>3n*pZnG$4F~kvyji|I*dcesn{2we{G{ z0*4bzKZ_oIEE#`cl`O<&oL{aIwnU}yl8NuahN9nQmvkCAZgy2UCvGbn2davAu$C@` zkIVE#y{&92bXBC4rq$Ng(ZH|M;OwCBHMN$0%sU>a!)`P|YiR`;j~rsO?K*~T#EWn} z)?)BVSx#DphZu`JNw2e;tv2|s^a?myrhXNoP=A>2DBTSsuxne}%fr0`e}jRW_ukozXf2rZmjQm?WyCWY}C;NHXA1W!5!m zVId)ob}1Q8&L~{9^j59O1+MCwupFzBGAKBHDs`c$E9_d^$`vjt6Jg6;QVvChQ<&>k zmq5)yQW2u15-6?GuJH18M%v5{s}8GiXE;rGuKAo!7J{=>+080HmJH-WT8!*HGQwY~ zGNL_FLCd)G0VZ}NO~<(S@O~}W!O^aj#^RZ3R)c5MqK=;$@T8T-^NS{an#fKLX)>Or zDfBQE5A&sI?8x*JsV3JebVE%J7doyDO>J7> zuv;82RMU6a@hfRZ8_Nl5+DF^mUkj02<>F7|Yv?_UU3p0ZxPCP>X1?ODN7zXl) z0qPk)(IsRtN8`%FXp}e=KCVjg`o=I0?HpG8pGo?W96EsLFlvY1`%6n6&mH>3nq=0IurOr?`rByr30@sP=Ta-H z&H1PK!}Cq^R}HzcZ!gs1ifz)HjMwTtsq!B`_oS2X087wZMIT|-gRznmID9xKd+$m2!p|JLp}ZGm2Fu><$r@RF&7U zl15mRY4tqPsEcYRVNO|8TUX7;nLfI4qIl_)0&AMGmcC2Jpaldk0q6q4b12P-5=(0| zk|pN()Q+qIm#9jtx|i6XSa6zkbc?1+Vhoev^QPQ7Y7wP~;H7K~-TlyDIos`9%u+IF zn$R>UP#>>7eF|WOHO;S{@j!w;jwEJ`5iK#OXaH!j{p?I+Ds`VWj={NSa>N;?+x)i%7DWNe2*xw zH^lE(`u*20D(H!tTpr?s%79$ZU_zYU1_umr=>Zg;htG2(sxf?QOGgzJe;kIz0E&*c zxFhg*OyO~I7#`)J)VS~3y3Oagmb#9m|=ifgllT#THL_TBrm)_c) zZ*t0l;mS-UZzOpqr27YV;PxH)RSV$rdZwxl`srgwKy7T(O4Sdky{Gq2;r}Mk(3a2pN8Q~y4 zDQkyV;^*)OSxn{+p{gq1;VFO*9#9)BHPYp~$XQD+YQdl|n^qd_erm;wIA8w0C_d6% zL(~*~#^+u+h-KbK&1yft4@H2e<`BmZ?Dt{NK0Oy5KWY9%f5*RWL?uS$_^X3q@&C#3 zUt)s$7kkb)*;BfP_8WR37ncFf4eDBCneMsW5;_fix1cDJ@61RrtbtJ{EF~9Z)mtM0i7## zXvxj$P3jBht2fg|lyy|mmplxMU~UEyhT(xW9jY7y$^k6j46xljKer#n&A?A9cs+aM zQiu}z8YaJgYL~(&!Fk+1Mq$!9q7i%+`0=B699cB)Zn%`Lj5v(gS^i=N*!GqR6fS+E zmivkz{<`6^1$6kKF2VerI>Gt;{pt~A9hJXdISh+n{QdG_c#PKH*?xZT{{GW$em#E< zNDa!A-|r`XBVuq?Ch*fFewxBh)54*+C3k>|9B_7q?mqr5DDHG*c^`Aw-N$<(SF&}< z&t%GWLDkQAPmH(3DOaiRkByY8vYYs-_+n5BQFD>gut-}pK%WD`M@>A{3bNr0p9_ki z*Fw?>g~cC7!D2vC=FrPy=!Wb`#_DG^AqIl8$PR~>RiYu^Sys_lgb?YgQON8SS+=A4 z>Ly-uKBnmYc~E@3ste}(G#D22Uks0vN}niV{9<-Puc_^(5B!)N_7F{{1J*3hLOX6> zF559R%6IST{NaoKsJ^-gs;-gicdspzg5o9E!Rw0g!LaysZJ9|Uu-5w+ovIsFXd+{j ziV-f+6mZ|17>p7uC8A9q(Twx=&Bmbk1hi*;Ff4vud*b^hXixswp$c8pVS>M`h;5_) zZ8?YHJbyr66^ue2+b+^p`P+7BP<#T~_Of7D7=N|62W|TpjBsarDfh-3f)UeWvG3a( z{4I7}P<#SfY;`a!eqC=&VctlesI_rt)Wf)rm{#VELviv}*ge7M<1y{7j!J*i?g@%d zK-2CDhQ+Vwj0f}umoOtH;bW%`lU{|7?%U~WaIy)X3r22_32Qow{Z07Cp!ftd;mKfF zjOd--Ta}TQQ?D4l|3~x6?jBZG48vDw7S70=#o{P>0Y0ZsU%HS3sOV>~kTa&#?BOckV0dkn zAJhN=ZI$E0VxUSIwY{%W?48MY4C`@0?BA^L*@uamC%DS*Bj;+(K`(KvYdqPPM2iimn9 zH|GGN#n(5^FNGZBOO)v1X7H{x=VQ^S+{2FAtAdD7kMVQhgW1`_9o7f4b9hbrL{J*b z@ksx5y8L4KuGJfp$AaP&(1{)nhQ)|6Ir|@kDn8)iJE%P)ESm zUCpI*C0~xu;f@p|3k-P+C>~#=V_mnfVDetksPbOX@bX^KIP+fJ<+*~#4U4l5(<&lz zaesHaS$J8k2uh7}$uuw-FD3_J&{&dnkV+kb@5$+m^4sTB--GalvA#Sk2E+CtB#^?f zr9ALU_pjzl(FmF^#l%31)Ho2wF5=mdzxK$*^W+o6>%5 z<#MGx!E~k4-fmi&EYqWa&Ki?h+W|+r$AZz64%50*6vD;bvz7Lq?v--82~v9IC~)){ zrTu=-o$&(W#jx-0EZA$!hp)`paHB02-ZHBd;!4XlrG3(Jr_x@rs$Xe;wCZk=;S!nQ zMunis=0k7+r1a*%z^Zb{vp0!7=fg)mHBj#;g#-4BMZ{%_jP(w)h)}~gOC|Qmg)bcQ zmGN47ccyaet3V^4eI~ytZ2DePXSbYt3!j75Iy{^@$NuHOtYV1#)Wz^sZAWM0c;# zDDANIUXhlqU!lOCS#OZrP0(EcmyL$x!6Xg8#j}Ng-_9uuPPs zj>T%r=1fNT@`g%<@E;pI@i`e*I=$@=odXJuZsQDb)XDOwixq;RP2P6@rX}LYW95;n z;lQRWDBK*cbZXe__1>LAJ7UXHakL9y#>PDO-kA)|o6=Cn1X#W)7M|KtpfEbKWun|} zg2JsWV&@5P)5G}M?A8Se@!MOydR@KkRt5g)HgEbcfKFu64DW9(g;P5sx4G0Jd?skO zRd9GF6l}}n&3L%+k)&vYC$aw7WfS`}ySIKu3gCZi$*^T>D(u)kLB!6LM=F3LJ7S@D z$4n8amWQLrHW4u!K6F)V+ffV)-OY+2T<#i0w-?-(DD9j(T9vlxj=3VA8d&sLI=p#D zvk08v)`pUNm~y8lr8mK?cNR~l>gm}Ej75dR87lFGKNYjv8hky7=Qp2~E1Z5@gH;Eq zG4SD?+0FE&g!OExTF+Lh^=zS9&(^8+tUOr923YSn7OK)07|y*d_4KU6+gfuYl!uFBbvJ;JLdO zi-2oj>%I(_x_fqlz(*ScUp|rrXRS4fE|Gr+oZfwf*t-iZ+@lcz5**xfr3mPTyC2Gi zF?(w>1^yPgW<~H9(f90|>YiCf(!@?Scz*9SBA^!<_FX0d`cdpd+E)vbRm78yE ze3mu-gmhu=Yuiu!=qW?ywAs955u4C(~12ag6a2PB?2CS z(g(^?gjslu%>rEUfRCR)30og%7W+L7?>*2c0{#Fw2j+=@XQAi7ToLd*Jab^02zUu% z9-J-$UWLUE`poSq=8G>sSSwP!0TBnsi-5P``GY0!)VhRB&!2TZG4L*mS_(6i=>~z(}!k@fX^Z6@MID26)ZmNGvqgL z$6=rJ@ht*s+-qO=jjq2#{ShAr{tnh286$H39*!Sr5&a<~7GjS!ijc5a*l@HehkaJW zhF=B2|JQ_RkEGZpkv=9C>hH~hu@9xVZ-0}diKuuFs!W6?#X|SaEVz7A3M|+XpD1!q zjfLG0`6R52SUC5PPma!paf9PTE9YU-lnh`T^vTJEaA45K&x*G_+$Nf$48C}z3Vzs{ z;kJBAVnqQfx!CtXsZSh_fo~taSfs0og@z;9pn0T0r!xy0q{lA>I2P*X^_36SxGs!XnOB2C(My@?e*&S?B(A^*^k^gZ&%Zy#OxL>2h~ zZhm4?N@zT48AcD`^bipbFFjG3u9iaZs!9^EK%UHO7Xe6~fK<1+*1Fp9^HY&F_MtVG zl!icjglQ-TT&Uv~Ga}VO`q4`^MSdL9q5sKBy#L?#WHo-y=jA6Q@*Ye)Zo#<` zd;nh_Urs&*^;2#5n8KY;O&XvI$y%*-NpVz%cs4#>Q9)#B@G6&H<#}+0^oqSyU4$(} zmrwxvUP~zlR8Ro>?nNaBjG+MbB=cAfsErRPmS5qneJg>NO?KKeWd;`>=`fjWYWmJzHKWcx4GQOgygCzX`70)tw4y=^XVhG40Nf} z7~Fw&R&Z=q0ts|_`q34i5jA!>V^@CcL^cJA=af_5CI>Rkw)HQJc?8b zTlS=IsLI__PSQ9EA1mz53B#>BcTxo@V&ykSG$10EUPsFv5kEePTGN610cWgPZVh$_ zg$s|}SV3NCai6r1``r($BC}ESbF0W$Jmp)-1a7uz>PyfvY4F;=(W09fE0cjLakHn$ zeaObFeZQ4V#BP7Fl1AQbgZeJ))`&DRpIz#M2q>gGMB$W=`z9NkpvP@wD!2AY^@nKf z8LP=OZt7`J1N7<&2};lPsi<~8c%2Kq!CZK4pNxHB>JXp1G*z~J0>Z!%Bo&c zhgRFyOUkpED<#p-^56pq-tS(WcArKpH~lwuQibI8eWaM1k;xj(ztHBaVA}5LBQYGw zG(++;eWad4O5820NeLVIg4JX?2i8#F823kZ5`jKz>L*9bs8&V0Nd;FrU0sJt@7qfX zP@(SKq>!RF?q*JPd^c%E=y&|8dJp%eMSDmoxA6_?EzD`R9wrGJiUu(Jbk~1 zj&UyIR5--u;#*=bF@Z_YX+RvAyb>5j*e}k#qSi z>W%J&Z;-L2ECFp+@4y*OXlb|MgGoC3V)}JHIS3QfJKVe9AeqrD0Pa-pbRU0%WOK*( zt@=LfmIr4x=f_Em(eKsI;4n4skm_;l`dRh!NRi&wt+g~-(op&=Ub$RdFhTfNGW&M-q%Sf_e1=e=f*Lae5nx! zp-$;O_ogStUwxBgA;-;clRP{fz!PV5!<(dtGh#*y#hjY(4#`KFG3b(Ul#7%_Yu3}p zwC|A6L~iCpbu#KyfSZX$7-E}0X3NCMk4X()ef2RZ;Y&-TIv=Sj=nh|@u(p(|E6~21 zKVu1P^;x!j96d`WVBb&9k})(&(>@`UcsUJE+*xL-=VG6yK4mF!>nCIkVvm1)4y0k+Tsf-;-aHyeZ6QQq-wv zh$Q?1E`A-^s_nLEI*dB}3!EV{)R~A(FxoUd_}TS#{5~=DbX>;IF#}CGM~dVmKBWI? mx8)p3=OU-$W@RQSvF{uyW%LgG#yEY#ls(gjb+5zGUi*Kf_+)ng diff --git a/docs/html/.doctrees/trak.doctree b/docs/html/.doctrees/trak.doctree index 316a95244a585d6368f81a47c8c1e7f538b99d1e..ef578a5c39d19fec5ebd608a490724420dc8eca4 100644 GIT binary patch delta 34959 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 A0RR91 delta 28627 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 diff --git a/docs/html/_modules/index.html b/docs/html/_modules/index.html index 1a62708..6acb32f 100644 --- a/docs/html/_modules/index.html +++ b/docs/html/_modules/index.html @@ -5,7 +5,7 @@ - Overview: module code - TRAK 0.1.0 documentation + Overview: module code - TRAK 0.1.1 documentation @@ -122,7 +122,7 @@
@@ -145,7 +145,7 @@ +
[docs]class TextClassificationModelOutput(AbstractModelOutput): + """ + Margin for text classification models. This assumes that the model takes in + input_ids, token_type_ids, and attention_mask. + .. math:: + \text{logit}[\text{correct}] - \log\left(\sum_{i \neq \text{correct}} + \exp(\text{logit}[i])\right) + Version of margin proposed in 'Understanding Influence Functions + and Datamodels via Harmonic Analysis' + """ + + def __init__(self, temperature=1.) -> None: + super().__init__() + self.softmax = ch.nn.Softmax(-1) + self.loss_temperature = temperature + +
[docs] @staticmethod + def get_output(func_model, + weights: Iterable[Tensor], + buffers: Iterable[Tensor], + input_id: Tensor, + token_type_id: Tensor, + attention_mask: Tensor, + label: Tensor, + ) -> Tensor: + logits = func_model(weights, buffers, input_id.unsqueeze(0), + token_type_id.unsqueeze(0), + attention_mask.unsqueeze(0)) + bindex = ch.arange(logits.shape[0]).to(logits.device, non_blocking=False) + logits_correct = logits[bindex, label.unsqueeze(0)] + + cloned_logits = logits.clone() + cloned_logits[bindex, label.unsqueeze(0)] = ch.tensor(-ch.inf).to(logits.device) + + margins = logits_correct - cloned_logits.logsumexp(dim=-1) + return margins.sum()
+ +
[docs] def forward(self, model: Module, batch: Iterable[Tensor]) -> Tensor: + input_ids, token_type_ids, attention_mask, _ = batch + return model(input_ids=input_ids, + token_type_ids=token_type_ids, + attention_mask=attention_mask)
+ +
[docs] def get_out_to_loss_grad(self, func_model, weights, buffers, batch: Iterable[Tensor]) -> Tensor: + input_ids, token_type_ids, attention_mask, labels = batch + logits = func_model(weights, buffers, input_ids, token_type_ids, attention_mask) + ps = self.softmax(logits / self.loss_temperature)[ch.arange(logits.size(0)), labels] + return (1 - ps).clone().detach().unsqueeze(-1)
+ + TASK_TO_MODELOUT = { ('image_classification', True): ImageClassificationModelOutput, ('image_classification', False): IterImageClassificationModelOutput, + ('text_classification', True): TextClassificationModelOutput, ('clip', True): CLIPModelOutput, }
diff --git a/docs/html/_modules/trak/savers.html b/docs/html/_modules/trak/savers.html index 6f0fb9c..f450540 100644 --- a/docs/html/_modules/trak/savers.html +++ b/docs/html/_modules/trak/savers.html @@ -220,7 +220,8 @@

Source code for trak.savers

     @abstractmethod
     def __init__(self,
                  save_dir: Union[Path, str],
-                 metadata: Iterable) -> None:
+                 metadata: Iterable,
+                 load_from_save_dir: bool) -> None:
         """ Creates the save directory if it doesn't already exist.
         If the save directory already exists, it validates that the current
         TRAKer class has the same hyperparameters (metadata) as the one
@@ -234,14 +235,19 @@ 

Source code for trak.savers

                 intermediate values, and metadata
             metadata (Iterable): a dictionary containing metadata related to the
                 TRAKer class
+            load_from_save_dir (bool): If True, the Saver instance will attempt
+                to load existing metadata from save_dir. May lead to I/O issues
+                if multiple Saver instances ran in parallel have this flag set
+                to True. See the SLURM tutorial for more details.
         """
         self.metadata = metadata
         self.save_dir = Path(save_dir).resolve()
+        self.load_from_save_dir = load_from_save_dir
         os.makedirs(self.save_dir, exist_ok=True)
 
         # init TRAKer metadata
         self.metadata_file = self.save_dir.joinpath('metadata.json')
-        if os.path.exists(self.metadata_file):
+        if os.path.exists(self.metadata_file) and self.load_from_save_dir:
             with open(self.metadata_file, 'r') as f:
                 existsing_metadata = json.load(f)
             existing_jl_dim = int(existsing_metadata['JL dimension'])
@@ -254,20 +260,22 @@ 

Source code for trak.savers

                    f"In {self.save_dir} there are models using a {existing_matrix_type} JL matrix\
                    , and this TRAKer instance uses a {self.metadata['JL matrix type']} JL matrix."
 
-        else:
+        elif self.load_from_save_dir:
             with open(self.metadata_file, 'w') as f:
                 json.dump(self.metadata, f)
 
         self.model_ids = {}
-        # check if there are existing model ids in the save_dir
-        self.model_ids_files = self.save_dir.rglob('id_*.json')
-
-        for existing_model_id_file in self.model_ids_files:
-            with open(existing_model_id_file, 'r') as f:
-                existing_id = json.load(f)
-                existing_id = {int(model_id): metadata
-                               for model_id, metadata in existing_id.items()}
-            self.model_ids.update(existing_id)
+        if self.load_from_save_dir:
+            # check if there are existing model ids in the save_dir
+            self.model_ids_files = self.save_dir.rglob('id_*.json')
+
+            for existing_model_id_file in self.model_ids_files:
+                with open(existing_model_id_file, 'r') as f:
+                    existing_id = json.load(f)
+                    existing_id = {int(model_id): metadata
+                                   for model_id, metadata in existing_id.items()}
+                self.model_ids.update(existing_id)
+
         # wlog set num_targets to those of a random model_id we could raise an
         # error here if different model_ids have different num_targets but this
         # could be a bit too stringent in some cases
@@ -357,8 +365,10 @@ 

Source code for trak.savers

     into memory.
 
     """
-    def __init__(self, save_dir, metadata, train_set_size, proj_dim) -> None:
-        super().__init__(save_dir=save_dir, metadata=metadata)
+    def __init__(self, save_dir, metadata, train_set_size, proj_dim, load_from_save_dir) -> None:
+        super().__init__(save_dir=save_dir,
+                         metadata=metadata,
+                         load_from_save_dir=load_from_save_dir)
         self.train_set_size = train_set_size
         self.proj_dim = proj_dim
 
diff --git a/docs/html/_modules/trak/traker.html b/docs/html/_modules/trak/traker.html
index 85ef668..d20e42c 100644
--- a/docs/html/_modules/trak/traker.html
+++ b/docs/html/_modules/trak/traker.html
@@ -218,6 +218,7 @@ 

Source code for trak.traker

                  task: Union[AbstractModelOutput, str],
                  train_set_size: int,
                  save_dir: str = './trak_results',
+                 load_from_save_dir: bool = True,
                  device: Union[str, torch.device] = 'cuda',
                  gradient_computer: AbstractGradientComputer = FunctionalGradientComputer,
                  projector: Optional[AbstractProjector] = None,
@@ -237,6 +238,10 @@ 

Source code for trak.traker

             train_set_size (int): Size of the train set that TRAK is featurizing
             save_dir (str, optional): Directory to save final TRAK scores,
                 intermediate results, and metadata. Defaults to './trak_results'.
+            load_from_save_dir (bool, optional): If True, the TRAKer instance
+                will attempt to load existing metadata from save_dir. May lead
+                to I/O issues if multiple TRAKer instances ran in parallel have
+                this flag set to True. See the SLURM tutorial for more details.
             device (Union[str, torch.device], optional): torch device on which
                 to do computations. Defaults to 'cuda'.
             gradient_computer (AbstractGradientComputer, optional):
@@ -261,6 +266,7 @@ 

Source code for trak.traker

         self.init_projector(projector, proj_dim)  # inits self.projector
 
         self.save_dir = Path(save_dir).resolve()
+        self.load_from_save_dir = load_from_save_dir
 
         if type(self.task) is str:
             self.modelout_fn = TASK_TO_MODELOUT[(self.task, gradient_computer.is_functional)]
@@ -278,7 +284,8 @@ 

Source code for trak.traker

         self.saver = MmapSaver(save_dir=self.save_dir,
                                metadata=metadata,
                                train_set_size=self.train_set_size,
-                               proj_dim=self.proj_dim)
+                               proj_dim=self.proj_dim,
+                               load_from_save_dir=self.load_from_save_dir)
 
 
[docs] def init_projector(self, projector, proj_dim) -> None: """ Initialize the projector for a traker class @@ -511,8 +518,7 @@

Source code for trak.traker

             model_ids = self.saver.model_ids
 
         _completed = [False] * len(model_ids)
-        _scores = ch.empty(len(model_ids),
-                           self.train_set_size,
+        _scores = ch.zeros(self.train_set_size,
                            self.saver.num_targets,
                            device=self.device)
         _avg_out_to_losses = ch.zeros(self.saver.train_set_size, 1, device=self.device)
@@ -530,7 +536,7 @@ 

Source code for trak.traker

             g = ch.as_tensor(self.saver.current_features, device=self.device)
             g_target = ch.as_tensor(self.saver.current_target_grads, device=self.device)
 
-            _scores[j] = self.score_computer.get_scores(g, g_target)
+            _scores += self.score_computer.get_scores(g, g_target)
             _avg_out_to_losses += ch.as_tensor(self.saver.current_out_to_loss, device=self.device)
             _completed[j] = True
 
@@ -539,10 +545,8 @@ 

Source code for trak.traker

             else:
                 self.saver.clear_target_grad_count(model_id)
 
-        _scores = _scores[_completed].mean(dim=0)
-
         _num_models_used = float(sum(_completed))
-        self.scores = _scores * (_avg_out_to_losses / _num_models_used)
+        self.scores = (_scores / _num_models_used) * (_avg_out_to_losses / _num_models_used)
         self.saver.save_scores(self.scores.cpu().numpy(), exp_name)
 
         return self.scores
diff --git a/docs/html/_static/documentation_options.js b/docs/html/_static/documentation_options.js index 87d8188..1f7b0d1 100644 --- a/docs/html/_static/documentation_options.js +++ b/docs/html/_static/documentation_options.js @@ -1,6 +1,6 @@ var DOCUMENTATION_OPTIONS = { URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), - VERSION: '0.1.0', + VERSION: '0.1.1', LANGUAGE: 'None', COLLAPSE_INDEX: false, BUILDER: 'html', diff --git a/docs/html/bert.html b/docs/html/bert.html index 913d52c..3d47df4 100644 --- a/docs/html/bert.html +++ b/docs/html/bert.html @@ -6,7 +6,7 @@ - Add a task to TRAKer (subclassing ModelOutput) — BERT-base - TRAK 0.1.0 documentation + Add a task to TRAKer (subclassing ModelOutput) — BERT-base - TRAK 0.1.1 documentation @@ -123,7 +123,7 @@
@@ -146,7 +146,7 @@
@@ -146,7 +146,7 @@
@@ -144,7 +144,7 @@