From 05bd8cc5f2489d443635ef87e627d1ef721c1afb Mon Sep 17 00:00:00 2001 From: rudy Date: Mon, 8 Jan 2024 15:51:26 +0100 Subject: [PATCH] feat(frontend-python): approximate mode for round_bit_pattern --- ...imate-off-by-one-error-approx-clipping.png | Bin 0 -> 45761 bytes ...mate-off-by-one-error-logical-clipping.png | Bin 0 -> 44312 bytes .../rounding/approximate-off-by-one-error.png | Bin 0 -> 48032 bytes ...approximate-off-centering-distribution.png | Bin 0 -> 30725 bytes docs/_static/rounding/approximate-speedup.png | Bin 0 -> 90698 bytes docs/howto/configure.md | 9 + docs/tutorial/rounding.md | 71 ++++- .../concrete-python/concrete/fhe/__init__.py | 2 + .../concrete/fhe/compilation/__init__.py | 2 + .../concrete/fhe/compilation/configuration.py | 61 +++- .../concrete/fhe/compilation/server.py | 6 +- .../fhe/extensions/round_bit_pattern.py | 20 +- .../concrete/fhe/mlir/context.py | 124 ++++++++- .../concrete/fhe/mlir/converter.py | 94 ++++++- .../fhe/mlir/processors/assign_bit_widths.py | 2 +- .../fhe/mlir/processors/process_rounding.py | 20 +- frontends/concrete-python/mypy.ini | 1 + frontends/concrete-python/requirements.txt | 1 + .../tests/execution/test_round_bit_pattern.py | 263 +++++++++++++++++- .../tests/mlir/test_converter.py | 10 +- 20 files changed, 649 insertions(+), 37 deletions(-) create mode 100644 docs/_static/rounding/approximate-off-by-one-error-approx-clipping.png create mode 100644 docs/_static/rounding/approximate-off-by-one-error-logical-clipping.png create mode 100644 docs/_static/rounding/approximate-off-by-one-error.png create mode 100644 docs/_static/rounding/approximate-off-centering-distribution.png create mode 100644 docs/_static/rounding/approximate-speedup.png diff --git a/docs/_static/rounding/approximate-off-by-one-error-approx-clipping.png b/docs/_static/rounding/approximate-off-by-one-error-approx-clipping.png new file mode 100644 index 0000000000000000000000000000000000000000..9364d8f4af9d909d74b03d864d1b0bcc3e26552a GIT binary patch literal 45761 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 a+tGH$=JdbTZ2C7@0{w{EFUg0Ee*HgYWZt^~ literal 0 HcmV?d00001 diff --git a/docs/_static/rounding/approximate-off-by-one-error-logical-clipping.png b/docs/_static/rounding/approximate-off-by-one-error-logical-clipping.png new file mode 100644 index 0000000000000000000000000000000000000000..ca70ea3aa0376f0d245460dce0281fcf4bfead42 GIT binary patch literal 44312 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 literal 0 HcmV?d00001 diff --git a/docs/_static/rounding/approximate-off-by-one-error.png b/docs/_static/rounding/approximate-off-by-one-error.png new file mode 100644 index 0000000000000000000000000000000000000000..3983d3409ce65eacdcd7989c6d8c85b5f344e237 GIT binary patch literal 48032 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 CD!$49 literal 0 HcmV?d00001 diff --git a/docs/_static/rounding/approximate-off-centering-distribution.png b/docs/_static/rounding/approximate-off-centering-distribution.png new file mode 100644 index 0000000000000000000000000000000000000000..447fba6f5cf7449fc88dcca70987455483254c4c GIT binary patch literal 30725 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 klgBcX+5ZNE{}Y6r`j z7pl16mne{5dSRxiYN2avbYDu>P!q*U(}?Ci{p0&u3sz<{_ZjFInC{cju`$rIG0;V( zD8VJ%M-kw8CS?<~JZkG8(mz(eu_ikC@fisbCR0F|XYI%X-c}~v)Hsizo0(nDUcayx z5)ybJ)a%yu)#REXrew*`utd@H1SY9RLel3enX{;*FNr)fxSfmJEJ-?_+^k=>tx}$| zTq$t2Ul|{qn=ZH8GtMqR?`9G?2Uq*^F+xJdPxkv8lvUB&FcSYfT$IQeet(TpCa&@4 zYpb}1KVL6D_y6-!1MWl@e*fSL8ZR=KKOb+fz0iMuT}|_U-r(0*{GTEEy(m!ri&f+$ zB`*H)^XJbQ!=|RD4CpW5-|Nj+SwfS+9m`il#fueTIc&9+8Tk&uwI zJCcdT1gYZSaoSm6mIuB)S}j|{kEvNLz9N1!axbg2ew@2uZL!?6-gT4nQp=BRH#HKIlV2BA9j&rcD;A3f zJ`|A%XVA=8@#8v7A?_;Ebai!Qb3QHi!lKeLMBaA0kt}wE#oePozke|`Ii~Bbak;AD z(O%WrO7#c)DJ#cSv^$SFvXsi0bUN-w?v_`2!@Cye{oI?ymo+pr8b(J)J9Tfr3k(bt z3?iSHXUd3RG0yt*=~HBcZ=!m=@8jXK)4i$!lZoe+%LA{TJ$vRJ`RM|Vhbg}!Us3Z+ zb7*j2AhCDd=bj!ZTU%RJw#4V5!NH{7bwp&zW$NNbCx=RZ!TUvy+&j~}3h$iW8PDHL zhrTkH$KTGe^`X3?qBlX{mVm5L!1vnP6tkHoO6Brm82IhoVdJH5?r4u4r&&(gc9zIm zqS<9VRCT7l``|HXymN4LoLODX5{+hCsC|FyaeYKmD!uymdDqJXA0s0p74miBM$4?{ z*!Y#VhE$?yblPJ$^*TShkBp2+#XZ01xIf`p;>&F|{f^CI{=T)f^})e`d~$(m*71l3 zIxZ0*Az^ruuA%)-udF7H2iNJoy8iISR6X+b(K4ez$=p{zFRw1LSO+43$KB7AjK6=t z?OPjj!{AE!`|rQc&)Cj)Jg{6Dl1>x~4S{PRu${&{*@`{OZ)~rtB!gZ&M?%~)x~4d`FQ^Pd8u+6Q|VL*-l=*&Sy546=GmbFl80h32CYZkV%)*1I1D0^ zu@0L8m1{c+LLrY{)p%T+SzJtG&}>SP%~oc!S`M>3YYL` z7QbF5?0I_;En{si_Ut&>7oSy)v%XhN$w{9fL#a$gB=T`^Sy@?mdHHsaq?qp7SjA&{ zS!XKelO0)JUf#y$W}!sEV2SZc$KddA+Zuf+|1NLUNuWDaE2Zi8XQe3=q>VYBIWCDz zJDnWrj+NWm9WEp@Tg;0aj+M(3I;^|yu8yX|dK`All2vh(9vd6OW7Z1_2n=L~Ep-k5 ziMaP2>fG<;ux0QVwLTCL5#7ebj9VElN;e!XEVbECb8Ry{+}7nh-Je<vBMnos^TQ2e5mtBy z>;q=arrU-i#jn_{mOqAuhDI>y64lV*!+7^(zGmU&W*%`?>&VAz2F$z zS=@@PHg-1i*$+-QCi;PgOU+=q2=DW$bf%;21@+MwMr~h;MuXAP zg7CmVbwff9n=cE?%LYk_iBM=FQd3it>eT3CZ6>cq78i{>4F_p-&%yc=7MO*9GYnz( zGLnX?IBd8VtUyIff`vDjD1@y)43$qrU=|udhT&X$EQ@|mihp|hTfM%Fa1p27Fgn$@ z6pb7(JTXV4;o0SzP1np*l*+7PjzpuL_^-|F$Vx~`!k;I{I_X6u=_1!6Dk`egpQY3a zr9)v#*?xsN&tjpguYDE9KZ(S=EsC`-Ojg;pu4U=S4*Fbb+Qm-L5WmRf%Nc*96e-q6z4_E@BwDOoJmNRR;qj1x8`)R)1O4bNI|jS z(Z37@5QZ(&5SvDkZmBn2`|#i(9Gg}-zp+RnQBX@uD~WkmYqM?5eEf^58%1Ljw{xY) zQJQqR!BBTsS4#k?Py`0|@t4*T;qLr{Oq6H{r)ED_BS-z+w=ILG)i3nJq(qRFJOiHWERhP_WibkZ(lO?+C3273N%8V^{ErqhsfX!e!^7$Jd#jtfyM;z9 za6JJATvg=`aLIP?wi%L60pXu#LLJX9cLzq_0huB_7- zK&m&Cp9-8#)?!zpH+1q9yLQ-m(t3Jn%1#HGk(L)?U@P>dysDWs z&eH8p>cb?SYm1hYkO(;3Tg!%qCpXMuFmRuimUby6@GgM7PM32RGKTMX^FqlGhgX3P zr*&&MS&Xoxv~(!g+9~9b{AZZmR4CDp`(bT*Y_6|=@ugA7)ADJHW>1DEW)xn3jahpw zDCl+b)-5b7ti-NFq1VGpJ*n|f3gw(HXIq{aYj!7z?99bFD_YnoRh1et9rYP*5=U&c)>&*>V44d{#4_-gMdaUgbP3ktHVq zO39=TP#qIt1HD$iL#;r9jg1{?dF?v>lTXs=GBbx9F#Oa4f+8XXtnE9_{47&?Mz%95 z@qE`Jt4fkYA}L8pd8Lg!De}=py;Abg5J`a(yig6Jr ztGChh5#~6OnB~ZDpis2QWM^e%6|>UT)@EB6+5d>#A>F8+b+Ioq9eU?L{b zPeZf`WsPf9g2%^Ssg|)xsGl6}K(GD?01iQs%&Ei_d}^YfW5 zUb>_(3>zjmBt*;n7-lXwAV6)eB#}ytMK(>UamZ=1_Wg55g(q}$;;_m5bt4|v1*tfn z6g;iBx3_;Ct5a2&saRrGGGv@wUHvo@@E5d*cFPww(9QdB>=mgAGUW64u3o*0_t+pT zfy$f1d3R8|k8Bcvi%pG_QKF3{F%XTuJ)2Awr-QoEvozm(?0VHM=lUoDch|>cD6X(-8XA-4wfnXijva@6XWp!G*4yJfe}$N+H?1^CbnznEzVh$w>9Tq`bS&dU4U zyAFVWOpb>Zk-IQIjxa*Ga*ypSwb(5)Myn)<1>N zD5dce*z(ZOusEI0FZv8Gc}o^i5)nOrU1-n=yD7sE7Z*2zUfly&j#Rn~wSF0(D1g_= zFvnDnAIm@;yT@*ozmN@^awuOnP$pYBdPxy@LaD=nS=`K6$}3{vD+^og-2G6>Ggii( z&nf`=>Tj`-DV59uQtpMen!)Q~x3ie4(HH<@7^SGBbe20{-V3|cu#y(qUC;JH_sr7L zQK;jH@YsRl>S(E@q?J{nnwr{X%Zi@EaG{|zV0y>(ua}#ensVQl?G}9-9aVxIeUM(1 z2_!95xxx-uVvL9=blNUxiEmEs!37$$$;fvC*Pz@OI|^%f%d|z)e@$-(i+Jk3#+oX z(D3y&0uDK3_~ZS!(pp-CVP{A{zv~I3S2q*kR>$#(VAfA6E-tR(u!bTJH8;JZLww0$ zTQ+%Vu*$g#KxKH<^3%vFZcz;y`g47s?O=<&I+40%R` z9U%M(S|2i2Koo?b`*#4?VFIZCQzhBn?g4JoldZzdx&On>ZZ=$ddSxXOkPdJYJ)mNJ zTaOg-U%v1_?*x)Sj)8$uU_8#%eoQ7D_6ZQTySw`WK%@R&h&z~4S`hFZO~(#^>ZcR` z^ihm(X8jOK>9hnujd};0Gn;#R{eU|Go{&ctV=LP{^TZ(R8$Ua>2HYr!a4i^;WhVvY z0Jxj@o1}vC$bJC0yuDt7vE)hU)Ud;}m$|;a-T^ynXE8lnuPKNE+P*l@&K+RCX+ohi zR@tvj*bRU@MzR>U^%C5=6_2zAm=$EpsHv;(0LyCz&K?&RcL=Z0lcy~fsSd@RRLM52 z?0(iA+^n&I5TunN_Xp)l*0oQ49?*}nybAN|h*z+A08Gm^-wD8sK^3vY8vn&8t{Af}CpPJTm zpco|ug#Zk_uju6>d05ewo6`cY^_n|V;SW(V8sQ(8vSwIPhJ|^#xk!f%C6I3qHp+dz1APLB_KMOO;LfiJ~NBCm}i z@KbL#3Dxb-iUxX}2yX&_^)+lE2?GOzn60g!lC{^JpNQq>U!atIdHC~5Re zCgK6j<7A_rkWxN30lmh=g6*Hbf&0f4?(TsFFIDMa%gTy%TI^>3xnUhNL-PCgt2=dn z|C$N^Ak{&7&&1F{rJ#KgodYyW=R>gWkTfv8umd>P}XHGtomSiCI| z6BF~Vc3v#{iki9lTl?>q{qJ@4kz0Rmt@`9X+&b_EGYh<8x7$z~0Fqs2=l&zr7uSR* zr8=J-jSC71nOjg6UjXdeI6hw0aL2k5^N)yc;#sEfW_@cb5EQW&Mh~aj)FYA@7#V{j zA}9qYWwS;M+g<+{0V7{?^YSt;UIHDCKiQ4_Lwb5T2?aB=G+?MA$3>DmPQP3N7xsZ( zW*iW!@T0D-O37B;^_9#1N4iDsaO7eb(bWUfY3qNV`p=nhsloAxgHktL#?8tq@1aUg zPrvb4%l+-=KRyNd%~;3XaM-WJFwP)vQ9gPk488V5WC!!cjZZ;Ax848#`(?o77^PB5B7u${>oig=YTWb!wf^k1{q0o%Z97kBgQdqD8AKS{6=7O>K(Xu1R#5>k1@tQ& zxfxLGL;`xsZOuU`c-hW%lmW^{JU}j;=>~u3Dj_f)N3r@raSvX2=q&YR9>UI@nVwDn zt(gLld_Yi4Ocqpyg@GJ(g%YzwxX10HsuK}bR@TL_iZYMu_tK!{P{Bn}P*A`#N0~}* zE~`2K-~ag-N#x+z9LL6dfM~*_yIX+_j9b2jeZpSeM{8E%AGc#Y4-Kcy+fO~LR!34{ zC^R)S8*6G_G>6j4LgzD318FY}^iP2Rz-swgt#~5QY|^n#hp8e_fJuN3p2Y4=kpVRp z=z_9pd9bMojYS^nazH{yM~8zsqN6SLXJku6H^YPRlz+x#hi2~a#t%~g~p~dcGKTrzPZ<(JoczpTtg@d1AI@xHn z6v5TcU%coo(3eF>8)!vsEL_k7UK$Li5p_V}Ev zgR4PiIdYHs$o7E&fsp@~NH_y8sNA&q=1W^1eoWF2^*?d+wm{vs@ z)(Yy?tDOM&Nd;gFyYHT^YJB)@mb#P$mD!(W-z0^-adNVLJc;@OG$ zPqqUQJUzDoM4>B~nIH=|IUtsd`FWj{ft(lcEG(AxJU{P<+Wz{4LX}emsOtshbE4M>xfDT%Ssctu78yZsBP^_y@hVUde7b;)Fq!uAOH{u448)k5&)*J6LMwL*78Jy4JbP?WAyA#nGz=fk+c^ok94-O66`;T z=g;2)AIk()XrLC*7{b>q7kfIfRUG1gjLj=snui{& zLZC6?fFYRFYOjbyJ$W@TF=4y=3OYY>MWFKO4Hss@`ez0O6{)g~jRHWGdi{y{GbGu9 zsbobNwOTr0il8KtkdcuA!1VE$f@bwk76AU(5Lr^l?5ckIE7Dx<(VY{3!XRKv^6>nP zyspv66V@|rf^?v(^H9=c!7G@C4Got)wm4&TrG{xm9^<&pY| zBR`|cF8_>FlLrsJ{)6d|ADfJqq$tXV_{)rx#@b6EJ z5TYJD;)(C`k?;+lnzt~C{2y9>^#lX0=3?qV^7hf-c!5p3nxN)i$BW$XL_OU>(Q(^wx`q8S)GU{8eK8+!c(%%i{B^#ZaLkfjBxT4#elv1UXP^Fwm-m-O`Xi=dSQ#p$hb zb{0T3rc{}gAr`H&BACs{w%!Tb8?zS!@uDAS3K+8>yZ3zNMVpx(k(YcwdN+~q*TS++ zbZ5t2tk_u-2;g$wH0QjtALhnb${v;!6uuBCJ z9;5LX2j|)G)=;jdccIZ}+UdzrI?#WFpJmV!I&S-qIqoR|Rflc$j0zjw*pymXEq(!m-#RxR3TrfB@K!X$j zA62K46_FRf1@Bt{YshdYUjSBgAq4}JtJWCK*G5K0ppg`g*{^X{fS=^`{(a8aGRBoF z9iTn{k_2p>70qs~*OegfnAZb3i{5-kT;B?U5aF)zSj`ehQlZ=oEWI2ckJK$Z( z4OmkFAd1v^ zWuIa1KgHK5ecOAX)a2l;!-xZkz_li36B9mbLY5*bVpM#~)kxJGImDb0kbt%n{PE)_ zz|A@U@Z3WXDGQ9w`2Bqwq+dj^S*DHI&fP;mJfs6kCe=X)`F__}2h?U%G&D)rIY@tj zAD48Pm4+O(qMsCh2mfehc{yWxT0^PQ;lNk%IO5;Sio|E+uc%y2^wj3eP!T3rpEmGKz{(Fh6NwVPOtO<_YZC%fH&*kC>fZ zKjS6Bqtm#_wmQqhW1r-_ucO8Qe}Fv6f)Ik}Hq>%oo&x+qc_Ug3Ge8I^*RWDv;XN_=)H>M=1gZDqgBMJ1s!wm5iqpHktz%H1b|BdXs7c1pY}mb-RTmdMV1t7sQ0ri;qkC&B> zAVyWnn;$QEUi{@BWJE5Joo%N?#weDiTH+DWZyFPYZX|Sm54G<%p%71)gsYxpi4SspJpcYm$MTtZRgCg+KFyqB zA7fm5ie+M-ujtjMn18gEPvTKr&I&8oh5ZW|-FC&_Y7Xr^s~{!DpM3Gtl~=#-!=#x; zQ$?bmRH@*s{RDL#y~B%uO6ptU-|^k&#cTiEKrv~O?qb23O1Gbu zOuut#Z2|0C+zK+tu*i5H?FHvoo{RVJqpz<%1^X?6%dr$-gn4&88#{aR__zuU4Gr%{ zTqCUC0^4n`SB;H!N9(EuM+e%PTH5Sv_eL&xiV{j3)>$lB1$Rl~hh1BhT3A>>*cWKK z6voDD9O@Dh61NEmXaKk&aTgG~3s%dlN)w<&7wB|84*>O^x`ysH78a=hg8zUXK$eUW z&`5#Nr~=qi2eV*`(YSkhHiPz{*&Nb~q=Ev;!~{zj6uvNOw(7P5mq+P?Gam>({EzvH&dw(1KDlJ)|?pS+uo52PCp$*h(037~~U~W9rSxtH+OSbEKM5I zNN_ybr2wS{@l?S3M+yuil8|T`g3%y!pc$bRGbbb@ggBc>t3lK|$XIlN&fW`YCIJbc zun1w}JX+2}B1cF>2?3PQQ6VX}9IPMY|KG?+UBQ!rztUNV8wDeQ7|cna6oU((^uqJH zH1JylYJ$)R&x~d*E$Muq{iiFrjOL0+ws|}dNSmBZI>F#1!AN2%nNw=1Olk9GTk2SN zkv6R)P^aX@&X#x-Qh%A?VAVSXFV2~3OKhodoZqRbJZR5CtMz;&1r23e={+XWmry)r zy%_mt9J{%=b8>QqDjmyi-n?mq(+^tA&QiZvz-=%`KpN74m3jzG+Hev|t8}S_u0TL+ zY%I(L>?>{}-Ta!g-uvQCB zCRotm{DKr&)&p*#<^1~iLN!d-|0Fk^`R;D4uYUxS;`n53mA4D`cR4CMHl27&FjOcq zesYjp;B&sFqMb>kVt>VZ$i%{p!`pr_vcXvDd*+Au?r-iZbOoPh~O5^sJ#e|>A`n0Qc_*8Hj(^DC9LHK0(}&IkM4NSw#R0} zE}?)@4{_bxg(+Y=ULQUH;tHN#SV;Z!>ApZ0UKrJ}Sc(g#f%0Gp- zP}99NI=8IBZYaNaH}&8<8*ZU`CM(QRN*D!+=Hi@flM{TFlA!795a@vkHNMag0wE*2b?&WOodd?eM|U6LDl1j znFNJQs&Z}WaLGej7Hn^mp`xYDOqUgNI)ZE5 zwMMGYKpx5df*65-Oh};uxMudjp@04dWCnpC3t<2$7=fWeL&W(b@>FnN)HYfy(5^VqbLHzuUx_ic_Ct)j_n)wlj%d9;8%X1#I(!*$iId~y$=%(m#8U>w#B&!Cj7GC=<9z#;K%<08 zEQ#X#{kI_@m#A3$sowcio?Ba^p?gsN?8?zl)DtsRSwD%(%*Jo z4f`3TR*jY=u8w9OXRE%f@lcX?j+4uIE{Nmu;x{aHAz63|_51W^{gx_}qt8r}ej))|H4g{>imT;nDS$E52VAibP7o z96L*u`le>7&a<+1)xMW_^C{o)$a(lKb3jxv+SQS~{jGn@pJFjbv*oZf!?BE$@bJFJ zWHlyl_)Pv5sWO!Cwx#abZ7yW9o`_O%Oh^(G_sm}8SEUFCR-(~O3Cl#9zNW>Yb(cL zl;(F4ErDJgmOMmd1Ydrtb}0vkC0)Bc2GVRv5F_0B01)$)jZHBqm>`&tQY)4Al&%de z1b~Ip3u3B303=b-Ys96bf=G1Xcme9QYr$Z=J2*J>lv?U*YG_Q`RsxbhL`q1!hQN;y zF%D#;fm$A3UL@586*nY1I~#OdB-Xq*S$CGD(uKIJP=4X;6bJ-~Qc1$NKKQH>NxBN^ z5HCScCE)Sq?rupyfuSUbr3bu21`Y^d-M*awVu*sD?OMei5|22sZ53P;% zx5X)cBpuE73LWmgP8GsVwcjIpd6Pv0(g?Jgr=g#}{-5|>X2aBe0 z8O^3&BC7_dLML*t3j(7$KoHX8^O8i66$Cm@5;!Y5plUz~4}$SQ))e?x2up&rPZv<0 ze2B$IMxOLHH8yra{Pz>7P)Gxq>EIS3hcFPC1Z+_GDW~HN{$TP~&p}c`l3VbKGeD_w z)aw=0k@FuAK~_exY>;z91apYjyrL~%f6F`z;kK@_waRqJ1`7m0UrK^k(}hF=qWd86 zBhXHo;q5?uu$zmv&e!XuM6f-Wh5d+F2?8J~DQV-v_16N?fA-m@FxC0bx=p{zz)SDh(?uNV?dXNyYvxLgAbHKW6!2 zZ-;D8EL>EsA_lh%j#|h*fBx;-)c<5;|2I1FneaJmJiLgt15i(r!17$O0$~MFwZKdr zzKsiDT&q2X8dTQaETz}5c4Ck~dtGg25~Ma_sN zW|uRJU%V)Yb8SN4#?Nw zfHOkC3Zf21#aZ$3>RIKGtaxI#oua7%Y{)!w`O5X{v!M2CXluXT1^0cX)JRbg|G|R? zCA$!knP$rdK=y%_bfIiRI#LpsM-H&24R3pi?-&DKQ8_UySdxku_t$^MRviA&?);f$RiGjx8N=F95Wn zjg5`5)Y8g*aRJIi4+8gFH#Z82ge#yFtHbiJCXKB!H!H0OCUh=>J^X=>7~sE#rlzWX zKagL9lf1J*5LJT6*C?zte#|PnX=nzKnE3D_7ygYTd8I}q@DXH6Fk;lUsuD>o_ z+JwC0O+rHF7m5Z3k3wlx+JZy#@)$LnPnqkd*WBO3CW0z&B>!|{Ym1nYa?v9Sjwn#i z!P(P~5N5rJiz^@@aTA>UrY*a^ptB|dz|cP*o3W3$EWKz?x||$m(8%+?^frvfBWh-JBWsfNvCmTB+;{N=E19kmzdz) zgy_cx2HpaJh-DcLxzK~}2U*itD4DsC4FFrNIa0a5xf#vvYc*_pow0J(>({S?5bFsA ztQ%5E&~uPUL?R=3;uBL-HBqeQaus&WFslx5_{U(laK%F!BRo7Ds-YVk_wWx3YXB>K z9*R-cL^Cu-5Sm@UMaqTPKC&qOzIw~(U=SVu$wy$E^bkP>HDj>cmJtcsXkMy=Qfvd& z0GCk<9WFo{#2&~b1pqgE1qYB`D<3&^3tsxQuKh1J^i0)X9W4tL4t&2`=e-qQ#Z7bY zrNU!``+^L{8_Q!od^FbFgsA}MM|3E+sZrZm}y%i5>0+!WGv693&#A{AwW@fCB^%Idua+0)c}W;#VzL-Jt%^s8kAr5CxtV z2DIoo$Yqqww7-T^CBS29;mT5EGV$R26%ABc0&ot(gdf65Nf6KuKe2?*9LntLoVvDIr%? zje|{LY1fIkqSbXa<<|#zDDkoQj?L$5zWa!$-c%f~tQ5V6g~Kx)o7!;y_g+9rnOkfc zK*ic`srSU3X&&EwBV$Wf7wer|GkIMjGI!x-hx^x^%i~Nm?05Nm-g;b{n16-CcnQ^M z{1#?OY|lqAm`&u7;3C-AG$|;0J;rL5;K(?HN_*x5NfkMGwRgCvUlxC?{vg9>q+r2j zdj8wD`wU&>qXkqBhZHGXq-v1mT6X^M{&iE**NwtLCw1Gh7N~ZqPXFjsr~L#?>n>SU-;mCQTIee zC)!*~t)>1oKoTy?PG`}Qve^=yV==wG>5`pazYgiX4>n{ibnin`FsD4ZP2;X) zlig`=`&}jz)$!1!^NM=?^NDYJ^sg{&f28~wZHcGH4yPQ3R%^3rR*#vZqUEt}Jbkaf zg)==-z+^`G%Gv;8xk)$0X9H-9ZR3Y1gp z-AC=mr|j5ydAjqnd>TG@lyoC#4{s@!YOFjmg617YJ`D2Umrwc@h z)btAr>s>-O@KBXXpB9z`2Egr__3Qj;1TW8t_jY3LJ$Fx;oBYP&(A3t2I|q@)(DjS+ z@T@-kw^LG}G_gOqp_KO!EnNl{sq#Pp+W8Bub?&|C4<7do;f{8F&AS|q#fWy{(sypo z7>d?pIaKtAw}c}v73fEzp(hG{J>0p0d9KiIT5j_J)Kg? zLjNuw2l8Q!&ugw19IR(QXsWQ<+kZINUpPFUX`#D?>fwc@+Wint>A{-@#Cj5L4YzBX zde)(5u-vFA828R++FEp%RdN4-uG80|NUPh^&~&x=g+62~anL;!vjOdncQQlNQpn7V z0Z`Y4`wR>>;d(%#T;*-rYlVPFs(*WxzLBS1=&vbOtP*=3` zGcP?3`rn?O7uEsMOs=i@xw&0{?#KbTpoHY)x$yqg(K6k>3|z=!2a&&e3+E$T8T)1Y z;B>W`wst)nMxx#TMpoC|9SEk)`7Z$VA@u1N8F?381nE`#`}>M(rf@PGvKhi~8p_1X zjEJ249S|@&i0;9Szw_}a$XE}9d{)(=L#BudU$CTfh zSGLsEw{DpqQ{?#V?8dS`d>Hnta5&giJ9Brtj3EKm0;N>SQ#m;tXwEFP=!9HRaIWmu z-Md2Y6tF2G8k$v)Vn_<*YBb(Nfdgq`u!`W*5w1dP&SG^W9P)Vn#l=s+(18s9y(EsL zXq93USD-lo5JV|79&ZE8@x*qM1Y!k$eS&6LetNi6zWxm@AtB)lg#PGdMw; z<;b&upaaNL<-r+u$p72GF|fvx-ROXj5I(m{*Pb{XKY3P)8XRy~Wj6&U(D&>}+Un_bpL~#m}&#y8PQ5~cG=K>n z7&y2n4*1xE<*|xLqJGDE%lQu1P-VNTEY}9&A2FOEL=HQ{0Z|W#B`^Xv2EXBLQPJMD4LHmP!hshM zxe=2LkaR+vjfe8Dx9$2VKE4k~X@a1@>Cd@And zQ5r~Rov-PLyMd=iL&vdm+h82NebL@XvDQCcC1!+mw0C#Xw(f)>p05ns;L|4cr^x3$1Oyf5aInb%(V`M% z=Q}q+GqIiWVSz(}mmuRC2hq%sUQ__hnqb19-+lZ6%IwtKTs_!_<`w);pQ1p-CW_sf zrag9Qjr+y31ft)p@EukLr?oE|yVZ?KV?tKzfhk3!8td_J`>Q7l6?;Fr#f-}rBK+{5 z*jFQ+1jeo;mGBvT?BIUkeb>DDe-pOI#2^e zf!0AVUi0cD zK3W43b|_DwQ<+*@Yr|jTvst_Ye)Rs_g-g?Re!xa0q1}O@A_QC%tRO9LwcxBBt_uK; zz>goF3Jaq{#CQT=z}e1JAu1N`Z^XHpmzXTpZPrf%8o0^sBBUqn8Dv)9QptXDcGelb z!)D1~d_gf%^P>v&P~JP2_VfF1rY?s#I=875pFW%GS7xOB4#3)=_lgp#3$(ya@S~9` z2kswSCm9^HdhYcNQF`vK)19k!~ z(j_?S>YJTS3#>{VT%HoG=Ze{|wn6yxkB$}r%XfWmZw^ii*0;7^yLV5&Jl zx)dk7AV+V!k`q2B2_3SZK&;$gt)2Dz4O5~&l>AB?oSc+2xwr@i|4|_{(kIIQyJ(2z z1qLqUICHZ;y^MiTxv^EVx>nIKGtO$!Fe0Q=e|>AW+Lg|ZNl`yDfG}M6;deeC&Go~t zfRTDU661t&=);`JW?NkSxZbKbos*T-*P`qT`opRQ=B9d|sBsn@-YeI z5H%g3FIAzU+a{L}IFL?DsWvHkB=?3u^o#oC+fdSYCl`{B=zqmuJE z@t*JT)iI}I(=Zkc0^8bB+Y`4Qs#FWb5&zzebow`MCK+!n$R-n_I3J(8 z$5x$P6`{`m!KG-tP%W2;sOZz5-Pz!HLn`5l`?X6Rwzl-!Lmd(&Xdn3Ay{B(i#9`}k z;OC0PplWDpoNUaFnJ$_hH+eMOaJ;*vtCY(8CZ?#Pl9PnY%^S^O>sr2^=FH!`JVp4%8Ju^ zoN+`EvYkB@U$~D_c}5Upe?3dtol^SEAjA4jff-!#*;A3TKYPTLij}pz+?m^SVIjm3 z7|TU$TKJ?75Dfs0ipM>@jgzIJlyiKP7(ttp-OeTCdhU~v68WodiaPInWn7=}pkDfq z{g%7EY@o0*REOQzm_JhB-4cbbpS=C%-Fw%10=E)#)sZJp%xVGR7q%BV^6lvMvPL@% z<+k^Z1*2h~dTneoVPoH+eoMrg@iF0DLzPLpH&jLgCP~Dd7&cO$SF0 zSn*$*n}@jrlh$D_hjidU#D;Z6GMZD>9Q> zKV5b%Rjn=~TIQ?O#CeN(6vxBrV5*MXL|fh$Cx?A)%Y;gmcHteyFL0}DIZ)#9d?qtL z7SV+RzHPl1BO2?W+x^sAi6`Mx>6}|^B(pvr1b#L-xS*dxJ!u1LnfeHV$Tr#CzxilM zy03=Dx`n}`%d{##2 z<&ly=ND_?9ElJ9*~_9WjNzf8LuBi{W=6pKfvdgo@!{2 zK(|Kg$6&@x&(ZUr09=-kn79G<`eqAb`xhvfF^;?Pa8|7zx?;eb?b)95nI||eGtz)p zj=~Clmk^(%gTtGP6JN7kT{+UqzMqYSGtOGQbY2|lEf0v3peT_wx>r5(EHFbVcD{5{RZ3 z;7kZYR;5yJBA-E*6$ZK*(%X4>{sMadnq&u@&r;+CVe4*Jk+BM34{uQSz>?91q%??v zLc);T#%0#K4bfUSpy>|w+C>+zzu-KSG%7X?@>Ase^-L5T^zeg2C+2VpskssWcn3tO zn;mzKzoqedKzLVOUtb80keIFPfmRLTVfz;R^#^Znp{&r~lYNrExGYa;INHQ-x4%)< z+~%=2?g@I^zA3rHUv1HORx(Ac8Vnn!9(&;%!|2VGUUigeu`7-5Z#mcb;9speKCjs{ za)!^FfgE0d5*7icxo+IKW7Tb61!tdmhNCk5`SZYayP+K?#f(bDf-mEZ4A4*o(S;7g?M)-(? z1CR*j2Xcsk7OO#$?gKt+0Hi?}f!bgP$UEek!}zW5v7rCkS?VU9fuA9>3HkhtKRpUH*e) zET720#u1Wzom3)GqI)@1^u?Ql@gouMBfTWAO0O!{3Uieh9&G%Uhr!vyDvM?BnF{rd z^!O-E;q9qjt6o9kc8i;za0^(Sad+Pe#7pZPp=!r!c=qB!^yjVdkdTtGSO37{va3|c_75^gIr?VvfI71FtEm8OfD|I z0zd-+>?trYy#Q;sR~dSHpNeh)a-fi-|GcC`5G3_RaC0F7ueV^Lt1AROWG*bo0NjM8 zm0ch`2-al8oRK%M2m5<7p-_jOe0uT<7U@rL$ZY{(s*$q=Q3O2TTxxd$=m8jDBUsT0 zD3b-?HHHa5+Qmf(evx(c{GcOE(v;=5Bdx ze{b`#n`a4pl`=a7*)!$*Anz=(-?HMZ?elqZvF3x9zlJC+_KNm1_sS0oJj%+H?S8&@ z?Uz)%uy>#?qTxCTsAiSEruroz;W1?s*o@dtiO-%*fv4c&>Y5MfAdqRICrl2e*5yj@ z9q8vIcW;uw{wW7E*w5YFOn~$GOuxUJPjU}|!hv!{@2fGw_SXTU(X94}g2q{SHA>huJ|G^*K^PjydGo;29~ERhnj*y8ipCWRRTOb zJwWE8(2uVcytIqMg-j6tAPRzml4I9V`CSjKCcuF32nnxpah>ylG23NVc}4 zF({Q>m)=~xe*Il!q+@hpxyai7eSi3msNvludCuxR2KZ;XN)Egt|NPDBP{+Q#)fmQz zs8svPX29~K<=5<|BZ40vZZ`#SIotqKrbs;U>v5x#dZ%?0y{WfCxs0i@gZ6FL!&~ZK zUp~$5;Lfcf1~ffYa-j1moo+}7iVS#!lKNE3w(!2XKR9cfR)zck%jXDgY4ld{C z7s@gT{gGB`&mI9{_a3@aSn#&sLIz#ua{zq-z9^d}=hS|vpl}Y&=mBB_VU3Z{RcwA3 z+}_-**X7F7Z^B1UfdIq;PM`;NUU(JGfCB_tje4NR;G!xP`GH7{;WZ|P&F~u%84uda zI52fit*$1ra`5togJy&aOlW}eQgQ2_fxV=Y-$NMCA6Uyh5H17a@w(a8aM%dz*(IXE z4yFjmGK5XuH8HsXl?(;J55*lRLQX4`5aYsP@a=Uf1Oar!@dtzUQ-HNos0k%}wjCKEY4wcu2`}M*N_qa_r;zqg5P(+ndTQ8baiD=^AgWN-qkW ziod3}PO9QEz&ZMoQPCm=esTjeoC>}i0OxMQMZXFO`PR_DsGyxU6fK(->p|72l#|O(BQvnL4d5&A< zSi{1@9yG_?z&A}<7+2>KUU_?yKnuypunWeoWdZKF5@^!>{Q5FaWl__ z`wUJT0pZ=?dgqC{W_pT`m{M*=H&-c&=R1q7zq`sBKfF$wDK8a%y{CxzXm3U*pM@*1 zr9tLDZZF4vZRx4{%E(;@GnTG?c34hk2zpxw!T=!myAqcWR|vZwwbSxo5=UpIvcv{&#F>8ND;;E zE2{o2xCKiWf+9{SNvWt@ySG}_|HFPUE^z9gvW8Trd3kOa8aIzD^=B>3K3grq4@saI zs-nik>_GlnZm9E}oHHD&Jn>7u;Prm2-YH#EcB)rDbWO`e5UPw>GBm z`^uEPlav`gC$KxzancF9NgZOn%2>ND1rq?k*dQQO|M}bO;iV+(fbPQI%IfG6r3{#- z%`=~H#XRJ)rrSGgIQWI~bl*`G%=Di6-v8j)GeZPw!td1l$lC#Lp}st4`No=Rf^jmx zv!{AKrauWT_1I(5^Z7k0?|=6SqD35{m}yCJobgaPYv!g%-K=l zg+4r>jjv&w4f@AWnoNw3#EyN1S=wHIUSaXaeUA&ruMEAzgC3bWoS1)CT46u@_Qn_0 z`6VnPQ0C;n2P_(a=1k|(($pZgxLAqVW#BV+uC{8?+1K~%Nm4)F*y5YToSuJ~j2B0D zr(|wSD9Y`1Sq18yLEBUx^TGg;+cq$o1%+P{v(TSf*ZueIsM%~@%0DS?Lx zXBQVyQ8L}4X#+9gUNax7LO@coz7AN=eRL7m*L zIaY@4pVuq?`Kj^AXQ4dIv^tpybKhF(QkADaX#iIAn1=M+m^3J{b+UF>}ZU#GR zNb*Pmjp8`ZH`pHFMLvuO8-0bT^(+R2Q{cKn8wLjc?%()6+_JLUH*FB4J=qSX)jL~h zZ|R=a6lbgG&B~l5hGpMzXkpnI{uU(daU+Rt^~-pKI9Qe}#d`AVVh^pvW621_C~scm z(DeEARBusn=qnMO_vpxQkf=}yy@VVj<=8koH^XiRA})Y-y`%?ab@8e%RTFo}TXn;d8%^iWJ&C+}%Ik(!QyonsXmINew3!Iuj=^OP#@0c*Hp?6GZa%NUn(a0@CwCd-S z0(=fQx-sw-2&mu&nt*l$0VzX$Ia<_^z5$_AXYuf+0J?BR zIYAI0#IFa!FaqYnG#Ikro@3@g03Ho3Z7hT&Uh{$(L`X;|4<-f#U@+fcBYy-MS6fHN z43L{aGy~(HyC(3HAkR^Je+Lh?2s8)As{9!^@ppi@hrfIGqE5F~my648wngN`V+-pq zd^h{t*no?xQ1RNy{CYQXu1!rO@o06=cB^q_P}{dXdTKFKZ;)f5uN4iO!JAW*G!e%% zFWTBA;WVu{gsv}FD!hL-P0*J+`2iw1DlFvCf?icL)u$)!pwI<-Jr-Ce;2!Y6-J_mH z4?G|&8wTnGXxb031B0Ay=fmJA%%})p^B9GNV?i_qE$v-k5lnkhFltUuM9|F(D2G}L zQ#^hxJ%tFO`(X@she~Z3L5d2}!Yu%E-p0ntf+Lqo!b=pSkJq6oLWB2Uz=cpEDQKw? z_Il|+z#M^{_l~sm%*>1wP=sYJKN%2UAm=k5cnt>L>U|V71Yx#A`d=Wl2O!mam>_f> z^7#M?f&2p_XvUpq7;Dz?9sc8CE1x|x-Wq;Iy6rxD{xuGkpM{0V+M3mB(Pqtfm0sti zEyk0XZ?Pp?`=dcy(cQe;nW+y?EpHBguy~EbSoK2t+U!!r>*aaS-l0n0-56>$s zOhXe)rSNuu4T;bP*ao;e9*|cc3dd9kYW`?wz(PRC>;viy=vKqty#vaZojv<11axh7 zm`~OF0nxSrh=VHrc^K^KJ3HS1?f~IPl3-@shhY{Z-2}jPLBLNiI*{J(4FDB9gZ#h> zg}}mvMwbAXp=Y4xL^r-bodb7?0osHY*T(z%$$aY+CN*yVCwC%A2v$=o8m@{@=G44= zh0#}5Tzo(-YcfXYJcstnETvRCLvv$$4Jcp)yKGmH5s%{UTT*WIQOY$vMJHxACnoCE zBDNkFh|S%eskAjnYL25|{dS6p$%agN{8+QCwanB4OGSkN3yU2I`;4&tuO%Ye59VK9 zS;4so#4t6!rW3owRU$M}+3?``)a{JFJ&&kDmv+_tLg;yrO~DtrFPVC;zEWvzD0j>= zBp{?U8{gUSPxdOXk~_WJ9MRC`%WAszgT}YcC%%gMhx)^`o~QC7111O`YfqOYW{}fV zx~0015W)#NOA};{QVCd40#};>I&Z;72yp*7 zWDv>?u^rSQu9~~fptg3!I`dR3muzL1pWkeQ(CAS6`wPh9l0CwHV+iwOb7i38~f-$#s&3Ws7(=k)ENX zt9u!e%m}G?UIID+Qh4Vd3{s%NRx7o+0!0c?$kA<27%0$?44BcbK`nv+HJGaOnCW0r z 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 z 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 b@3J_3H0xux%6=D2ZdXhF)bYHd=dS%H{)FkT literal 0 HcmV?d00001 diff --git a/docs/howto/configure.md b/docs/howto/configure.md index 9d2fc7489..616ef274b 100644 --- a/docs/howto/configure.md +++ b/docs/howto/configure.md @@ -118,3 +118,12 @@ Additional kwargs to `compile` functions take higher precedence. So if you set t * Chunk size of the ReLU extension when [fhe.bits](../tutorial/bit_extraction.md) implementation is used. * **if_then_else_chunk_size**: int = 3 * Chunk size to use when converting `fhe.if_then_else` extension. +* **rounding_exactness** : Exactness = `fhe.Exactness.EXACT` + * Set default exactness mode for the rounding operation: + * `EXACT`: threshold for rounding up or down is exactly centered between upper and lower value, + * `APPROXIMATE`: faster but threshold for rounding up or down is approximately centered with pseudo-random shift. + * Precise and more complete behavior is described in [fhe.rounding_bit_pattern](../tutorial/rounding.md). +* **approximate_rounding_config** : ApproximateRoundingConfig = `fhe.ApproximateRoundingConfig()`: + * Provide more fine control on [approximate rounding](../tutorial/rounding.md#approximate-rounding-features): + * to enable exact cliping, + * or/and approximate clipping which make overflow protection faster. diff --git a/docs/tutorial/rounding.md b/docs/tutorial/rounding.md index 74967852b..948b9b666 100644 --- a/docs/tutorial/rounding.md +++ b/docs/tutorial/rounding.md @@ -97,7 +97,7 @@ prints: and displays: -![](../\_static/rounding/identity.png) +![](../_static/rounding/identity.png) {% hint style="info" %} If the rounded number is one of the last `2**(lsbs_to_remove - 1)` numbers in the input range `[0, 2**original_bit_width)`, an overflow **will** happen. @@ -194,7 +194,7 @@ The reason why the speed-up is not increasing with `lsbs_to_remove` is because t and displays: -![](../\_static/rounding/lsbs_to_remove.png) +![](../_static/rounding/lsbs_to_remove.png) {% hint style="info" %} Feel free to disable overflow protection and see what happens. @@ -289,8 +289,73 @@ target_msbs=1 => 2.34x speedup and displays: -![](../\_static/rounding/msbs_to_keep.png) +![](../_static/rounding/msbs_to_keep.png) {% hint style="warning" %} `AutoRounder`s should be defined outside the function that is being compiled. They are used to store the result of the adjustment process, so they shouldn't be created each time the function is called. Furthermore, each `AutoRounder` should be used with exactly one `round_bit_pattern` call. {% endhint %} + + +## Exactness + +One use of rounding is doing faster computation by ignoring the lower significant bits. +For this usage, you can even get faster results if you accept the rounding it-self to be slighlty inexact. +The speedup is usually around 2x-3x but can be higher for big precision reduction. +This also enable higher precisions values that are not possible otherwise. + +| ![approximate-speedup.png](../_static/rounding/approximate-speedup.png) | +|:--:| +| *Using the default configuration in approximate mode. For 3, 4, 5 and 6 reduced precision bits and accumulator precision up to 32bits | + + + +You can turn on this mode either globally on the configuration: +```python +configuration = fhe.Configuration( + ... + rounding_exactness=fhe.Exactness.APPROXIMATE +) +``` +or on/off locally: +```python +v = fhe.round_bit_pattern(v, lsbs_to_remove=2, exactness=fhe.Exactness.APPROXIMATE) +v = fhe.round_bit_pattern(v, lsbs_to_remove=2, exactness=fhe.Exactness.EXACT) +``` + +In approximate mode the rounding threshold up or down is not perfectly centered: +The off-centering is: +* is bounded, i.e. at worst an off-by-one on the reduced precision value compared to the exact result, +* is pseudo-random, i.e. it will be different on each call, +* almost symetrically distributed, +* depends on cryptographic properties like the encryption mask, the encryption noise and the crypto-parameters. + +| ![approximate-off-by-one-error.png](../_static/rounding/approximate-off-by-one-error.png) | +|:--:| +| *In blue the exact value, the red dots are approximate values due to off-centered transition in approximate mode.* | + +| ![approximate-off-centering-distribution.png](../_static/rounding/approximate-off-centering-distribution.png) | +|:--:| +| *Histogram of transitions off-centering delta. Each count correspond to a specific random mask and a specific encryption noise.* | + +## Approximate rounding features + +With approximate rounding, you can enable an approximate clipping to get further improve performance in the case of overflow handling. Approximate clipping enable to discard the extra bit of overflow protection bit in the successor TLU. For consistency a logical clipping is available when this optimization is not suitable. + +### Logical clipping + +When fast approximate clipping is not suitable (i.e. slower), it's better to apply logical clipping for consistency and better resilience to code change. +It has no extra cost since it's fuzed with the successor TLU. + +| ![logical-clipping.png](../_static/rounding/approximate-off-by-one-error-logical-clipping.png) | +|:--:| +| *Only the last step is clipped.* | + + +### Approximate clipping + +This set the first precision where approximate clipping is enabled, starting from this precision, an extra small precision TLU is introduced to safely remove the extra precision bit used to contain overflow. This way the successor TLU is faster. +E.g. for a rounding to 7bits, that finishes to a TLU of 8bits due to overflow, forcing to use a TLU of 7bits is 3x faster. + +| ![approximate-clipping.png](../_static/rounding/approximate-off-by-one-error-approx-clipping.png) | +|:--:| +| *The last steps are decreased.* | diff --git a/frontends/concrete-python/concrete/fhe/__init__.py b/frontends/concrete-python/concrete/fhe/__init__.py index db965cbd3..0e8386ca9 100644 --- a/frontends/concrete-python/concrete/fhe/__init__.py +++ b/frontends/concrete-python/concrete/fhe/__init__.py @@ -9,6 +9,7 @@ from concrete.compiler import EvaluationKeys, Parameter, PublicArguments, Public from .compilation import ( DEFAULT_GLOBAL_P_ERROR, DEFAULT_P_ERROR, + ApproximateRoundingConfig, BitwiseStrategy, Circuit, Client, @@ -18,6 +19,7 @@ from .compilation import ( Configuration, DebugArtifacts, EncryptionStatus, + Exactness, Keys, MinMaxStrategy, MultiParameterStrategy, diff --git a/frontends/concrete-python/concrete/fhe/compilation/__init__.py b/frontends/concrete-python/concrete/fhe/compilation/__init__.py index 2043e751e..5f134c2a9 100644 --- a/frontends/concrete-python/concrete/fhe/compilation/__init__.py +++ b/frontends/concrete-python/concrete/fhe/compilation/__init__.py @@ -9,9 +9,11 @@ from .compiler import Compiler, EncryptionStatus from .configuration import ( DEFAULT_GLOBAL_P_ERROR, DEFAULT_P_ERROR, + ApproximateRoundingConfig, BitwiseStrategy, ComparisonStrategy, Configuration, + Exactness, MinMaxStrategy, MultiParameterStrategy, MultivariateStrategy, diff --git a/frontends/concrete-python/concrete/fhe/compilation/configuration.py b/frontends/concrete-python/concrete/fhe/compilation/configuration.py index 016adb487..f01b34bc4 100644 --- a/frontends/concrete-python/concrete/fhe/compilation/configuration.py +++ b/frontends/concrete-python/concrete/fhe/compilation/configuration.py @@ -3,7 +3,8 @@ Declaration of `Configuration` class. """ import platform -from enum import Enum +from dataclasses import dataclass +from enum import Enum, IntEnum from pathlib import Path from typing import List, Optional, Tuple, Union, get_type_hints @@ -73,6 +74,54 @@ class MultiParameterStrategy(str, Enum): raise ValueError(message) +class Exactness(IntEnum): + """ + Exactness, to specify for specific operator the implementation preference (default and local). + """ + + EXACT = 0 + APPROXIMATE = 1 + + +@dataclass +class ApproximateRoundingConfig: + """ + Controls the behavior of approximate rounding. + + In the following `k` is the ideal rounding output precision. + Often the precision used after rounding is `k`+1 to avoid overflow. + `logical_clipping`, `approximate_clipping_start_precision` can be used to stay at precision `k`, + either logically or physically at the successor TLU. + See examples in https://github.com/zama-ai/concrete/blob/main/docs/tutorial/rounding.md. + """ + + logical_clipping: bool = True + """ + Enable logical clipping to simulate a precision `k` in the successor TLU of precision `k`+1. + """ + + approximate_clipping_start_precision: int = 5 + """Actively avoid the overflow using a `k`-1 precision TLU. + This is similar to logical clipping but less accurate and faster. + Effect on: + * accuracy: the upper values of the rounding range are sligtly decreased, + * cost: adds an extra `k`-1 bits TLU to guarantee that the precision after rounding is `k`. + This is usually a win when `k` >= 5 . + This is enabled by default for `k` >= 5. + Due to the extra inaccuracy and cost, it is possible to disable it completely using False.""" + + reduce_precision_after_approximate_clipping: bool = True + """Enable the reduction to `k` bits in the TLU. + Can be disabled for debugging/testing purposes. + When disabled along with logical_clipping, the result of approximate clipping is accessible. + """ + + symetrize_deltas: bool = True + """Enable asymetry of correction of deltas w.r.t. the exact rounding computation. + Can be disabled for debugging/testing purposes. + """ + + class ComparisonStrategy(str, Enum): """ ComparisonStrategy, to specify implementation preference for comparisons. @@ -933,6 +982,8 @@ class Configuration: relu_on_bits_chunk_size: int if_then_else_chunk_size: int additional_processors: List[GraphProcessor] + rounding_exactness: Exactness + approximate_rounding_config: ApproximateRoundingConfig def __init__( self, @@ -990,6 +1041,8 @@ class Configuration: relu_on_bits_chunk_size: int = 3, if_then_else_chunk_size: int = 3, additional_processors: Optional[List[GraphProcessor]] = None, + rounding_exactness: Exactness = Exactness.EXACT, + approximate_rounding_config: Optional[ApproximateRoundingConfig] = None, ): self.verbose = verbose self.compiler_debug_mode = compiler_debug_mode @@ -1073,6 +1126,10 @@ class Configuration: self.relu_on_bits_chunk_size = relu_on_bits_chunk_size self.if_then_else_chunk_size = if_then_else_chunk_size self.additional_processors = [] if additional_processors is None else additional_processors + self.rounding_exactness = rounding_exactness + self.approximate_rounding_config = ( + approximate_rounding_config or ApproximateRoundingConfig() + ) self._validate() @@ -1134,6 +1191,8 @@ class Configuration: relu_on_bits_chunk_size: Union[Keep, int] = KEEP, if_then_else_chunk_size: Union[Keep, int] = KEEP, additional_processors: Union[Keep, Optional[List[GraphProcessor]]] = KEEP, + rounding_exactness: Union[Keep, Exactness] = KEEP, + approximate_rounding_config: Union[Keep, Optional[ApproximateRoundingConfig]] = KEEP, ) -> "Configuration": """ Get a new configuration from another one specified changes. diff --git a/frontends/concrete-python/concrete/fhe/compilation/server.py b/frontends/concrete-python/concrete/fhe/compilation/server.py index f6da3b1e7..8ec8ea007 100644 --- a/frontends/concrete-python/concrete/fhe/compilation/server.py +++ b/frontends/concrete-python/concrete/fhe/compilation/server.py @@ -4,7 +4,6 @@ Declaration of `Server` class. # pylint: disable=import-error,no-member,no-name-in-module -import json import shutil import tempfile from pathlib import Path @@ -12,6 +11,7 @@ from typing import Dict, List, Optional, Tuple, Union # mypy: disable-error-code=attr-defined import concrete.compiler +import jsonpickle from concrete.compiler import ( CompilationContext, CompilationOptions, @@ -253,7 +253,7 @@ class Server: f.write("1" if self.is_simulated else "0") with open(Path(tmp) / "configuration.json", "w", encoding="utf-8") as f: - f.write(json.dumps(self._configuration.__dict__)) + f.write(jsonpickle.dumps(self._configuration.__dict__)) shutil.make_archive(path, "zip", tmp) @@ -300,7 +300,7 @@ class Server: mlir = f.read() with open(output_dir_path / "configuration.json", "r", encoding="utf-8") as f: - configuration = Configuration().fork(**json.load(f)) + configuration = Configuration().fork(**jsonpickle.loads(f.read())) return Server.create(mlir, configuration, is_simulated) diff --git a/frontends/concrete-python/concrete/fhe/extensions/round_bit_pattern.py b/frontends/concrete-python/concrete/fhe/extensions/round_bit_pattern.py index 48a3d9be2..c67380831 100644 --- a/frontends/concrete-python/concrete/fhe/extensions/round_bit_pattern.py +++ b/frontends/concrete-python/concrete/fhe/extensions/round_bit_pattern.py @@ -4,10 +4,11 @@ Declaration of `round_bit_pattern` function, to provide an interface for rounded import threading from copy import deepcopy -from typing import Any, Callable, Dict, Iterable, List, Tuple, Union +from typing import Any, Callable, Dict, Iterable, List, Optional, Tuple, Union import numpy as np +from ..compilation.configuration import Exactness from ..dtypes import Integer from ..mlir.utils import MAXIMUM_TLU_BIT_WIDTH from ..representation import Node @@ -158,6 +159,7 @@ def round_bit_pattern( x: Union[int, np.integer, List, np.ndarray, Tracer], lsbs_to_remove: Union[int, AutoRounder], overflow_protection: bool = True, + exactness: Optional[Exactness] = None, ) -> Union[int, np.integer, List, np.ndarray, Tracer]: """ Round the bit pattern of an integer. @@ -212,6 +214,11 @@ def round_bit_pattern( overflow_protection (bool, default = True) whether to adjust bit widths and lsbs to remove to avoid overflows + exactness (Optional[Exactness], default = None) + select the exactness of the operation, None means use the global exactness. + The global exactnessdefault is EXACT. + It can be changed on the Configuration object. + Returns: Union[int, np.integer, np.ndarray, Tracer]: Tracer that respresents the operation during tracing @@ -240,6 +247,8 @@ def round_bit_pattern( def evaluator( x: Union[int, np.integer, np.ndarray], lsbs_to_remove: int, + overflow_protection: bool, # pylint: disable=unused-argument + exactness: Optional[Exactness], # pylint: disable=unused-argument ) -> Union[int, np.integer, np.ndarray]: if lsbs_to_remove == 0: return x @@ -255,8 +264,11 @@ def round_bit_pattern( [deepcopy(x.output)], deepcopy(x.output), evaluator, - kwargs={"lsbs_to_remove": lsbs_to_remove}, - attributes={"overflow_protection": overflow_protection}, + kwargs={ + "lsbs_to_remove": lsbs_to_remove, + "overflow_protection": overflow_protection, + "exactness": exactness, + }, ) return Tracer(computation, [x]) @@ -276,6 +288,6 @@ def round_bit_pattern( message = f"Expected input to be an int or a numpy array but it's {type(x).__name__}" raise TypeError(message) - return evaluator(x, lsbs_to_remove) + return evaluator(x, lsbs_to_remove, overflow_protection, exactness) # pylint: enable=protected-access,too-many-branches diff --git a/frontends/concrete-python/concrete/fhe/mlir/context.py b/frontends/concrete-python/concrete/fhe/mlir/context.py index 2fcb4cae3..eaf242058 100644 --- a/frontends/concrete-python/concrete/fhe/mlir/context.py +++ b/frontends/concrete-python/concrete/fhe/mlir/context.py @@ -28,6 +28,7 @@ from ..compilation.configuration import ( BitwiseStrategy, ComparisonStrategy, Configuration, + Exactness, MinMaxStrategy, ) from ..dtypes import Integer @@ -3143,6 +3144,8 @@ class Context: resulting_type: ConversionType, x: Conversion, lsbs_to_remove: int, + exactness: Exactness, + overflow_detected: bool, ) -> Conversion: if x.is_clear: highlights = { @@ -3153,19 +3156,121 @@ class Context: assert x.bit_width > lsbs_to_remove + if exactness is None: + exactness = self.configuration.rounding_exactness + + intermediate_bit_width = x.bit_width - lsbs_to_remove intermediate_type = self.typeof( ValueDescription( - dtype=Integer(is_signed=x.is_signed, bit_width=(x.bit_width - lsbs_to_remove)), + dtype=Integer(is_signed=x.is_signed, bit_width=intermediate_bit_width), shape=x.shape, is_encrypted=x.is_encrypted, ) ) + if exactness is Exactness.APPROXIMATE: + approx_conf = self.configuration.approximate_rounding_config + # 1. Unskew TLU's futur error distribution on approximated value + # this balances agains all leading zeros in the noise (ignoring symetric noise) + unskewed = x + if approx_conf.symetrize_deltas: + highest_supported_precision = 62 + delta_precision = highest_supported_precision - x.type.bit_width + full_precision = x.type.bit_width + delta_precision + half_in_extra_precision = ( + 1 << (delta_precision - 1) + ) - 1 # slightly smaller then half + half_in_extra_precision = self.constant( + self.i(full_precision + 1), half_in_extra_precision + ) + x_high_precision = self.reinterpret(x, bit_width=full_precision) + unskewed = self.add( + x_high_precision.type, x_high_precision, half_in_extra_precision + ) - rounded = self.operation( - fhe.RoundEintOp if x.is_scalar else fhelinalg.RoundOp, - intermediate_type, - x.result, - ) + # 2. Cancel overflow to have a TLU at exactly target_precision + # starting from 5 bits, the extra overflow bit in the TLU is too costly + # a smaller precision TLU can detect approximately the overflow to cancel it + # this is only possible because of the extra-bit from overflow protection + target_precision = x.bit_width - lsbs_to_remove - overflow_detected + if ( + overflow_detected + and target_precision >= approx_conf.approximate_clipping_start_precision + and approx_conf.approximate_clipping_start_precision is not False + ): + unskew_pre_overflow = self.reinterpret(unskewed, bit_width=x.type.bit_width) + overflow_precision = max(2, target_precision - 1) + # The last half-cell values in overflow_precision will naturally overflow. + # But there can also be an off by minus 1 to the previous cell in the worst case + # and an overflow in the successor TLU. + # We sliglty decrease the value of the rounding output on theses cells. + # `realign_cell_by` defines where the decrease starts to apply. + step_high = 1 << (x.type.bit_width - intermediate_bit_width) + step_wide = step_high + full_decrease_by = step_high + realign_cell_by = step_wide // 2 + realign_cell_by = self.constant(self.i(x.type.bit_width + 1), realign_cell_by) + overflow_candidate = self.sub( + unskew_pre_overflow.type, unskew_pre_overflow, realign_cell_by + ) + overflow_candidate = self.reinterpret( + overflow_candidate, bit_width=overflow_precision + ) + half_tlu_size = 2 ** (overflow_precision - 1) + if x.is_signed: + negative_size = half_tlu_size + positive_size = negative_size + used_positive_size = half_tlu_size // 2 + # this is oriented for precision higher than 3 + # it will work with smaller precision but with more invasive effects + prevent_overflow_positive = ( + # pre-overflow + [0] * used_positive_size + # overflow part + + [3 * full_decrease_by // 4, full_decrease_by] + # unused + + [0] * (positive_size - used_positive_size - 2) + )[:half_tlu_size] + prevent_overflow = prevent_overflow_positive + [0] * negative_size + else: + prevent_overflow = ( + # pre-overflow + [0] * half_tlu_size + # overflow part + + [3 * full_decrease_by // 4, full_decrease_by] + # unused + + [0] * (half_tlu_size - 2) + )[: 2 * half_tlu_size] + signed_type = self.to_signed(x).type + overflow_cancel = self.reinterpret( + self.tlu( + signed_type, + overflow_candidate, + table=prevent_overflow, + ), + bit_width=x.type.bit_width, + signed=x.is_signed, + ) + unskewed = self.sub(unskew_pre_overflow.type, unskew_pre_overflow, overflow_cancel) + if approx_conf.reduce_precision_after_approximate_clipping: + # a minimum bitwith 3 is required to multiply by 2 in signed case + if unskewed.bit_width < 3: + # pragma: no-cover + self.reinterpret(unskewed, bit_width=3) + unskewed = self.mul( + unskewed.type, unskewed, self.constant(self.i(unskewed.bit_width + 1), 2) + ) + rounded = self.reinterpret(unskewed, bit_width=intermediate_type.bit_width - 1) + # The TLU after may be adjusted to the right precision (see `Converter.tlu`) + else: + rounded = self.reinterpret(unskewed, bit_width=intermediate_type.bit_width) + else: + rounded = self.reinterpret(unskewed, bit_width=intermediate_type.bit_width) + else: + rounded = self.operation( + fhe.RoundEintOp if x.is_scalar else fhelinalg.RoundOp, + intermediate_type, + x.result, + ) return self.to_signedness(rounded, of=resulting_type) @@ -3593,13 +3698,16 @@ class Context: return x - def reinterpret(self, x: Conversion, *, bit_width: int) -> Conversion: + def reinterpret( + self, x: Conversion, *, bit_width: int, signed: Optional[bool] = None + ) -> Conversion: assert x.is_encrypted if x.bit_width == bit_width: return x - resulting_element_type = (self.eint if x.is_unsigned else self.esint)(bit_width) + result_signed = x.is_unsigned if signed is None else signed + resulting_element_type = (self.eint if result_signed else self.esint)(bit_width) resulting_type = self.tensor(resulting_element_type, shape=x.shape) operation = ( diff --git a/frontends/concrete-python/concrete/fhe/mlir/converter.py b/frontends/concrete-python/concrete/fhe/mlir/converter.py index 3792c9402..8271cb742 100644 --- a/frontends/concrete-python/concrete/fhe/mlir/converter.py +++ b/frontends/concrete-python/concrete/fhe/mlir/converter.py @@ -4,6 +4,7 @@ Declaration of `Converter` class. # pylint: disable=import-error,no-name-in-module +import math import sys from typing import Dict, List, Tuple, Union @@ -17,8 +18,7 @@ from mlir.ir import InsertionPoint as MlirInsertionPoint from mlir.ir import Location as MlirLocation from mlir.ir import Module as MlirModule -from concrete.fhe.compilation.configuration import Configuration - +from ..compilation.configuration import Configuration, Exactness from ..representation import Graph, Node, Operation from .context import Context from .conversion import Conversion @@ -195,7 +195,9 @@ class Converter: multivariate_strategy_preference=configuration.multivariate_strategy_preference, min_max_strategy_preference=configuration.min_max_strategy_preference, ), - ProcessRounding(), + ProcessRounding( + rounding_exactness=configuration.rounding_exactness, + ), ] + configuration.additional_processors for processor in pipeline: @@ -485,9 +487,9 @@ class Converter: assert len(preds) == 1 pred = preds[0] + overflow_detected = node.properties["overflow_detected"] if pred.is_encrypted and pred.bit_width != pred.original_bit_width: overflow_protection = node.properties["overflow_protection"] - overflow_detected = node.properties["overflow_detected"] shifter = 2 ** (pred.bit_width - pred.original_bit_width) if overflow_protection and overflow_detected: @@ -500,6 +502,8 @@ class Converter: ctx.typeof(node), pred, node.properties["final_lsbs_to_remove"], + node.properties["exactness"], + overflow_detected, ) def subtract(self, ctx: Context, node: Node, preds: List[Conversion]) -> Conversion: @@ -531,6 +535,61 @@ class Converter: # otherwise, a simple reshape would work as we already have the correct shape return ctx.reshape(preds[0], shape=node.output.shape) + @classmethod + def tlu_adjust(cls, table, variable_input, target_bit_width, clipping, reduce_precision): + target_bit_width = min( + variable_input.bit_width, target_bit_width + ) # inconsistency due to more precise bound vs precision + table_bit_width = math.log2(len(table)) + assert table_bit_width.is_integer() + table_bit_width = int(table_bit_width) + table_has_right_size = variable_input.bit_width == table_bit_width + if table_has_right_size and not clipping: + return table + half_rounded_bit_width = target_bit_width - 1 + if variable_input.is_signed: + # upper = positive part, lower = negative part + upper_clipping_index = 2**half_rounded_bit_width - 1 + lower_clipping_index = 2**table_bit_width - 2**half_rounded_bit_width + positive_clipped_card = 2 ** (table_bit_width - 1) - upper_clipping_index - 1 + negative_clipped_card = 2 ** (table_bit_width - 1) - 2**half_rounded_bit_width + else: + upper_clipping_index = 2**target_bit_width - 1 + lower_clipping_index = 0 + positive_clipped_card = 2**table_bit_width - upper_clipping_index - 1 + lower_clipping = table[lower_clipping_index] + upper_clipping = table[upper_clipping_index] + if table_has_right_size: + # value clipping + assert clipping + if variable_input.is_signed: + table = ( + list(table[: upper_clipping_index + 1]) + + [upper_clipping] * positive_clipped_card + + [lower_clipping] * negative_clipped_card + + list(table[lower_clipping_index:]) + ) + else: + table = ( + list(table[lower_clipping_index : upper_clipping_index + 1]) + + [upper_clipping] * positive_clipped_card + ) + assert len(table) == 2**table_bit_width, ( + len(table), + 2**table_bit_width, + table, + upper_clipping, + lower_clipping, + ) + return np.array(table, dtype=np.uint64) # negative value are in unsigned representation + + # adjust tlu size + assert reduce_precision + if variable_input.is_signed: + return np.concatenate((table[: upper_clipping_index + 1], table[lower_clipping_index:])) + + return table[lower_clipping_index : upper_clipping_index + 1] + def tlu(self, ctx: Context, node: Node, preds: List[Conversion]) -> Conversion: assert node.converted_to_table_lookup @@ -654,6 +713,33 @@ class Converter: variable_input = ctx.mul(variable_input.type, variable_input, shifter) variable_input = ctx.reinterpret(variable_input, bit_width=truncated_bit_width) + elif variable_input.origin.properties.get("name") == "round_bit_pattern": + exactness = ( + variable_input.origin.properties["exactness"] + or ctx.configuration.rounding_exactness + ) + if exactness == Exactness.APPROXIMATE: + # we clip values to enforce input precision exactly as queried + original_bit_width = variable_input.origin.properties["original_bit_width"] + lsbs_to_remove = variable_input.origin.properties["kwargs"]["lsbs_to_remove"] + overflow = variable_input.origin.properties["overflow_detected"] + rounded_bit_width = original_bit_width - lsbs_to_remove - overflow + approx_config = ctx.configuration.approximate_rounding_config + clipping = approx_config.logical_clipping + reduce_precision = approx_config.reduce_precision_after_approximate_clipping + if len(tables) == 1: + lut_values = self.tlu_adjust( + lut_values, variable_input, rounded_bit_width, clipping, reduce_precision + ) + else: + for sub_i, sub_lut_values in enumerate(lut_values): + lut_values[sub_i] = self.tlu_adjust( + sub_lut_values, + variable_input, + rounded_bit_width, + clipping, + reduce_precision, + ) if len(tables) == 1: return ctx.tlu(ctx.typeof(node), on=variable_input, table=lut_values.tolist()) diff --git a/frontends/concrete-python/concrete/fhe/mlir/processors/assign_bit_widths.py b/frontends/concrete-python/concrete/fhe/mlir/processors/assign_bit_widths.py index 8871a0ae8..6466f0ac5 100644 --- a/frontends/concrete-python/concrete/fhe/mlir/processors/assign_bit_widths.py +++ b/frontends/concrete-python/concrete/fhe/mlir/processors/assign_bit_widths.py @@ -230,7 +230,7 @@ class AdditionalConstraints: return any(pred.output.is_clear for pred in preds) def has_overflow_protection(self, node: Node, preds: List[Node]) -> bool: - return node.properties["attributes"]["overflow_protection"] is True + return node.properties["kwargs"]["overflow_protection"] is True # =========== # Constraints diff --git a/frontends/concrete-python/concrete/fhe/mlir/processors/process_rounding.py b/frontends/concrete-python/concrete/fhe/mlir/processors/process_rounding.py index b60216a32..01abaaa8f 100644 --- a/frontends/concrete-python/concrete/fhe/mlir/processors/process_rounding.py +++ b/frontends/concrete-python/concrete/fhe/mlir/processors/process_rounding.py @@ -8,6 +8,7 @@ from typing import Optional import numpy as np +from ...compilation.configuration import Exactness from ...dtypes import Integer from ...extensions.table import LookupTable from ...representation import Graph, GraphProcessor, Node @@ -18,6 +19,14 @@ class ProcessRounding(GraphProcessor): ProcessRounding graph processor, to analyze rounding and support regular operations on it. """ + rounding_exactness: Exactness + + def __init__( + self, + rounding_exactness: Exactness, + ): + self.rounding_exactness = rounding_exactness + def apply(self, graph: Graph): rounding_nodes = graph.query_nodes(operation_filter="round_bit_pattern") for node in rounding_nodes: @@ -26,8 +35,13 @@ class ProcessRounding(GraphProcessor): original_lsbs_to_remove = node.properties["kwargs"]["lsbs_to_remove"] final_lsbs_to_remove = node.properties["final_lsbs_to_remove"] + exactness = node.properties["exactness"] + if exactness is None: + exactness = self.rounding_exactness + if original_lsbs_to_remove != 0 and final_lsbs_to_remove == 0: - self.replace_with_tlu(graph, node) + if exactness != Exactness.APPROXIMATE: + self.replace_with_tlu(graph, node) continue self.process_successors(graph, node) @@ -43,12 +57,14 @@ class ProcessRounding(GraphProcessor): pred = preds[0] assert isinstance(pred.output.dtype, Integer) - overflow_protection = node.properties["attributes"]["overflow_protection"] + exactness = node.properties["kwargs"]["exactness"] + overflow_protection = node.properties["kwargs"]["overflow_protection"] overflow_detected = ( overflow_protection and pred.properties["original_bit_width"] != node.properties["original_bit_width"] ) + node.properties["exactness"] = exactness node.properties["overflow_protection"] = overflow_protection node.properties["overflow_detected"] = overflow_detected diff --git a/frontends/concrete-python/mypy.ini b/frontends/concrete-python/mypy.ini index 35159d2f1..62bf5c450 100644 --- a/frontends/concrete-python/mypy.ini +++ b/frontends/concrete-python/mypy.ini @@ -1,3 +1,4 @@ [mypy] plugins = numpy.typing.mypy_plugin disable_error_code = annotation-unchecked +allow_redefinition = True diff --git a/frontends/concrete-python/requirements.txt b/frontends/concrete-python/requirements.txt index 364f7d192..1d612353f 100644 --- a/frontends/concrete-python/requirements.txt +++ b/frontends/concrete-python/requirements.txt @@ -1,4 +1,5 @@ importlib-resources>=6.1 +jsonpickle>=3.0.3 networkx>=2.6 numpy>=1.23 scipy>=1.10 diff --git a/frontends/concrete-python/tests/execution/test_round_bit_pattern.py b/frontends/concrete-python/tests/execution/test_round_bit_pattern.py index 964472aa0..ef070514c 100644 --- a/frontends/concrete-python/tests/execution/test_round_bit_pattern.py +++ b/frontends/concrete-python/tests/execution/test_round_bit_pattern.py @@ -6,6 +6,7 @@ import numpy as np import pytest from concrete import fhe +from concrete.fhe.compilation.configuration import Exactness from concrete.fhe.representation.utils import format_constant @@ -432,14 +433,14 @@ def test_auto_rounding(helpers): helpers.check_str( f""" -%0 = x # EncryptedScalar -%1 = round_bit_pattern(%0, lsbs_to_remove=3) # EncryptedScalar -%2 = tlu(%1, table={table3_formatted_string}) # EncryptedScalar -%3 = round_bit_pattern(%2, lsbs_to_remove=2) # EncryptedScalar -%4 = tlu(%3, table={table4_formatted_string}) # EncryptedScalar +%0 = x # EncryptedScalar +%1 = round_bit_pattern(%0, lsbs_to_remove=3, overflow_protection=True, exactness=None) # EncryptedScalar +%2 = tlu(%1, table={table3_formatted_string}) # EncryptedScalar +%3 = round_bit_pattern(%2, lsbs_to_remove=2, overflow_protection=True, exactness=None) # EncryptedScalar +%4 = tlu(%3, table={table4_formatted_string}) # EncryptedScalar return %4 - """, + """, # noqa: E501 str(circuit3.graph.format(show_bounds=False)), ) @@ -611,3 +612,253 @@ def test_round_bit_pattern_overflow_to_sign_bit(helpers): for x in inputset: helpers.check_execution(circuit, function, x, retries=3) + + +def test_round_bit_pattern_approximate_enabling(helpers): + """ + Test round bit pattern various activation paths. + """ + + @fhe.compiler({"x": "encrypted"}) + def function_default(x): + return fhe.round_bit_pattern(x, lsbs_to_remove=8) + + @fhe.compiler({"x": "encrypted"}) + def function_exact(x): + return fhe.round_bit_pattern(x, lsbs_to_remove=8, exactness=Exactness.EXACT) + + @fhe.compiler({"x": "encrypted"}) + def function_approx(x): + return fhe.round_bit_pattern(x, lsbs_to_remove=8, exactness=Exactness.APPROXIMATE) + + inputset = [-(2**10), 2**10 - 1] + configuration = helpers.configuration() + + circuit_default_default = function_default.compile(inputset, configuration) + circuit_default_exact = function_default.compile( + inputset, configuration.fork(rounding_exactness=Exactness.EXACT) + ) + circuit_default_approx = function_default.compile( + inputset, configuration.fork(rounding_exactness=Exactness.APPROXIMATE) + ) + circuit_exact = function_exact.compile( + inputset, configuration.fork(rounding_exactness=Exactness.APPROXIMATE) + ) + circuit_approx = function_approx.compile( + inputset, configuration.fork(rounding_exactness=Exactness.EXACT) + ) + + assert circuit_approx.complexity < circuit_exact.complexity + assert circuit_exact.complexity == circuit_default_default.complexity + assert circuit_exact.complexity == circuit_default_exact.complexity + assert circuit_approx.complexity == circuit_default_approx.complexity + + +@pytest.mark.parametrize( + "accumulator_precision,reduced_precision,signed,conf", + [ + (8, 4, True, fhe.ApproximateRoundingConfig(False, 4)), + (7, 4, False, fhe.ApproximateRoundingConfig(False, 4)), + (9, 3, True, fhe.ApproximateRoundingConfig(True, False)), + (8, 3, False, fhe.ApproximateRoundingConfig(True, False)), + (7, 3, False, fhe.ApproximateRoundingConfig(True, 3)), + (7, 2, True, fhe.ApproximateRoundingConfig(False, 2)), + (7, 2, False, fhe.ApproximateRoundingConfig(False, False, False, False)), + (8, 1, True, fhe.ApproximateRoundingConfig(False, 1)), + (8, 1, False, fhe.ApproximateRoundingConfig(True, False)), + (6, 5, False, fhe.ApproximateRoundingConfig(True, 6)), + (6, 5, False, fhe.ApproximateRoundingConfig(True, 5)), + ], +) +def test_round_bit_pattern_approximate_off_by_one_errors( + accumulator_precision, reduced_precision, signed, conf, helpers +): + """ + Test round bit pattern off by 1 errors. + """ + lsbs_to_remove = accumulator_precision - reduced_precision + + @fhe.compiler({"x": "encrypted"}) + def function(x): + x = fhe.univariate(lambda x: x)(x) + x = fhe.round_bit_pattern(x, lsbs_to_remove=lsbs_to_remove) + x = x // 2**lsbs_to_remove + return x + + if signed: + inputset = [-(2 ** (accumulator_precision - 1)), 2 ** (accumulator_precision - 1) - 1] + else: + inputset = [0, 2**accumulator_precision - 1] + + configuration = helpers.configuration() + circuit_exact = function.compile(inputset, configuration) + circuit_approx = function.compile( + inputset, + configuration.fork( + approximate_rounding_config=conf, rounding_exactness=Exactness.APPROXIMATE + ), + ) + # check it's better even with bad conf + assert circuit_approx.complexity < circuit_exact.complexity + + testset = range(*inputset) + + nb_error = 0 + for x in testset: + approx = circuit_approx.encrypt_run_decrypt(x) + approx_simu = circuit_approx.simulate(x) + exact = circuit_exact.simulate(x) + assert abs(approx_simu - exact) <= 1 + assert abs(approx_simu - approx) <= 1 + delta = abs(approx - approx_simu) + assert delta <= 1 + nb_error += delta > 0 + + nb_transitions = 2 ** (accumulator_precision - reduced_precision) + assert nb_error <= 3 * nb_transitions # of the same order as transitions but small sample size + + +@pytest.mark.parametrize( + "signed,physical", + [(signed, physical) for signed in (True, False) for physical in (True, False)], +) +def test_round_bit_pattern_approximate_clippping(signed, physical, helpers): + """ + Test round bit pattern clipping. + """ + accumulator_precision = 6 + reduced_precision = 3 + lsbs_to_remove = accumulator_precision - reduced_precision + + @fhe.compiler({"x": "encrypted"}) + def function(x): + x = fhe.univariate(lambda x: x)(x) + x = fhe.round_bit_pattern(x, lsbs_to_remove=lsbs_to_remove) + x = x // 2**lsbs_to_remove + return x + + if signed: + input_domain = range(-(2 ** (accumulator_precision - 1)), 2 ** (accumulator_precision - 1)) + else: + input_domain = range(0, 2 ** (accumulator_precision)) + + configuration = helpers.configuration() + approx_conf = fhe.ApproximateRoundingConfig( + logical_clipping=not physical, + approximate_clipping_start_precision=physical and reduced_precision, + reduce_precision_after_approximate_clipping=False, + ) + no_clipping_conf = fhe.ApproximateRoundingConfig( + logical_clipping=False, approximate_clipping_start_precision=False + ) + assert approx_conf.logical_clipping or approx_conf.approximate_clipping_start_precision + circuit_clipping = function.compile( + input_domain, + configuration.fork( + approximate_rounding_config=approx_conf, rounding_exactness=Exactness.APPROXIMATE + ), + ) + circuit_no_clipping = function.compile( + input_domain, + configuration.fork( + approximate_rounding_config=no_clipping_conf, rounding_exactness=Exactness.APPROXIMATE + ), + ) + + if signed: + clipped_output_domain = range(-(2 ** (reduced_precision - 1)), 2 ** (reduced_precision - 1)) + else: + clipped_output_domain = range(0, 2**reduced_precision) + + # With clipping + for x in input_domain: + assert ( + circuit_clipping.encrypt_run_decrypt(x) in clipped_output_domain + ), circuit_clipping.mlir # no overflow + assert circuit_clipping.simulate(x) in clipped_output_domain + + # Without clipping + # overflow + assert circuit_no_clipping.simulate(input_domain[-1]) not in clipped_output_domain + + +@pytest.mark.parametrize( + "signed,accumulator_precision", + [ + (signed, accumulator_precision) + for signed in (True, False) + for accumulator_precision in (13, 24) + ], +) +def test_round_bit_pattern_approximate_acc_to_6_costs(signed, accumulator_precision, helpers): + """ + Test round bit pattern speedup when approximatipn is activated. + """ + reduced_precision = 6 + lsbs_to_remove = accumulator_precision - reduced_precision + + @fhe.compiler({"x": "encrypted"}) + def function(x): + x = fhe.round_bit_pattern(x, lsbs_to_remove=lsbs_to_remove, overflow_protection=True) + x = x // 2**lsbs_to_remove + return x + + # with overflow + if signed: + input_domain = [-(2 ** (accumulator_precision - 1)), 2 ** (accumulator_precision - 1) - 1] + else: + input_domain = [0, 2 ** (accumulator_precision) - 1] + + configuration = helpers.configuration().fork( + single_precision=False, + parameter_selection_strategy=fhe.ParameterSelectionStrategy.MULTI, + composable=True, + ) + circuit_exact = function.compile(input_domain, configuration) + approx_conf_fastest = fhe.ApproximateRoundingConfig(approximate_clipping_start_precision=6) + approx_conf_safest = fhe.ApproximateRoundingConfig(approximate_clipping_start_precision=100) + circuit_approx_fastest = function.compile( + input_domain, + configuration.fork( + approximate_rounding_config=approx_conf_fastest, + rounding_exactness=Exactness.APPROXIMATE, + ), + ) + circuit_approx_safest = function.compile( + input_domain, + configuration.fork( + approximate_rounding_config=approx_conf_safest, rounding_exactness=Exactness.APPROXIMATE + ), + ) + assert circuit_approx_safest.complexity < circuit_exact.complexity + assert circuit_approx_fastest.complexity < circuit_approx_safest.complexity + + @fhe.compiler({"x": "encrypted"}) + def function(x): # pylint: disable=function-redefined + x = fhe.round_bit_pattern(x, lsbs_to_remove=lsbs_to_remove, overflow_protection=False) + x = x // 2**lsbs_to_remove + return x + + # without overflow + if signed: + input_domain = [-(2 ** (accumulator_precision - 1)), 2 ** (accumulator_precision - 2) - 2] + else: + input_domain = [0, 2 ** (accumulator_precision - 1) - 2] + + circuit_exact_no_ovf = function.compile(input_domain, configuration) + circuit_approx_fastest_no_ovf = function.compile( + input_domain, + configuration.fork( + approximate_rounding_config=approx_conf_fastest, + rounding_exactness=Exactness.APPROXIMATE, + ), + ) + circuit_approx_safest_no_ovf = function.compile( + input_domain, + configuration.fork( + approximate_rounding_config=approx_conf_safest, rounding_exactness=Exactness.APPROXIMATE + ), + ) + assert circuit_approx_fastest_no_ovf.complexity == circuit_approx_safest_no_ovf.complexity + assert circuit_approx_safest_no_ovf.complexity < circuit_exact_no_ovf.complexity + assert circuit_exact_no_ovf.complexity < circuit_exact.complexity diff --git a/frontends/concrete-python/tests/mlir/test_converter.py b/frontends/concrete-python/tests/mlir/test_converter.py index 99369f710..742693413 100644 --- a/frontends/concrete-python/tests/mlir/test_converter.py +++ b/frontends/concrete-python/tests/mlir/test_converter.py @@ -512,11 +512,11 @@ return %1 Function you are trying to compile cannot be compiled -%0 = x # ClearScalar ∈ [10, 30] -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ operand is clear -%1 = round_bit_pattern(%0, lsbs_to_remove=2) # ClearScalar ∈ [12, 32] -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ but clear round bit pattern is not supported -%2 = reinterpret(%1) # ClearScalar +%0 = x # ClearScalar ∈ [10, 30] +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ operand is clear +%1 = round_bit_pattern(%0, lsbs_to_remove=2, overflow_protection=True, exactness=None) # ClearScalar ∈ [12, 32] +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ but clear round bit pattern is not supported +%2 = reinterpret(%1) # ClearScalar return %2 """, # noqa: E501