From 2a69d60f4d9184c2143f3770d14eded7c57fd44c Mon Sep 17 00:00:00 2001 From: egor-romanov Date: Thu, 15 Jun 2023 13:55:45 +0300 Subject: [PATCH 1/9] add choosing-instance-type guide for ai --- .../NavigationMenu.constants.ts | 1 + .../guides/ai/choosing-instance-type.mdx | 73 ++++++++++++++++++ .../ai/instance-type/vecs-benchmark--dark.png | Bin 0 -> 58077 bytes .../instance-type/vecs-benchmark--light.png | Bin 0 -> 56658 bytes 4 files changed, 74 insertions(+) create mode 100644 apps/docs/pages/guides/ai/choosing-instance-type.mdx create mode 100644 apps/docs/public/img/ai/instance-type/vecs-benchmark--dark.png create mode 100644 apps/docs/public/img/ai/instance-type/vecs-benchmark--light.png diff --git a/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts b/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts index e7891666c667a..28d656d810344 100644 --- a/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts +++ b/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts @@ -897,6 +897,7 @@ export const ai: NavMenuConstant = { { name: 'Managing indexes', url: '/guides/ai/managing-indexes' }, { name: 'Vector columns', url: '/guides/ai/vector-columns' }, { name: 'Engineering for scale', url: '/guides/ai/engineering-for-scale' }, + { name: 'Choosing Instance Type', url: '/guides/ai/choosing-instance-type' }, ], }, { diff --git a/apps/docs/pages/guides/ai/choosing-instance-type.mdx b/apps/docs/pages/guides/ai/choosing-instance-type.mdx new file mode 100644 index 0000000000000..58ac0da2001cd --- /dev/null +++ b/apps/docs/pages/guides/ai/choosing-instance-type.mdx @@ -0,0 +1,73 @@ +import Layout from '~/layouts/DefaultGuideLayout' + +export const meta = { + id: 'ai-choosing-instance-type', + title: 'Choosing Instance Type', + description: 'Choosing the right instance type for your workload.', + subtitle: 'Choosing the right instance type for your workload.', + sidebar_label: 'Choosing Instance Type', +} + +This guide will help you choose the right instance type for your workload. We'll provide general guidance, as it is impossible to provide specific instructions for every possible usage scenario. But it will help you understand the starting point from which you can make your own benchmarks and optimizations. + +For more information about engineering for a massive scale, see our [Engineering for Scale](/docs/guides/ai/engineering-for-scale) guide. + +## Simple workloads + +We've run a set of benchmarks using the [gist-960-angular](http://corpus-texmex.irisa.fr/) dataset. This dataset contains 1,000,000 embeddings for images, with each embedding being 960 dimensions. + +We used [Vecs](https://github.com/supabase/vecs) to create a collection, upload the embeddings to a single table, and create an `inner-product` index for the embedding column. We then ran a series of queries to measure the performance of different instance types: + +### Results + +The number of vectors in `gist-960-angular` was cut to fit the instance size. + +| Plan | CPU | Memory | Vectors | RPS | Latency Mean | Latency p95 | CPU Usage - Max % | Memory Usage - Max | +| ------ | ------ | ------ | ------- | --- | ------------ | ----------- | ----------------- | ------------------ | +| Free | 2-core | 1 GB | 30_000 | 75 | 0.065 sec | 0.088 sec | 90% | 1 GB + 100 Mb Swap | +| Small | 2-core | 2 GB | 100_000 | 78 | 0.064 sec | 0.092 sec | 80% | 1.8 GB | +| Medium | 2-core | 4 GB | 250_000 | 58 | 0.085 sec | 0.129 sec | 90% | 3.2 GB | +| Large | 2-core | 8 GB | 500_000 | 55 | 0.088 sec | 0.140 sec | 90% | 5 GB | + +The full number of vectors in `gist-960-angular` dataset - 1_000_000. + +| Plan | CPU | Memory | Vectors | RPS | Latency Mean | Latency p95 | CPU Usage - Max % | Memory Usage - Max | +| ---- | ------- | ------ | --------- | ---- | ------------ | ----------- | ----------------- | ------------------ | +| XL | 4-core | 16 GB | 1_000_000 | 110 | 0.046 sec | 0.070 sec | 45% | 14 GB | +| 2XL | 8-core | 32 GB | 1_000_000 | 235 | 0.083 sec | 0.136 sec | 33% | 10 GB | +| 4XL | 16-core | 64 GB | 1_000_000 | 420 | 0.071 sec | 0.106 sec | 45% | 11 GB | +| 8XL | 32-core | 128 GB | 1_000_000 | 815 | 0.072 sec | 0.106 sec | 75% | 13 GB | +| 12XL | 48-core | 192 GB | 1_000_000 | 1150 | 0.052 sec | 0.078 sec | 70% | 15.5 GB | +| 16XL | 64-core | 256 GB | 1_000_000 | 1345 | 0.072 sec | 0.106 sec | 60% | 17.5 GB | + +- Lists set to `Number of vectors / 1000` +- Probes set to `10` + +## Methodology + +We are using a lot from ANN-benchmarks methodology. You can read more about it [here](https://github.com/erikbern/ann-benchmarks). A Python test runner is responsible for uploading the data, creating the index, and running the queries. PgVector engine is implemented using [vecs](https://github.com/supabase/vecs), a Python client for pgvector. + +
+ multi database + multi database +
+ +Each test is run for at least 30-40 minutes and includes a series of experiments with different concurrency levels to measure the engine's performance under different load types. The results are then averaged. + +As a general recommendation, we suggest using a concurrency level of 5 and more for most workloads and 30 and more for high-load workloads. + +## Work in progress + +This page is a work in progress. We'll add more information about benchmarking with datasets of different vector dimensions and `lists` or `probes` values. Stay tuned for more information about how it may affect the performance and precision of your queries. + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/public/img/ai/instance-type/vecs-benchmark--dark.png b/apps/docs/public/img/ai/instance-type/vecs-benchmark--dark.png new file mode 100644 index 0000000000000000000000000000000000000000..04f6b44a3cd5a228708d3592f9d64ba8889cfcd7 GIT binary patch literal 58077 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 qE0|+ zu3RvLxC*N1i8oWRh=8umcgH(9#_yy0sv>evMOnpsIDaIoFN3AKMfxVHA!WHAAWpK|WbIum0eUavhK(X=qN02)|3{EhB3gI4JqNDdL z<-BbUm-gHDf6YIj|KY6S(-t8vyZX-RaFQqHRF15OmgJN{bC4#>O9&Ge_y(r;^Dmm! zJMz;CKOx-9ce>6NJ%YHR7|nZiB;mJXt7m6^N`rQ_oRz}G1IKGKfbPcegdgarr%G7+y{EERq3@gbe&?2`>E<2Cxj+RBWGE|VvyT>!EQ5?e5?Nh{o6b2=o z+d_GFH8?n?xVom+2r0gK30Z6qGi}-v3HYK%WNX~OD@@CK$UK@D*Mzx`-h;9*SffuE z)0Nq0OSNV{X4Wk`X-%q%Z6hy+&U#V~edCHDW!C`hG%BV6P$L7nCtpWWRhX)H4r1o~ zYwfeh`jDtYNKIRoG>EyGv%klO{TMf?u?NeH1p~9oAgW!n7xS*!};GT!> zV^CMWVldJ?KW&C{;Lyf?Ey)&!|195A7}o49HFrwyF4;vKZr)Icw@!-^LL-d#SD(^{ zC;&b%D-(=YEayl0Y+(ea?uT(b4ZpuJQSQ-QL7(LT_IdsWouKn9FO}SK;Cfd=5l?P< zWwXk<3V)G0T8^k?0`F6$P5<>29rXCe*k;(_nAPGiWDl%LQDKbWsIYLlOYFtlvGoW@ zmPqj2UY6& zPAG$f&(cN?FUG{M|NCxc67@#G2ajkZwV44DeA)V_5|%B-8~eHM>q_i0(jWSQYq!a< z`PtkUsF3=kux_Jn@D#_&zCQ)=BK5*p-3*RjWk!Us@w)|fnNBIrX`ekLLojlBZunhC zM+$=k&fVIApENZ3AQB(0>fFc&eggQ`EF#yfYIKuYJ%s3Z5FtfJHbmXOyEgJjW&Ty;mpj1FP+ z!|7a1(zdX$a2`k+%I6Gos7$fG8xtM9bep$SfY&J~XrFn8*g2R&U0}h29!xs1 z7E%X+4OD{SdIAH4={ArOPMcyS+}BfnY*D>Z=8d4ODHeN5yPu;xb2j+)i<~Fk-rgP; z8h1M;lZ2_$pUH@wx_;`SeT(>}4k6o555oC?c7VQwbKQ!$aZJ_VK!Zx0@slKScz`U; z2dQak8fCb|#6;6L#&m5>&BiC&wi;IQ>zK@)(QXjXpVX&rQ|B~oFcPT?wjJuG>X7fY z0Kx_T-o+k76}Br$Z;S8-bqrW39yoe&h)kU^fr_Cx4RUgFoJLA4oNS)2eeGXCjG5V+ zF^6GWevV+TLFPr980cHi)cwY12KlU)W*$yZyom17h{Hx}wj;MIiu;hVNj8X>%cNI? z{aF6`>fFtrx2R}lBKPGLHR=Y*UkwlWe2(LtDGO=h)rjrXU}LO`FUtP4{!Vs9#$GY{4A=0&{eBUR^S` zUGC3EtbpXo;;G>*;mBj#aZQrwq?SnHL4d zE1b=N7)B@_o{~RCuha_y5=y=4a-MwhhZ@wmm?ROaDKuGNQE0p(@*wEvPmd-6utI+z z{W)lkDK4ka5}vap5Y`4R@YTx&E;|~WVhDlJ)DdxN$0RZJdL$`)>|Rf%A~HoIUPR zZqO(|UmfL0v@_Y9B9m=pARF(&(Hv4Yh>{83^$t)>asLiy`*NAS(*C`(2ZQrA=!Odk zfdMrel3GynQ~&%cCc&@=;*FQ~0tIzXL59L;54Z1pTjmP`VI++^u7JDN6`^es>#0f( zu2V!|Np>vOr7Qfy`>ED(LW1bB{CTQh!&F=@ z_;9UJh&8NlX~}iqw+v(`oc5N#xqZUM1}1XD!ba$_6gtmAHm3d@H<-ZqN`z#QgM-6> z*NHI9{I5PkhbMMiv06IUVLAPpyn?C&59mWKy?X*wqr5k!bgJC{$ygffsWM^SxN8A(o` zbqB!Thq{b`AYE}E;^-8~qr4gmYo@;-Sy@@>}?@Y80larB!_xr`G)i zm7f7~4)9-|s2jd>3FJH*?|$ZJelr?G+n8)-bos(x_st-qb2L#`oem3LnQHngp%uMd zKhh-J1jrXR=9zL!qmvG=7)@1vFMTwFYPp21^9go-s+Hue;SOWEP;(2lar z4Bxv&vIin?HzIQ4gsaa{Q5`#%6{L9(D78z02zPsGOY<_@nz_K%Ozx6 zQL;9BXgQdXOxd!PZNC+7K3W)RcwbGyf&s8&Q zjPlGN_S!IiMf!3*sbqM)0JYs82d~N}YpVPf%*!Nt;@xU<{aW@Wi(8>~rYheT!LS-d z7T%I)pf=ds-#Basfqt-V7`!P6k>Ab(ex9TE_Reuud7riRi1uB;T^vXA>2CJMX6^}4C7yQ>4{XA(UikLpUD71=LCiSHRZSd@dkx5it=p zIW!u6vq{Es6)GFl zZ_J&8lr{Z18Ok}N_$Lz8E{|~qV6zQ229nUnKn`pMQ2=&UJu+kYhaE{gzJOU}3{PT`^ z9yc#A(bd;kj~UQ5oX{KYol zEr>5TSM3j1@Z97h-9jC6xc3y=n~ZYM^FcXSb?^g$PL2PtxiP5Y;mr2%@pyxuN2FxY zX>IbOe^i~4Vo*W+fPZ$rDK2X+QZ@UA-2>*D^(11H%jstEezO>dU1QO=>_C$xThi0b z*M+-NaI)+oLK7+Tg-^c-guzbOarS=u28y^E#E^?S>R!ptBxgXfx@f2M`b5FqZ|ov{ zQrVA|4iEPJb8xiUV_Eew4{WFli3x+5LdZi{>Q2jlKF}*+5mL=5Xn+rhOKdKI_N=N5}FWzlo zas}=;{z#N+d>Rt+93=To}$PVw0wyzN2C};y}2of$e_?RxXHp<@Jim%Ol+zS35Uo z$Aj%+6!nX~jyx{asIhN1Mu$8QOS2RIF-bN{Lw2db4u(3R+-KSfTnzb+0Hkt}rn=2tMu4%RVo?QWcjzKsp-4)N_FXfC$oA+y>vX^KH5Q zm%gO4RbSv!+UgL2mrFz+HzMxOQf#s>YRBk^&pm$YbQFS5r;VXp^+e*H(bLT5@4Sz_ zef}MlDhln*UNq=!j#RU=Q@IYcdnym&T4|;oZ$K01p8NehWvTB0qlc$CR{toW{KmM6 za&MYx!zyzdo?5UWbsl)zRDS(?{1P9gjA`mR%$BC6Ft)q1;qCzhKooAgv3f!`|8hEZ z4NH#5=xJh5#T9_tkz0W=CEFeU101x6x|I9{5?tIj&oO?Pr`f-skbl=%S-hSWJr|cn zgG-tEOH_!G{2z-Dja_nwMu0%zoyY?PF($eY7>x=YYNuIy+tqz@TW50?C#KAfsP&lO zFZ|o~h1K{Yw%t8~#`5y$;^A0kI()f~c+O=T2NGfMqhEN|8sqqf}X8cXT3ywH*i8~s7Sc>SrZfa851Oju87DQBmxvonhABarYk(=VuG%Wr$Yy5WafNAE<` z;J3&r>i=$GjB*$*!m&AR^wZu-OUveKXIMNP+kXpm)MAv?zKzSxoW(^IyxYi9fD=7r z@%|q(+bS{gF^T{a2KHCrh-Fis(&N*n(7Smk69Xh_%xLv>bW!)mNT%ZaOt|TF+;x1V zEuYva=uz-3e^91$z_fB|#yB*6XUh+IVu>zA_vLLAgK7@xc)ss7i1pr}2EbnJ8>4oD zy17Y8VR{B9nDVue|0-OF#M;t3ov$S}H&wEH3C+R4x1d2Yh_fyA@PG!JXu{&~9CwrR zdK3qdyB~<$zqoVeZo?^PHm70#JZy3h!|faAX06g%}_0vU6$@u%(w zPy|3diygA~#~I)=di8t;+0%kTZtj{)wE zYPRFF@ujW}28cZHm6UkT`@KiF>ud}GgGW}stJ5JTSEB}F=ziI-tL00hi?S z=~m}IUWF*Y6}T|$XhsAdP#@nu(;B2evM&8Gmh289Rj3C@nn*?1%>VlK`QoRekQ%8! zgF0pgJt~X*;Jqe`t=bB914`!~6$U_UbMW3drn`UsL^D;ARX@L!MXHW;ZE0QwBhw(b z7R|#`2}`h~zo1H!D6kh*R=~x%LepqA0L-l}E#waj?bxASE-Wl~&wu|QE+LUXbH8aP z6RPMns3le1$wEWsGJ#vJUoiF8h>fYy+bjWf_;%!_l(S;SGw#_%ZL&(mvEz;M)ymblF0kfk3NdHvfJl zQslJ%43v(|{bLUAr!y`E(d;uiBA{^{xnh2(m=_2Fk9m0a2C~XbhZuC^=cD!4t1B&_ zz$?f-Y5cKCpdbkW{Z(k2UBy*a#nl%hHuz4NE?_HpN#+)L33Du5gV8v|I)Hab-QnbqVaRA;U zIx3Xk2q%iXa6-x?-Hu|aM2*5l3CWH{UQ;#Y^0p~9CTPrgyy6__Sq|%5BYrEAgS+Nj ztcqNnY4VqkYZ>+#73dGc)xD|%r|2cH#oxWoep>j}9nq@B@Q_a_;fU_pt6%9pGG_e> z(P+%P8;F_-U);e7eMt6YsNj2=@KWpSP6R{;dKg3`nK0x%|8c#dup-&gE<#0e08cpF z;s{o76o$?!>3_RhqvrU=CD(rbJpQt>E~>uo?9;^>%~hB|LUai9Tdmh#$A*op%4LB# zUV=`MA91Jr^jTvwC!U(eRX-&ass$^U0YYqY@&@5en;(qwY4^y{#|-mEsd9Us1rf!Rw;Fzmontcc4!6Vx*4H)im#jM~Aq9OVQIZ;X&7`@=6GPH^D@vQ3D!xFyHVsa7u zD|4#R>{gi#vf*f8{bm8DP4M%*$5+G(rm4;i`l3yorDh_38}X0Rp|>hH2^I|Bjup0T zo`F6g`sO*vNMwSL4g{Y`!;k6);i(r}L4BQ13rthWXRf}ujhmuK3gofUy`RwaXYvyH z`<_zO1)KV_tqa$;m6JPy8lcc`Zk`s!#svR%na=0Xz~52F`enI45ST=pjPsM4mh7F* zXaSJgneWTSWpO-&Or!psuc96X6Z<{#?z4s_OdJ|?k0}`m9(UoJxgqr+gUC9j)W2uJ z&|_nnmT-2+ySov4^1} zAjXa&p@`jl#5k9G=Y|v}<*wsEdt1u>pT{6Yn%p!_$usAY+s;S2^D!{uw`~6+ z_M$~#f45)^?tDsv#dPb8bH5g!8#%uZmcVTxZR&Ein-*;DKFFE)mkvgQKVS?+ zHb|?z@e$u(Mc6^qtho;VA}9@HT*{c(A=#9gaXRn{?1Z_TZ0&8>R|ZH4pws?Q<7cIo z`pw3D6VPSF=cB)t5<`qGm7JIU+Lnhtac1_?hT+NV;{3MF-m-C-@NR1}r+|hCA7h=( zw)-xw@)tiXUsI|2nfD*($=X^OSHl>lEYaK-qQUT#FXtA$VtM$FImQhRjj8(-dmf_VkXpptjoXL31-Iv=00!g7k zVbv`%J_*om`G94;+`p{Pkd=-6STMz2O3PO$`rFwfVAXOzvnx)(@9g)8Xw-fRBg$NB z4|=vN(ppS1k`v7sA_AXj|crK2-vF@_d-6Q6>8ko?b*tm26A zh3xlH7bha!43Kd5qGlQRYoHAoO?_&x5;wDF=xEe4jp+N=`+XttT1kUJnNRmIv$l%v zY!f(UQDUJs`;6u)W%-rITR5d&$Qq@cI6v6U{E67AV;9gt>bIS8I9gOM(VhW4qFinn z@5WBo)OU%~*23%ZZSeC}4+;2?$j`j=x+Z;1?3HEFy6-a@7+)T+lXX42fAf{MDDJB%9@!^2X2~M&kNn5`PikD7?bsPAc`!4`gf3h?v8V7K=b7fE%>X~o`4>v>j;1!8 zc%e-IQgHUqJDz@VrUC0PJ#WcpyBiC@?0umTnfA0#xg+EM<%6N`&#?|*4qZL|A#_JK zrYUuXBB9u8oWkVnChb`W$DWf88`M57W&O|O!m#A(Q7v66nRZ~d7t?K6wH zw`i^=!$Svb?1?>ju+}u4+5VOF#$$sB8L-UiAl*FX4=|w-wVQ8zdpAYc%4}}N(6-vq z7f+?jI`+qRprL7$s;GCTuNI>LAm08gE{)Fvy0Qv(!WD$9R8`aG3R|9Ad5~9D<+iAf z&6L}8W?+kqDu4z9fI2boFTuw$tTX~2#Bl6~1mrJZX)t<|mP#cdDla(}soUGvmuK^F zwHl;YGx&`3Ty>33k2tslQjowPAk5UG-UC=A5DZ8-4LITCy}rWEi2nE+U0q#+xf)65 zhD?@-9sV=x5zSA<2fHHUtKIF%08`t5Ql7n_$EZ6+~2nZr(tcE z+RnT`<=43C6;mFM?b4DT>TPdV=9(1UqO4{HZjPKb-+udtQ;4GNwX(ab4D4j|v4Su2 z-!iDz=ncm!vbD3xsL|4>hkFEBnev=!g3B`=$YKXh5Hh6MCw2ijVX_48LhRMWBXe3r zFp)A&N1xp2LLjhaR-1NqtbJgIEJRvrQXnDYG_Q*5tNhUnvt&Ua7;>3zYezu4@Lwes zIwwu_j`s`W+kgFfmm@{^-J+scz_)EYM9x}`)o~S%VU-KQ08a9ez);v2F@^B@gO-p$k=#!&KYIjgef|@ zEI91|hG}O=_t!@#0!71Dp*yDaU`9nh`sfHnRWXDDhk(`xOY^l7XP`K<*It6V8I2y9u4h2W+0 zs3R6sFY&v+ON%0s%n=JIWAQZClt%w)tS4c*9^?cBd=RCkv;0%cdwx3uxmA@CeTrklRLBD z7mA3X1@{6@c~U-@f&5Rv23)1Z@d0K=;OajJ9Wfk?XpT}HrJ+sax(-l4Ak(Gi2X1!k zRIw(B(cA+5yA*yEDZQ=3rO}(&97I{0Vl)S3Rq`Av$4**zoRQRL$mfbtMH5@*o5aF^ zAV|OKRHITgSZ%4E(~edLl!8v!@_ya<6sR8a9WIkNtm^QOk|Zm95RFAII6Z1*--^P? z&OEH$N9{2}V2`BkLv+3L?41FnQjF5Sd-tyAI}_zrfeJ&uL4gI7rQ3Dl4_h@pY57nZP3>b9H+F4Xzi_Bynr5&bfXhPgr zYplQR!9Ekc%qfT(>|Kw=cHEiL5$w)HYv-f9Od6Wl*B8>&h~B6{w6N8tmkULB{kgC3 zifN4(QG6y~iKAS{VEf&U@R~HgY!{z;!WOU0D2o2m%8yV(k)(c4B@muyd^)nYG;I#} zG_4#G3%7i`jePZ>g6(iZF0o}s+B$U>-WrpFSt z{y)Gcj2A|3p|U+UBVOLcq(J+->m|_;Yw3c((@I#UFV1DkX@;WT$fihz;QD=cVF^@B zg;7`B61q@cznG{OQ?`ppM05D|3Dzo}&y1kTDsrq4M^IR!b2A2&&ryTlFyHTe%REJ? z1RTJ7O&vw*7^etUv1Q6FWu{VuQNc$D;bXDB?oPV6;v;NZ>$z5uE9e?E363>xWKGP^ zJ$x|`i6PWoEN8Z<$NjMMu|$$43uWSxeJ$e}sRp(Bno>1>ReC;iOJh}juzKjxJ21NF zZGLsOJ!iB)mOzM^Ht4cxIJxFh-ej7oqfz|CbtNU@ zfN*O6J^qTK4*xB&B-2a`>Ee2%y|5znh3Cv>KV^0J@a+0)>bl>#byVLCghxQi8oW}D zU`&i4whYqjQ1Pm5n&y)FDpEPjiWDg4b)84LtXA6J+C!%Hj!~l>K?A_qr+&AQsc}qg zbECiP=pkX@R;nP^h&OP@O5SoR;nF3ykGyq3@Sk7Xm0oM287+ALzjVH-SOu?ik0hWR z_adjkk6nM}T}($5_P8hCDHjmw#vbP^0Z?r84ro}hM(Q8djpqL1-^8^OIkL7x+4Lv> z^2=~i{$T?W3j)U0#BGcZf`TMF%@#K0$crw>!6NsU$$oH4i_FF6;fuSS-qTd$IZ*Ke zsa8u2FazaC@;L?z-ShWh-T0dNLmasEe<~maRodkez_ad`lK<|dQ$TtjWp=jMeSJrB zsxLs+aO9T97cjKnTPhZF26w=YO(G4t=Lm=uj*|`80(iBU!sKV9qS+T*W-DiCFpiJ} z$qN4i>SiY$NWwl&-c^lJmg-Dl7a6!{~ zF)WFVmFU1VL#AS~45RVs0$nlGZJvn{XO{vdB_T)8Sx^3Vq|rreD$j^! zQd{I#8`s8j6Q-vvzp<@O8SFJ7WgR2Eh(s zGZGZ;5P)3Y7Z`L6<{)b}p3jVXE2pQ;KezdI1)<`SL6MDEX}%~)947?GVfP*dtrR=G zCmh(-X%<@wl?FEN&VZyB!xh9#{3~A@;S+|;iT$sp*_?{>4yPxRwSYsI1F~_Jep5GC z4)5RlRQ@UbFw58!c3t$Ds&A|ai--h=S=?N1N9ThJob`7COFZlL5$^87C{%S=phKQn zXxI*7Ww~&84e)d# zub<|m_0=)X&OlM^eclyfKzq>4L9(ilZH84Nd@`m~NL%hevr2-kt!#Foiz-U>Z+G;K zjh3>32c)QCdYcNEwB&SK1hGe%_R&Jx;Q z4LX{wEBLG#xX6^JH(d9tPP{#QP2pYbX?- zl6@E+Qbw(b=G_`UCcwmwt@%m&t=hPZ2XtFIMYG+FiI1lmT`1d))7d|yuCCDHnLzVy z{IB-T|0~HmisO&YwB}j1`K>T*jcsI8=$l`r8E%zWntDtpsR$>X2P^!NhM5H`^R#K; z@l;SF!yToqERrOY(4d@<4e<*)F*H-AqB*}H6`Jtu^X#1c5Bs6#$LI4o_uS7t&ky%= z@9X{CwiKVmr!H!~e6GqtAqm(j$?xycjP{69USR(C@P`|yeNdNEL%E>>14$kX;FyNX z6nDsqfRp6Ylb41M0bKbgc?pBd_j9VofsE5wQA6N0IHTembwYY9YsWzYb-P{o29R}k z1@+$)UxjoWY%Ccq1IQ;rYvl;TOuL-{7diR7Rp#AlXY>M>(53NM6kfhVnEa_i;@W3t zSPQ!Nv54)ucBz%|i<2%h1{+O|fw~At-Lj7ln{i~$_bckpT*OWLJ~E@iTI{>X$Wjv8 z9iS(YiuPAr5A*7k;c}#(S%|#4K$T5(!Wv)vHVDz@LS{1BeS*EL7C0!vk3JxM0sQj^ zhg5JZ@rGHfI#!+Kx`GnEm)^&<&A^+GRdD-Ma0c>HiD zB28c~&O`$s8F;PRmVT)tND#45($U?G_u3Fu>OO@B z=+;pvm%piN-MgO;P7&-r* zg95v4KV1`OLpgM|KWRw>=1QW7PL!@DJBaeKWn8{&v-C=5r`?+Dn?elE`E4%Iq{7MJ zTJH$J#A*ksuQN~ZvaTeDvXo{c@zhkqJrZnYPLC9?zMG8st(%&itG~#R zpARTc{_MP>za+{W8-!LbzPd2#M-@R*CQM z@Po%Rd|Je&H^RWQhDv&N#!}8{%MCdw)RF_W8t(}(#S2JxtjGIk2RQ@sp_h_%DN)z_ zxlBfhe!K@I=_ruWlz~k&`aLo2nPG7L_?nh?-tb_@>|))?zoS+m6!-h*eFXkT5vcCB Y;kNi%@^6Cn^ldhgO}s9TgSBE1SyLkJxyA+Q1I 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 Date: Thu, 15 Jun 2023 21:16:27 +0300 Subject: [PATCH 2/9] add note about more vectors --- .../Navigation/NavigationMenu/NavigationMenu.constants.ts | 2 +- apps/docs/pages/guides/ai/choosing-instance-type.mdx | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts b/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts index 28d656d810344..40c4ff2d7d9ad 100644 --- a/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts +++ b/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts @@ -897,7 +897,7 @@ export const ai: NavMenuConstant = { { name: 'Managing indexes', url: '/guides/ai/managing-indexes' }, { name: 'Vector columns', url: '/guides/ai/vector-columns' }, { name: 'Engineering for scale', url: '/guides/ai/engineering-for-scale' }, - { name: 'Choosing Instance Type', url: '/guides/ai/choosing-instance-type' }, + { name: 'Choosing instance type', url: '/guides/ai/choosing-instance-type' }, ], }, { diff --git a/apps/docs/pages/guides/ai/choosing-instance-type.mdx b/apps/docs/pages/guides/ai/choosing-instance-type.mdx index 58ac0da2001cd..c4074ecc69328 100644 --- a/apps/docs/pages/guides/ai/choosing-instance-type.mdx +++ b/apps/docs/pages/guides/ai/choosing-instance-type.mdx @@ -43,6 +43,12 @@ The full number of vectors in `gist-960-angular` dataset - 1_000_000. - Lists set to `Number of vectors / 1000` - Probes set to `10` + + +It is possible to upload more than 1_000_000 vectors to a single table if Memory allows it (for example, 2XL instance and higher). But it will affect the performance of the queries: RPS will be lower, and latency will be higher. Scaling should be almost linear, but it is recommended to benchmark your workload to find the optimal number of vectors per table and per instance. + + + ## Methodology We are using a lot from ANN-benchmarks methodology. You can read more about it [here](https://github.com/erikbern/ann-benchmarks). A Python test runner is responsible for uploading the data, creating the index, and running the queries. PgVector engine is implemented using [vecs](https://github.com/supabase/vecs), a Python client for pgvector. From 3ec06c4a1921060f31edbb05709c8bf228bc0073 Mon Sep 17 00:00:00 2001 From: egor <58992960+egor-romanov@users.noreply.github.com> Date: Thu, 15 Jun 2023 22:54:19 +0300 Subject: [PATCH 3/9] Update apps/docs/pages/guides/ai/choosing-instance-type.mdx Co-authored-by: Greg Richardson --- apps/docs/pages/guides/ai/choosing-instance-type.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/docs/pages/guides/ai/choosing-instance-type.mdx b/apps/docs/pages/guides/ai/choosing-instance-type.mdx index c4074ecc69328..674c14e45dc8b 100644 --- a/apps/docs/pages/guides/ai/choosing-instance-type.mdx +++ b/apps/docs/pages/guides/ai/choosing-instance-type.mdx @@ -70,9 +70,9 @@ Each test is run for at least 30-40 minutes and includes a series of experiments As a general recommendation, we suggest using a concurrency level of 5 and more for most workloads and 30 and more for high-load workloads. -## Work in progress +## Future benchmarks -This page is a work in progress. We'll add more information about benchmarking with datasets of different vector dimensions and `lists` or `probes` values. Stay tuned for more information about how it may affect the performance and precision of your queries. +We'll continue to add more benchmarks on datasets consisting of different vector dimensions, number of `lists` in the index, and number of `probes` in the index. Stay tuned for more information about how it may affect the performance and precision of your queries. export const Page = ({ children }) => From e5799b005afcd65b8954c7ade5a2437866e0c495 Mon Sep 17 00:00:00 2001 From: egor <58992960+egor-romanov@users.noreply.github.com> Date: Thu, 15 Jun 2023 22:54:26 +0300 Subject: [PATCH 4/9] Update apps/docs/pages/guides/ai/choosing-instance-type.mdx Co-authored-by: Greg Richardson --- apps/docs/pages/guides/ai/choosing-instance-type.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/docs/pages/guides/ai/choosing-instance-type.mdx b/apps/docs/pages/guides/ai/choosing-instance-type.mdx index 674c14e45dc8b..810fb731a082d 100644 --- a/apps/docs/pages/guides/ai/choosing-instance-type.mdx +++ b/apps/docs/pages/guides/ai/choosing-instance-type.mdx @@ -68,7 +68,7 @@ We are using a lot from ANN-benchmarks methodology. You can read more about it [ Each test is run for at least 30-40 minutes and includes a series of experiments with different concurrency levels to measure the engine's performance under different load types. The results are then averaged. -As a general recommendation, we suggest using a concurrency level of 5 and more for most workloads and 30 and more for high-load workloads. +As a general recommendation, we suggest using a concurrency level of 5 or more for most workloads and 30 or more for high-load workloads. ## Future benchmarks From b02a455eafb3f4716bfef068b0dc008a3e076248 Mon Sep 17 00:00:00 2001 From: egor <58992960+egor-romanov@users.noreply.github.com> Date: Thu, 15 Jun 2023 22:54:31 +0300 Subject: [PATCH 5/9] Update apps/docs/pages/guides/ai/choosing-instance-type.mdx Co-authored-by: Greg Richardson --- apps/docs/pages/guides/ai/choosing-instance-type.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/docs/pages/guides/ai/choosing-instance-type.mdx b/apps/docs/pages/guides/ai/choosing-instance-type.mdx index 810fb731a082d..a76b215a867a0 100644 --- a/apps/docs/pages/guides/ai/choosing-instance-type.mdx +++ b/apps/docs/pages/guides/ai/choosing-instance-type.mdx @@ -66,7 +66,7 @@ We are using a lot from ANN-benchmarks methodology. You can read more about it [ /> -Each test is run for at least 30-40 minutes and includes a series of experiments with different concurrency levels to measure the engine's performance under different load types. The results are then averaged. +Each test is run for a minimum of 30-40 minutes. They include a series of experiments executed at different concurrency levels to measure the engine's performance under different load types. The results are then averaged. As a general recommendation, we suggest using a concurrency level of 5 or more for most workloads and 30 or more for high-load workloads. From 5af416b397359153d97c41b4e5cfc8c1e24654de Mon Sep 17 00:00:00 2001 From: egor <58992960+egor-romanov@users.noreply.github.com> Date: Thu, 15 Jun 2023 22:54:36 +0300 Subject: [PATCH 6/9] Update apps/docs/pages/guides/ai/choosing-instance-type.mdx Co-authored-by: Greg Richardson --- apps/docs/pages/guides/ai/choosing-instance-type.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/docs/pages/guides/ai/choosing-instance-type.mdx b/apps/docs/pages/guides/ai/choosing-instance-type.mdx index a76b215a867a0..468e6670b9735 100644 --- a/apps/docs/pages/guides/ai/choosing-instance-type.mdx +++ b/apps/docs/pages/guides/ai/choosing-instance-type.mdx @@ -51,7 +51,7 @@ It is possible to upload more than 1_000_000 vectors to a single table if Memory ## Methodology -We are using a lot from ANN-benchmarks methodology. You can read more about it [here](https://github.com/erikbern/ann-benchmarks). A Python test runner is responsible for uploading the data, creating the index, and running the queries. PgVector engine is implemented using [vecs](https://github.com/supabase/vecs), a Python client for pgvector. +We follow techniques outlined in the [ANN Benchmarks](https://github.com/erikbern/ann-benchmarks) methodology. A Python test runner is responsible for uploading the data, creating the index, and running the queries. The pgvector engine is implemented using [vecs](https://github.com/supabase/vecs), a Python client for pgvector.
Date: Thu, 15 Jun 2023 22:54:43 +0300 Subject: [PATCH 7/9] Update apps/docs/pages/guides/ai/choosing-instance-type.mdx Co-authored-by: Greg Richardson --- apps/docs/pages/guides/ai/choosing-instance-type.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/docs/pages/guides/ai/choosing-instance-type.mdx b/apps/docs/pages/guides/ai/choosing-instance-type.mdx index 468e6670b9735..0fda1bba86e96 100644 --- a/apps/docs/pages/guides/ai/choosing-instance-type.mdx +++ b/apps/docs/pages/guides/ai/choosing-instance-type.mdx @@ -10,7 +10,7 @@ export const meta = { This guide will help you choose the right instance type for your workload. We'll provide general guidance, as it is impossible to provide specific instructions for every possible usage scenario. But it will help you understand the starting point from which you can make your own benchmarks and optimizations. -For more information about engineering for a massive scale, see our [Engineering for Scale](/docs/guides/ai/engineering-for-scale) guide. +For more information about engineering at scale, see our [Engineering for Scale](/docs/guides/ai/engineering-for-scale) guide. ## Simple workloads From 72c15f31f51d5e10706ae55e9f605e05f8db0d14 Mon Sep 17 00:00:00 2001 From: egor <58992960+egor-romanov@users.noreply.github.com> Date: Thu, 15 Jun 2023 22:54:48 +0300 Subject: [PATCH 8/9] Update apps/docs/pages/guides/ai/choosing-instance-type.mdx Co-authored-by: Greg Richardson --- apps/docs/pages/guides/ai/choosing-instance-type.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/docs/pages/guides/ai/choosing-instance-type.mdx b/apps/docs/pages/guides/ai/choosing-instance-type.mdx index 0fda1bba86e96..b9695014ab5c4 100644 --- a/apps/docs/pages/guides/ai/choosing-instance-type.mdx +++ b/apps/docs/pages/guides/ai/choosing-instance-type.mdx @@ -8,7 +8,7 @@ export const meta = { sidebar_label: 'Choosing Instance Type', } -This guide will help you choose the right instance type for your workload. We'll provide general guidance, as it is impossible to provide specific instructions for every possible usage scenario. But it will help you understand the starting point from which you can make your own benchmarks and optimizations. +This guide will help you choose the right instance type for your workload. We'll provide general guidance, as it is impossible to provide specific instructions for every possible use case. The goal is to give you a starting point from which you can make your own benchmarks and optimizations. For more information about engineering at scale, see our [Engineering for Scale](/docs/guides/ai/engineering-for-scale) guide. From 95fab3123ae8f07734860de47d08417983626ea0 Mon Sep 17 00:00:00 2001 From: egor <58992960+egor-romanov@users.noreply.github.com> Date: Fri, 16 Jun 2023 00:17:02 +0300 Subject: [PATCH 9/9] change underscore to comma in numbers --- .../guides/ai/choosing-instance-type.mdx | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/apps/docs/pages/guides/ai/choosing-instance-type.mdx b/apps/docs/pages/guides/ai/choosing-instance-type.mdx index b9695014ab5c4..c6bb503c4aa65 100644 --- a/apps/docs/pages/guides/ai/choosing-instance-type.mdx +++ b/apps/docs/pages/guides/ai/choosing-instance-type.mdx @@ -24,28 +24,28 @@ The number of vectors in `gist-960-angular` was cut to fit the instance size. | Plan | CPU | Memory | Vectors | RPS | Latency Mean | Latency p95 | CPU Usage - Max % | Memory Usage - Max | | ------ | ------ | ------ | ------- | --- | ------------ | ----------- | ----------------- | ------------------ | -| Free | 2-core | 1 GB | 30_000 | 75 | 0.065 sec | 0.088 sec | 90% | 1 GB + 100 Mb Swap | -| Small | 2-core | 2 GB | 100_000 | 78 | 0.064 sec | 0.092 sec | 80% | 1.8 GB | -| Medium | 2-core | 4 GB | 250_000 | 58 | 0.085 sec | 0.129 sec | 90% | 3.2 GB | -| Large | 2-core | 8 GB | 500_000 | 55 | 0.088 sec | 0.140 sec | 90% | 5 GB | +| Free | 2-core | 1 GB | 30,000 | 75 | 0.065 sec | 0.088 sec | 90% | 1 GB + 100 Mb Swap | +| Small | 2-core | 2 GB | 100,000 | 78 | 0.064 sec | 0.092 sec | 80% | 1.8 GB | +| Medium | 2-core | 4 GB | 250,000 | 58 | 0.085 sec | 0.129 sec | 90% | 3.2 GB | +| Large | 2-core | 8 GB | 500,000 | 55 | 0.088 sec | 0.140 sec | 90% | 5 GB | -The full number of vectors in `gist-960-angular` dataset - 1_000_000. +The full number of vectors in `gist-960-angular` dataset - 1,000,000. | Plan | CPU | Memory | Vectors | RPS | Latency Mean | Latency p95 | CPU Usage - Max % | Memory Usage - Max | | ---- | ------- | ------ | --------- | ---- | ------------ | ----------- | ----------------- | ------------------ | -| XL | 4-core | 16 GB | 1_000_000 | 110 | 0.046 sec | 0.070 sec | 45% | 14 GB | -| 2XL | 8-core | 32 GB | 1_000_000 | 235 | 0.083 sec | 0.136 sec | 33% | 10 GB | -| 4XL | 16-core | 64 GB | 1_000_000 | 420 | 0.071 sec | 0.106 sec | 45% | 11 GB | -| 8XL | 32-core | 128 GB | 1_000_000 | 815 | 0.072 sec | 0.106 sec | 75% | 13 GB | -| 12XL | 48-core | 192 GB | 1_000_000 | 1150 | 0.052 sec | 0.078 sec | 70% | 15.5 GB | -| 16XL | 64-core | 256 GB | 1_000_000 | 1345 | 0.072 sec | 0.106 sec | 60% | 17.5 GB | +| XL | 4-core | 16 GB | 1,000,000 | 110 | 0.046 sec | 0.070 sec | 45% | 14 GB | +| 2XL | 8-core | 32 GB | 1,000,000 | 235 | 0.083 sec | 0.136 sec | 33% | 10 GB | +| 4XL | 16-core | 64 GB | 1,000,000 | 420 | 0.071 sec | 0.106 sec | 45% | 11 GB | +| 8XL | 32-core | 128 GB | 1,000,000 | 815 | 0.072 sec | 0.106 sec | 75% | 13 GB | +| 12XL | 48-core | 192 GB | 1,000,000 | 1150 | 0.052 sec | 0.078 sec | 70% | 15.5 GB | +| 16XL | 64-core | 256 GB | 1,000,000 | 1345 | 0.072 sec | 0.106 sec | 60% | 17.5 GB | - Lists set to `Number of vectors / 1000` - Probes set to `10` -It is possible to upload more than 1_000_000 vectors to a single table if Memory allows it (for example, 2XL instance and higher). But it will affect the performance of the queries: RPS will be lower, and latency will be higher. Scaling should be almost linear, but it is recommended to benchmark your workload to find the optimal number of vectors per table and per instance. +It is possible to upload more than 1,000,000 vectors to a single table if Memory allows it (for example, 2XL instance and higher). But it will affect the performance of the queries: RPS will be lower, and latency will be higher. Scaling should be almost linear, but it is recommended to benchmark your workload to find the optimal number of vectors per table and per instance.