\begin{figure} \centering \begin{tikzpicture} \begin{axis}[ xlabel={ Recall }, ylabel={ Queries per second (1/s) }, ymode = log, yticklabel style={/pgf/number format/fixed, /pgf/number format/precision=3}, legend style = { anchor=west}, cycle list name = black white ] \addplot coordinates { (0.28338, 1477752.1756) (0.37301, 832698.828668) (0.70343, 655646.845495) (0.76362, 464856.142217) (0.87695, 358794.183062) (0.91279, 246504.810433) (0.9574, 173090.897086) (0.97605, 111871.674299) (0.98584, 101380.747272) (0.98882, 61130.3188195) (0.99363, 59330.6617139) (0.99816, 31690.2109732) (0.99891, 16350.1819479) (0.99993, 8367.611988) (1.0, 6418.14799507) }; \addlegendentry{ faiss-gpu-batch }; \addplot coordinates { (1.0, 24471.5942374) }; \addlegendentry{ faiss-gpu-bf-batch }; \addplot coordinates { (0.32781, 59623.916072) (0.37311, 48826.2185007) (0.42492, 31545.750056) (0.6229, 30246.5702847) (0.68356, 21606.3023602) (0.70405, 19177.8449304) (0.76315, 18507.0066932) (0.81975, 12807.7546952) (0.93405, 8017.92183418) (0.96095, 5585.82448731) (0.97603, 4769.34920272) (0.9807, 3139.09548363) (0.98887, 3003.50261506) (0.99366, 2722.67465935) (0.99603, 1644.80200631) (0.9982, 1585.14279348) (0.99891, 850.885548608) (0.99964, 849.951149589) (0.99994, 438.318637103) (1.0, 225.160765831) }; \addlegendentry{ faiss-ivf-batch }; \addplot coordinates { (0.05046, 273008.012601) (0.10477, 227858.427271) (0.17526, 218131.816125) (0.23606, 182972.010889) (0.30827, 158641.995855) (0.41463, 148544.553053) (0.48345, 122737.006593) (0.5682, 120190.961974) (0.66264, 92958.4531983) (0.7168, 86425.9662976) (0.74649, 86023.0649802) (0.80038, 77320.3455383) (0.81302, 71716.5060828) (0.86408, 59079.6968758) (0.87785, 56784.2975855) (0.9016, 51493.3587712) (0.91524, 50023.2446918) (0.92533, 44443.0504753) (0.95336, 39641.0074173) (0.97168, 33124.5286178) (0.97446, 29879.1953576) (0.98123, 28174.7270729) (0.98574, 24842.2536463) (0.99058, 21934.2470023) (0.99152, 20741.9378608) (0.99311, 19539.8726134) (0.99453, 18159.8566367) (0.99632, 16204.1967141) (0.99756, 14676.5086158) (0.99827, 13307.764648) (0.99887, 12318.5328792) (0.99933, 10646.1333528) (0.99955, 9463.9791275) (0.9997, 8489.52639608) (0.99984, 7112.06248259) (0.99994, 5466.44673872) (0.99997, 5136.64015582) (1.0, 4076.42163161) }; \addlegendentry{ hnsw(nmslib)-batch }; \end{axis} \end{tikzpicture} \caption{ Recall-Queries per second (1/s) tradeoff - up and to the right is better } \label{} \end{figure}
\begin{figure} \centering \begin{tikzpicture} \begin{axis}[ xlabel={ Recall }, ylabel={ Index size (kB)/Queries per second (s) }, ymode = log, yticklabel style={/pgf/number format/fixed, /pgf/number format/precision=3}, legend style = { anchor=west}, cycle list name = black white ] \addplot coordinates { (0.28338, 0.186718723583) (0.37301, 0.3148125) (0.70343, 0.399825) (0.76362, 0.563925) (0.87695, 0.768016910553) (0.91279, 1.06344375) (0.9574, 1.53047909775) (0.97605, 2.34325625) (0.98584, 2.6279545887) (0.98882, 4.28828125) (0.99363, 4.60578041954) (0.99816, 8.27208125) (0.99891, 16.03309375) (0.99993, 31.3284125) (1.0, 40.84418125) }; \addlegendentry{ faiss-gpu-batch }; \addplot coordinates { (1.0, 23.2473615932) }; \addlegendentry{ faiss-gpu-bf-batch }; \addplot coordinates { (0.32781, 12.2885588245) (0.37311, 14.8616874762) (0.42492, 22.5504861586) (0.6229, 23.5188318314) (0.68356, 33.911031503) (0.76315, 38.4375502637) (0.81975, 57.2069045227) (0.93405, 91.9829371317) (0.96095, 127.351656253) (0.97603, 154.63577286) (0.9807, 233.408637558) (0.98887, 236.844807937) (0.99366, 270.87775525) (0.99603, 445.459086984) (0.9982, 448.769664744) (0.99891, 852.805646055) (0.99964, 862.040130606) (0.99987, 1627.41426214) (0.99994, 1655.50797656) (1.0, 3159.3958982) }; \addlegendentry{ faiss-ivf-batch }; \addplot coordinates { (0.05046, 5.28131019401) (0.10477, 6.32778878212) (0.12575, 7.37683034515) (0.17526, 7.39545486145) (0.23606, 8.32372116699) (0.30827, 10.1687071655) (0.41463, 10.2528700562) (0.48345, 11.7473942051) (0.5682, 12.6715684357) (0.66264, 17.353817157) (0.7168, 17.6221113312) (0.74649, 18.7529240021) (0.80038, 20.8636418884) (0.86408, 27.3052179565) (0.86994, 27.5659718811) (0.9016, 31.3280010956) (0.90993, 33.7034235581) (0.92533, 36.2977784546) (0.93322, 39.832451004) (0.95301, 45.4190689362) (0.95451, 49.0119215286) (0.96191, 49.1250078552) (0.96972, 60.4879390839) (0.98068, 66.517555545) (0.98123, 95.8904763481) (0.98574, 110.464374089) (0.99058, 123.172133501) (0.99152, 132.301235228) (0.99311, 138.265384502) (0.99453, 151.112646696) (0.99632, 169.350202816) (0.99756, 186.977984467) (0.99827, 206.209237434) (0.99887, 222.768736091) (0.99933, 257.763444159) (0.99955, 289.960909997) (0.9997, 323.243473425) (0.99984, 385.849253535) (0.99994, 494.231102786) (0.99997, 534.237150502) (1.0, 673.184534867) }; \addlegendentry{ hnsw(nmslib)-batch }; \end{axis} \end{tikzpicture} \caption{ Recall-Index size (kB)/Queries per second (s) tradeoff - down and to the right is better } \label{} \end{figure}
\begin{figure} \centering \begin{tikzpicture} \begin{axis}[ xlabel={ Recall }, ylabel={ Build time (s) }, ymode = log, yticklabel style={/pgf/number format/fixed, /pgf/number format/precision=3}, legend style = { anchor=west}, cycle list name = black white ] \addplot coordinates { (0.4481, 0.816184997559) (1.0, 0.817345142365) }; \addlegendentry{ faiss-gpu-batch }; \addplot coordinates { (1.0, 0.720603942871) }; \addlegendentry{ faiss-gpu-bf-batch }; \addplot coordinates { (1.0, 0.91362285614) }; \addlegendentry{ faiss-ivf-batch }; \addplot coordinates { (0.72875, 83.5893261433) (0.81651, 83.5893261433) (0.90998, 128.50235796) (0.95445, 128.50235796) (0.96956, 128.50235796) (0.96972, 131.099198103) (0.98068, 167.155642986) (0.98118, 463.150621176) (0.99994, 463.150621176) (0.99997, 573.08553195) (1.0, 573.08553195) }; \addlegendentry{ hnsw(nmslib)-batch }; \end{axis} \end{tikzpicture} \caption{ Recall-Build time (s) tradeoff - down and to the right is better } \label{} \end{figure}
\begin{figure} \centering \begin{tikzpicture} \begin{axis}[ xlabel={ Recall }, ylabel={ Index size (kB) }, ymode = log, yticklabel style={/pgf/number format/fixed, /pgf/number format/precision=3}, legend style = { anchor=west}, cycle list name = black white ] \addplot coordinates { (0.24525, 262144) (0.37301, 262144) (0.99891, 262144) (1.0, 262144) }; \addlegendentry{ faiss-gpu-batch }; \addplot coordinates { (1.0, 568900) }; \addlegendentry{ faiss-gpu-bf-batch }; \addplot coordinates { (1.0, 699672) }; \addlegendentry{ faiss-ivf-batch }; \addplot coordinates { (0.72875, 1441808) (0.81651, 1441808) (0.90993, 1523008) (0.95451, 1523008) (0.96972, 1523008) (0.98068, 1613184) (0.98123, 2701688) (0.99994, 2701688) (0.99997, 2743812) (1.0, 2743812) }; \addlegendentry{ hnsw(nmslib)-batch }; \end{axis} \end{tikzpicture} \caption{ Recall-Index size (kB) tradeoff - down and to the right is better } \label{} \end{figure}
\begin{figure} \centering \begin{tikzpicture} \begin{axis}[ xlabel={ Epsilon 0.01 Recall }, ylabel={ Queries per second (1/s) }, ymode = log, yticklabel style={/pgf/number format/fixed, /pgf/number format/precision=3}, legend style = { anchor=west}, cycle list name = black white ] \addplot coordinates { (0.33386, 1477752.1756) (0.43899, 832698.828668) (0.80709, 655646.845495) (0.86295, 464856.142217) (0.95459, 358794.183062) (0.97357, 246504.810433) (0.9922, 173090.897086) (0.9965, 111871.674299) (0.9985, 101380.747272) (0.99872, 61130.3188195) (0.99946, 59330.6617139) (0.99987, 31690.2109732) (0.99988, 16350.1819479) (1.0, 8367.611988) }; \addlegendentry{ faiss-gpu-batch }; \addplot coordinates { (1.0, 24471.5942374) }; \addlegendentry{ faiss-gpu-bf-batch }; \addplot coordinates { (0.38633, 59623.916072) (0.43921, 48826.2185007) (0.5006, 31545.750056) (0.72169, 30246.5702847) (0.78671, 21606.3023602) (0.80757, 19177.8449304) (0.86201, 18507.0066932) (0.9112, 12807.7546952) (0.9831, 8017.92183418) (0.99281, 5585.82448731) (0.99648, 4769.34920272) (0.99729, 3139.09548363) (0.99874, 3003.50261506) (0.99951, 2722.67465935) (0.99965, 1644.80200631) (0.99986, 1585.14279348) (0.99988, 850.885548608) (0.99998, 849.951149589) (1.0, 438.318637103) }; \addlegendentry{ faiss-ivf-batch }; \addplot coordinates { (0.05693, 273008.012601) (0.12026, 227858.427271) (0.1984, 218131.816125) (0.27334, 182972.010889) (0.35704, 158641.995855) (0.48319, 148544.553053) (0.56425, 122737.006593) (0.66033, 120190.961974) (0.76432, 92958.4531983) (0.81736, 86425.9662976) (0.84814, 86023.0649802) (0.89612, 77320.3455383) (0.90717, 71716.5060828) (0.94533, 59079.6968758) (0.95436, 56784.2975855) (0.96853, 51493.3587712) (0.9755, 50023.2446918) (0.98059, 44443.0504753) (0.99143, 39641.0074173) (0.99149, 35517.7690293) (0.99622, 33124.5286178) (0.99668, 29879.1953576) (0.99821, 28174.7270729) (0.99861, 24842.2536463) (0.99932, 21934.2470023) (0.99938, 20741.9378608) (0.99956, 19539.8726134) (0.99969, 18159.8566367) (0.99981, 16204.1967141) (0.99986, 14676.5086158) (0.99989, 13307.764648) (0.99994, 12318.5328792) (0.99995, 10646.1333528) (0.99997, 9653.89808303) (0.99998, 9463.9791275) (0.99999, 7112.06248259) (1.0, 5136.64015582) }; \addlegendentry{ hnsw(nmslib)-batch }; \end{axis} \end{tikzpicture} \caption{ Epsilon 0.01 Recall-Queries per second (1/s) tradeoff - up and to the right is better } \label{} \end{figure}
\begin{figure} \centering \begin{tikzpicture} \begin{axis}[ xlabel={ Recall }, ylabel={ Queries per second (1/s) }, ymode = log, yticklabel style={/pgf/number format/fixed, /pgf/number format/precision=3}, legend style = { anchor=west}, cycle list name = black white ] \addplot [only marks] coordinates { (0.28338, 1477752.1756) (0.24525, 1230470.26726) (0.22129, 1071697.8818) (0.37301, 832698.828668) (0.70343, 655646.845495) (0.65329, 615415.676263) (0.76362, 464856.142217) (0.4481, 428874.210107) (0.87695, 358794.183062) (0.91279, 246504.810433) (0.9574, 173090.897086) (0.87371, 156406.418389) (0.94506, 143344.531669) (0.97605, 111871.674299) (0.98584, 101380.747272) (0.93436, 65563.0447559) (0.98882, 61130.3188195) (0.99363, 59330.6617139) (0.98683, 39673.1036988) (0.99816, 31690.2109732) (0.99891, 16350.1819479) (0.99728, 15841.8139186) (0.99993, 8367.611988) (1.0, 6418.14799507) (1.0, 3349.62583781) }; \addlegendentry{ faiss-gpu-batch }; \addplot [only marks] coordinates { (1.0, 24471.5942374) }; \addlegendentry{ faiss-gpu-bf-batch }; \addplot [only marks] coordinates { (0.32781, 59623.916072) (0.37311, 48826.2185007) (0.2835, 43604.8650104) (0.24514, 38591.2722328) (0.42492, 31545.750056) (0.6229, 30246.5702847) (0.56142, 27453.1549858) (0.68356, 21606.3023602) (0.70405, 19177.8449304) (0.48661, 18546.5411925) (0.76315, 18507.0066932) (0.7508, 13429.0008254) (0.81975, 12807.7546952) (0.55391, 9264.08025991) (0.93405, 8017.92183418) (0.81235, 7517.09010409) (0.87378, 7498.71857011) (0.96095, 5585.82448731) (0.62587, 4968.63554027) (0.97603, 4769.34920272) (0.87187, 3969.14548996) (0.92028, 3928.577015) (0.9807, 3139.09548363) (0.98887, 3003.50261506) (0.99366, 2722.67465935) (0.69825, 2310.95458538) (0.95744, 2059.89549416) (0.92212, 1991.43564316) (0.99211, 1655.19427352) (0.99603, 1644.80200631) (0.9982, 1585.14279348) (0.96075, 1043.27286147) (0.98207, 1019.5437277) (0.99891, 850.885548608) (0.99964, 849.951149589) (0.99812, 847.845417893) (0.99508, 532.357461086) (0.987, 477.058471847) (0.99994, 438.318637103) (0.99987, 437.11795856) (0.9998, 435.371325153) (0.99959, 243.563677855) (1.0, 225.160765831) (1.0, 225.121279056) (0.99999, 217.875766238) (1.0, 121.733832339) (1.0, 120.474439569) (1.0, 118.761720127) (1.0, 90.2383540698) (1.0, 90.2068682201) (1.0, 90.1323338369) (1.0, 89.7159728439) (1.0, 89.5964033749) (1.0, 89.0485764733) }; \addlegendentry{ faiss-ivf-batch }; \addplot [only marks] coordinates { (0.05046, 273008.012601) (0.10477, 227858.427271) (0.17526, 218131.816125) (0.12575, 206458.320002) (0.23606, 182972.010889) (0.05133, 158952.219258) (0.30827, 158641.995855) (0.21436, 158637.195722) (0.41463, 148544.553053) (0.33898, 135651.948926) (0.48345, 122737.006593) (0.5682, 120190.961974) (0.46866, 117072.669672) (0.10659, 112803.173536) (0.50407, 112209.571098) (0.12532, 105351.964092) (0.56538, 96549.2920462) (0.66264, 92958.4531983) (0.7168, 86425.9662976) (0.74649, 86023.0649802) (0.67785, 83955.2591335) (0.1708, 81784.8632923) (0.21775, 79776.6264199) (0.80038, 77320.3455383) (0.23362, 75515.6259565) (0.66937, 75461.5523011) (0.79349, 72202.6761599) (0.81302, 71716.5060828) (0.72947, 65000.9608411) (0.342, 59100.9250583) (0.86408, 59079.6968758) (0.30659, 57339.1060177) (0.87785, 56784.2975855) (0.77147, 56231.9042652) (0.86994, 55249.566624) (0.41276, 53335.571383) (0.9016, 51493.3587712) (0.91524, 50023.2446918) (0.81607, 47827.0051336) (0.90993, 45188.5250582) (0.92533, 44443.0504753) (0.50499, 41538.7845488) (0.95336, 39641.0074173) (0.48148, 39387.4632237) (0.56733, 39311.7474933) (0.46716, 38364.5834762) (0.93322, 38235.3573935) (0.94779, 37563.2075615) (0.95301, 35517.7690293) (0.97168, 33124.5286178) (0.96191, 32838.3458941) (0.95451, 31074.2356655) (0.56651, 30664.4207374) (0.66044, 30633.5141704) (0.97446, 29879.1953576) (0.98123, 28174.7270729) (0.67382, 26877.3121047) (0.71696, 26447.7351433) (0.96972, 25178.7054257) (0.98574, 24842.2536463) (0.74534, 24524.4794334) (0.98068, 24252.003652) (0.99058, 21934.2470023) (0.67001, 21449.8297537) (0.99152, 20741.9378608) (0.79935, 20647.4276519) (0.79259, 20357.0624277) (0.99311, 19539.8726134) (0.81199, 19506.2586182) (0.99453, 18159.8566367) (0.72875, 16495.823642) (0.99632, 16204.1967141) (0.86343, 15883.2254774) (0.87784, 15407.7052044) (0.99756, 14676.5086158) (0.99742, 14416.4278997) (0.8698, 14173.3600019) (0.7711, 13744.7817691) (0.99827, 13307.764648) (0.90107, 12888.1577047) (0.9158, 12847.4762236) (0.99887, 12318.5328792) (0.81651, 10928.3528252) (0.92483, 10894.777172) (0.90998, 10881.1821597) (0.99933, 10646.1333528) (0.95296, 9685.39078319) (0.99928, 9653.89808303) (0.94773, 9578.95614303) (0.99955, 9463.9791275) (0.93335, 8820.62083921) (0.9997, 8489.52639608) (0.95292, 8332.83301549) (0.9717, 7802.39241143) (0.96159, 7528.45897655) (0.99984, 7112.06248259) (0.97441, 7056.67950259) (0.95445, 6966.17960645) (0.98118, 6485.38289205) (0.98597, 5748.56628621) (0.99994, 5466.44673872) (0.96956, 5399.99348546) (0.98053, 5316.06426319) (0.99997, 5136.64015582) (0.99068, 4849.03248928) (0.99181, 4763.14767413) (0.99323, 4471.76208027) (0.99476, 4122.57044966) (1.0, 4076.42163161) (0.99644, 3683.1016458) (0.9976, 3306.24417074) (0.99751, 3187.73759996) (0.99829, 3006.18617379) (0.99885, 2757.67282958) (0.99932, 2372.69711192) (0.99955, 2087.85488658) (0.9993, 2075.8929875) (0.9997, 1871.84068889) (0.99984, 1558.72764569) (0.99994, 1149.95625877) (0.99997, 1111.87050728) (1.0, 881.284292401) }; \addlegendentry{ hnsw(nmslib)-batch }; \end{axis} \end{tikzpicture} \caption{ Recall-Queries per second (1/s) tradeoff - up and to the right is better } \label{} \end{figure}
\begin{figure} \centering \begin{tikzpicture} \begin{axis}[ xlabel={ Recall }, ylabel={ Index size (kB)/Queries per second (s) }, ymode = log, yticklabel style={/pgf/number format/fixed, /pgf/number format/precision=3}, legend style = { anchor=west}, cycle list name = black white ] \addplot [only marks] coordinates { (0.28338, 0.186718723583) (0.24525, 0.21304375) (0.22129, 0.24460625) (0.37301, 0.3148125) (0.70343, 0.399825) (0.65329, 0.4259625) (0.76362, 0.563925) (0.4481, 0.6112375) (0.87695, 0.768016910553) (0.91279, 1.06344375) (0.9574, 1.53047909775) (0.87371, 1.67604375) (0.97605, 2.34325625) (0.98584, 2.6279545887) (0.93436, 3.99835) (0.94506, 4.10518624706) (0.98882, 4.28828125) (0.99363, 4.60578041954) (0.98683, 6.6076) (0.99816, 8.27208125) (0.99891, 16.03309375) (0.99728, 16.5476) (0.99993, 31.3284125) (1.0, 40.84418125) (1.0, 78.26068125) }; \addlegendentry{ faiss-gpu-batch }; \addplot [only marks] coordinates { (1.0, 23.2473615932) }; \addlegendentry{ faiss-gpu-bf-batch }; \addplot [only marks] coordinates { (0.32781, 12.2885588245) (0.37311, 14.8616874762) (0.2835, 16.3138677262) (0.24514, 19.1108496126) (0.42492, 22.5504861586) (0.6229, 23.5188318314) (0.56142, 26.8643804466) (0.68356, 33.911031503) (0.76315, 38.4375502637) (0.70405, 38.4564586206) (0.48661, 47.0573995949) (0.7508, 54.0352934246) (0.81975, 57.2069045227) (0.55391, 81.1629410481) (0.93405, 91.9829371317) (0.81235, 94.6339594377) (0.87378, 96.7685336122) (0.96095, 127.351656253) (0.97603, 154.63577286) (0.62587, 157.991060853) (0.92028, 181.076251601) (0.87187, 219.884104074) (0.9807, 233.408637558) (0.98887, 236.844807937) (0.99366, 270.87775525) (0.69825, 302.763197697) (0.92212, 377.566808438) (0.95744, 423.687513506) (0.99211, 438.401710064) (0.99603, 445.459086984) (0.9982, 448.769664744) (0.98207, 737.486759591) (0.96075, 752.439777732) (0.99812, 839.035023351) (0.99891, 852.805646055) (0.99964, 862.040130606) (0.987, 1466.63782595) (0.99508, 1474.57311559) (0.99987, 1627.41426214) (0.99994, 1655.50797656) (0.9998, 2004.61525502) (0.99959, 2872.64507648) (1.0, 3159.3958982) (0.99999, 3451.04925153) (1.0, 3876.80810833) (1.0, 6241.15789778) (1.0, 6448.49492467) (1.0, 7348.76523398) (1.0, 7753.59886838) (1.0, 7756.30518835) (1.0, 7762.71921757) (1.0, 8443.70600607) (1.0, 8749.83545422) (1.0, 8761.51240933) }; \addlegendentry{ faiss-ivf-batch }; \addplot [only marks] coordinates { (0.05046, 5.28131019401) (0.10477, 6.32778878212) (0.12575, 7.37683034515) (0.17526, 7.39545486145) (0.23606, 8.32372116699) (0.05133, 9.07070065918) (0.21436, 9.08891507721) (0.30827, 10.1687071655) (0.41463, 10.2528700562) (0.33898, 10.6289663467) (0.48345, 11.7473942051) (0.5682, 12.6715684357) (0.10659, 12.781626215) (0.50407, 14.3765276367) (0.12532, 14.4573289462) (0.56538, 14.9337190304) (0.66264, 17.353817157) (0.7168, 17.6221113312) (0.21775, 18.07306306) (0.74649, 18.7529240021) (0.66937, 19.1069485855) (0.1708, 19.7255572126) (0.23362, 20.1694414991) (0.80038, 20.8636418884) (0.79349, 21.0935117783) (0.72947, 22.1818259506) (0.46866, 23.0770171003) (0.342, 24.3956925983) (0.77147, 25.6409598579) (0.86408, 27.3052179565) (0.86994, 27.5659718811) (0.30659, 28.1352834399) (0.41276, 28.5570766471) (0.81607, 30.1469848671) (0.9016, 31.3280010956) (0.67785, 32.1800924431) (0.90993, 33.7034235581) (0.92533, 36.2977784546) (0.48148, 36.6057593456) (0.81302, 37.6717738714) (0.56733, 38.7443473547) (0.50499, 38.837246143) (0.93322, 39.832451004) (0.95301, 45.4190689362) (0.56651, 47.0189217773) (0.87785, 47.578082584) (0.95451, 49.0119215286) (0.96191, 49.1250078552) (0.66044, 52.6629752964) (0.91524, 54.0086517107) (0.71696, 57.5893546932) (0.96972, 60.4879390839) (0.74534, 65.781294334) (0.98068, 66.517555545) (0.67001, 67.2176896767) (0.95336, 68.1538683304) (0.46716, 70.4275598788) (0.94779, 73.0551030687) (0.79259, 74.8196359573) (0.79935, 78.1333165177) (0.97168, 81.5615531069) (0.72875, 87.4044261925) (0.97446, 91.8426338848) (0.98123, 95.8904763481) (0.67382, 100.528058367) (0.86343, 101.569545953) (0.7711, 104.898573453) (0.8698, 107.462732887) (0.98574, 110.464374089) (0.99058, 123.172133501) (0.90107, 125.1732045) (0.81651, 131.932782832) (0.99152, 132.301235228) (0.99311, 138.265384502) (0.81199, 138.515747837) (0.90998, 139.976335075) (0.92483, 148.075722388) (0.99453, 151.112646696) (0.99632, 169.350202816) (0.93335, 172.675827219) (0.87784, 175.361870191) (0.99756, 186.977984467) (0.99742, 187.403427451) (0.95292, 193.601863496) (0.99827, 206.209237434) (0.9158, 210.307764184) (0.96159, 214.287147612) (0.95445, 218.643228577) (0.99887, 222.768736091) (0.99933, 257.763444159) (0.95296, 278.96902257) (0.99928, 279.854622119) (0.96956, 282.05737731) (0.94773, 286.441649699) (0.99955, 289.960909997) (0.98053, 303.467362344) (0.9997, 323.243473425) (0.9717, 346.294297636) (0.99984, 385.849253535) (0.97441, 388.82480053) (0.98118, 416.617498917) (0.98597, 477.303707288) (0.99994, 494.231102786) (0.99997, 534.237150502) (0.99068, 557.208887746) (0.99181, 576.050164244) (0.99323, 604.219086683) (0.99476, 665.558547392) (1.0, 673.184534867) (0.99644, 744.973194843) (0.9976, 829.887890398) (0.99751, 847.599250338) (0.99829, 912.721914538) (0.99885, 994.973722252) (0.99932, 1156.41056172) (0.9993, 1301.57190966) (0.99955, 1314.17754061) (0.9997, 1465.83628419) (0.99984, 1760.28955898) (0.99994, 2349.58849904) (0.99997, 2467.74420406) (1.0, 3113.4243781) }; \addlegendentry{ hnsw(nmslib)-batch }; \end{axis} \end{tikzpicture} \caption{ Recall-Index size (kB)/Queries per second (s) tradeoff - down and to the right is better } \label{} \end{figure}
\begin{figure} \centering \begin{tikzpicture} \begin{axis}[ xlabel={ Recall }, ylabel={ Build time (s) }, ymode = log, yticklabel style={/pgf/number format/fixed, /pgf/number format/precision=3}, legend style = { anchor=west}, cycle list name = black white ] \addplot [only marks] coordinates { (0.4481, 0.816184997559) (1.0, 0.817345142365) (0.99728, 0.845937013626) (0.93436, 0.855031967163) (1.0, 0.870424985886) (0.98683, 1.25034093857) (0.99993, 1.25458598137) (0.99891, 1.25737094879) (0.37301, 1.28150415421) (0.87371, 1.32337403297) (0.99816, 3.94681096077) (0.76362, 3.96837687492) (0.98882, 3.98454189301) (0.28338, 4.0019698143) (0.94506, 4.44174790382) (0.97605, 6.88540101051) (0.24525, 6.91605401039) (0.70343, 6.92034006119) (0.99363, 6.96019387245) (0.91279, 7.04107093811) (0.22129, 13.1347999573) (0.9574, 13.2619390488) (0.65329, 13.3174798489) (0.98584, 13.3847780228) (0.87695, 13.4086098671) }; \addlegendentry{ faiss-gpu-batch }; \addplot [only marks] coordinates { (1.0, 0.720603942871) }; \addlegendentry{ faiss-gpu-bf-batch }; \addplot [only marks] coordinates { (1.0, 0.91362285614) (0.987, 0.91362285614) (1.0, 0.91362285614) (1.0, 0.91362285614) (0.69825, 0.91362285614) (0.99959, 0.91362285614) (1.0, 2.82172203064) (0.99508, 2.82172203064) (1.0, 2.82172203064) (0.96075, 2.82172203064) (1.0, 2.82172203064) (0.62587, 2.82172203064) (0.55391, 3.22448992729) (0.99999, 3.22448992729) (1.0, 3.22448992729) (1.0, 3.22448992729) (0.92212, 3.22448992729) (0.98207, 3.22448992729) (0.48661, 4.62781000137) (0.9998, 4.62781000137) (1.0, 4.62781000137) (1.0, 4.62781000137) (0.87187, 4.62781000137) (0.95744, 4.62781000137) (0.81235, 6.0947239399) (0.99987, 6.0947239399) (0.42492, 6.0947239399) (1.0, 6.0947239399) (0.99812, 6.0947239399) (0.92028, 6.0947239399) (0.37311, 9.872797966) (0.87378, 9.872797966) (0.99994, 9.872797966) (0.99211, 9.872797966) (0.7508, 9.872797966) (0.99891, 9.872797966) (0.81975, 34.8154289722) (0.99603, 34.8154289722) (0.32781, 34.8154289722) (0.68356, 34.8154289722) (0.99964, 34.8154289722) (0.9807, 34.8154289722) (0.76315, 123.449146032) (0.6229, 123.449146032) (0.2835, 123.449146032) (0.96095, 123.449146032) (0.9982, 123.449146032) (0.98887, 123.449146032) (0.97603, 256.172232866) (0.93405, 256.172232866) (0.99366, 256.172232866) (0.70405, 256.172232866) (0.24514, 256.172232866) (0.56142, 256.172232866) }; \addlegendentry{ faiss-ivf-batch }; \addplot [only marks] coordinates { (0.72875, 83.5893261433) (0.10659, 83.5893261433) (0.48148, 83.5893261433) (0.81651, 83.5893261433) (0.342, 83.5893261433) (0.67001, 83.5893261433) (0.56651, 83.5893261433) (0.7711, 83.5893261433) (0.05133, 83.5893261433) (0.21775, 83.5893261433) (0.72947, 84.2841718197) (0.10477, 84.2841718197) (0.48345, 84.2841718197) (0.81607, 84.2841718197) (0.33898, 84.2841718197) (0.66937, 84.2841718197) (0.56538, 84.2841718197) (0.77147, 84.2841718197) (0.05046, 84.2841718197) (0.21436, 84.2841718197) (0.41276, 128.50235796) (0.90998, 128.50235796) (0.56733, 128.50235796) (0.79259, 128.50235796) (0.95445, 128.50235796) (0.23362, 128.50235796) (0.93335, 128.50235796) (0.96956, 128.50235796) (0.8698, 128.50235796) (0.12532, 128.50235796) (0.71696, 128.50235796) (0.41463, 131.099198103) (0.90993, 131.099198103) (0.5682, 131.099198103) (0.79349, 131.099198103) (0.95451, 131.099198103) (0.23606, 131.099198103) (0.93322, 131.099198103) (0.96972, 131.099198103) (0.86994, 131.099198103) (0.12575, 131.099198103) (0.7168, 131.099198103) (0.74649, 167.155642986) (0.80038, 167.155642986) (0.50407, 167.155642986) (0.95301, 167.155642986) (0.92533, 167.155642986) (0.9016, 167.155642986) (0.98068, 167.155642986) (0.86408, 167.155642986) (0.30827, 167.155642986) (0.96191, 167.155642986) (0.17526, 167.155642986) (0.66264, 167.155642986) (0.74534, 169.090019941) (0.79935, 169.090019941) (0.50499, 169.090019941) (0.95292, 169.090019941) (0.92483, 169.090019941) (0.90107, 169.090019941) (0.98053, 169.090019941) (0.86343, 169.090019941) (0.30659, 169.090019941) (0.96159, 169.090019941) (0.1708, 169.090019941) (0.66044, 169.090019941) (0.98118, 463.150621176) (0.99994, 463.150621176) (0.99751, 463.150621176) (0.9993, 463.150621176) (0.81199, 463.150621176) (0.87784, 463.150621176) (0.95296, 463.150621176) (0.9158, 463.150621176) (0.99068, 463.150621176) (0.9717, 463.150621176) (0.99323, 463.150621176) (0.67382, 463.150621176) (0.46716, 463.150621176) (0.98123, 472.405842066) (0.99994, 472.405842066) (0.99742, 472.405842066) (0.99928, 472.405842066) (0.81302, 472.405842066) (0.87785, 472.405842066) (0.95336, 472.405842066) (0.91524, 472.405842066) (0.99058, 472.405842066) (0.97168, 472.405842066) (0.99311, 472.405842066) (0.67785, 472.405842066) (0.46866, 472.405842066) (0.99476, 573.08553195) (0.99644, 573.08553195) (0.9997, 573.08553195) (0.99997, 573.08553195) (0.94773, 573.08553195) (0.99181, 573.08553195) (1.0, 573.08553195) (0.9976, 573.08553195) (0.99984, 573.08553195) (0.99829, 573.08553195) (0.97441, 573.08553195) (0.98597, 573.08553195) (0.99885, 573.08553195) (0.99932, 573.08553195) (0.99955, 573.08553195) (0.99453, 588.345141888) (0.99632, 588.345141888) (0.9997, 588.345141888) (0.99997, 588.345141888) (0.94779, 588.345141888) (0.99152, 588.345141888) (1.0, 588.345141888) (0.99756, 588.345141888) (0.99984, 588.345141888) (0.99827, 588.345141888) (0.97446, 588.345141888) (0.98574, 588.345141888) (0.99887, 588.345141888) (0.99933, 588.345141888) (0.99955, 588.345141888) }; \addlegendentry{ hnsw(nmslib)-batch }; \end{axis} \end{tikzpicture} \caption{ Recall-Build time (s) tradeoff - down and to the right is better } \label{} \end{figure}
\begin{figure} \centering \begin{tikzpicture} \begin{axis}[ xlabel={ Recall }, ylabel={ Index size (kB) }, ymode = log, yticklabel style={/pgf/number format/fixed, /pgf/number format/precision=3}, legend style = { anchor=west}, cycle list name = black white ] \addplot [only marks] coordinates { (0.24525, 262144) (0.37301, 262144) (0.99891, 262144) (0.76362, 262144) (0.98882, 262144) (0.99816, 262144) (0.99728, 262144) (0.97605, 262144) (0.87371, 262144) (1.0, 262144) (0.65329, 262144) (0.22129, 262144) (0.98683, 262144) (0.4481, 262144) (0.70343, 262144) (0.99993, 262144) (1.0, 262144) (0.91279, 262144) (0.93436, 262144) (0.9574, 264912) (0.98584, 266424) (0.99363, 273264) (0.87695, 275560) (0.28338, 275924) (0.94506, 588456) }; \addlegendentry{ faiss-gpu-batch }; \addplot [only marks] coordinates { (1.0, 568900) }; \addlegendentry{ faiss-gpu-bf-batch }; \addplot [only marks] coordinates { (1.0, 699672) (0.987, 699672) (1.0, 699672) (1.0, 699672) (0.69825, 699672) (0.99959, 699672) (0.76315, 711364) (0.6229, 711364) (0.2835, 711364) (0.96095, 711364) (0.9982, 711364) (0.98887, 711364) (0.81235, 711372) (0.99987, 711372) (0.42492, 711372) (1.0, 711372) (0.99812, 711372) (0.92028, 711372) (0.37311, 725640) (0.87378, 725640) (0.99994, 725640) (0.99211, 725640) (0.7508, 725640) (0.99891, 725640) (0.81975, 732692) (0.99603, 732692) (0.32781, 732692) (0.68356, 732692) (0.99964, 732692) (0.9807, 732692) (0.97603, 737512) (0.93405, 737512) (0.99366, 737512) (0.70405, 737512) (0.24514, 737512) (0.56142, 737512) (0.55391, 751900) (0.99999, 751900) (1.0, 751900) (1.0, 751900) (0.92212, 751900) (0.98207, 751900) (1.0, 785000) (0.99508, 785000) (1.0, 785000) (0.96075, 785000) (1.0, 785000) (0.62587, 785000) (0.48661, 872752) (0.9998, 872752) (1.0, 872752) (1.0, 872752) (0.87187, 872752) (0.95744, 872752) }; \addlegendentry{ faiss-ivf-batch }; \addplot [only marks] coordinates { (0.72875, 1441808) (0.10659, 1441808) (0.48148, 1441808) (0.81651, 1441808) (0.342, 1441808) (0.67001, 1441808) (0.56651, 1441808) (0.7711, 1441808) (0.05133, 1441808) (0.21775, 1441808) (0.72947, 1441840) (0.10477, 1441840) (0.48345, 1441840) (0.81607, 1441840) (0.33898, 1441840) (0.66937, 1441840) (0.56538, 1441840) (0.77147, 1441840) (0.05046, 1441840) (0.21436, 1441840) (0.41463, 1523008) (0.90993, 1523008) (0.5682, 1523008) (0.79349, 1523008) (0.95451, 1523008) (0.23606, 1523008) (0.93322, 1523008) (0.96972, 1523008) (0.86994, 1523008) (0.12575, 1523008) (0.7168, 1523008) (0.41276, 1523108) (0.90998, 1523108) (0.56733, 1523108) (0.79259, 1523108) (0.95445, 1523108) (0.23362, 1523108) (0.93335, 1523108) (0.96956, 1523108) (0.8698, 1523108) (0.12532, 1523108) (0.71696, 1523108) (0.74649, 1613184) (0.80038, 1613184) (0.50407, 1613184) (0.95301, 1613184) (0.92533, 1613184) (0.9016, 1613184) (0.98068, 1613184) (0.86408, 1613184) (0.30827, 1613184) (0.96191, 1613184) (0.17526, 1613184) (0.66264, 1613184) (0.74534, 1613252) (0.79935, 1613252) (0.50499, 1613252) (0.95292, 1613252) (0.92483, 1613252) (0.90107, 1613252) (0.98053, 1613252) (0.86343, 1613252) (0.30659, 1613252) (0.96159, 1613252) (0.1708, 1613252) (0.66044, 1613252) (0.98123, 2701688) (0.99994, 2701688) (0.99742, 2701688) (0.99928, 2701688) (0.81302, 2701688) (0.87785, 2701688) (0.95336, 2701688) (0.91524, 2701688) (0.99058, 2701688) (0.97168, 2701688) (0.99311, 2701688) (0.67785, 2701688) (0.46866, 2701688) (0.98118, 2701924) (0.99994, 2701924) (0.99751, 2701924) (0.9993, 2701924) (0.81199, 2701924) (0.87784, 2701924) (0.95296, 2701924) (0.9158, 2701924) (0.99068, 2701924) (0.9717, 2701924) (0.99323, 2701924) (0.67382, 2701924) (0.46716, 2701924) (0.99476, 2743812) (0.99644, 2743812) (0.9997, 2743812) (0.99997, 2743812) (0.94773, 2743812) (0.99181, 2743812) (1.0, 2743812) (0.9976, 2743812) (0.99984, 2743812) (0.99829, 2743812) (0.97441, 2743812) (0.98597, 2743812) (0.99885, 2743812) (0.99932, 2743812) (0.99955, 2743812) (0.99453, 2744184) (0.99632, 2744184) (0.9997, 2744184) (0.99997, 2744184) (0.94779, 2744184) (0.99152, 2744184) (1.0, 2744184) (0.99756, 2744184) (0.99984, 2744184) (0.99827, 2744184) (0.97446, 2744184) (0.98574, 2744184) (0.99887, 2744184) (0.99933, 2744184) (0.99955, 2744184) }; \addlegendentry{ hnsw(nmslib)-batch }; \end{axis} \end{tikzpicture} \caption{ Recall-Index size (kB) tradeoff - down and to the right is better } \label{} \end{figure}
\begin{figure} \centering \begin{tikzpicture} \begin{axis}[ xlabel={ Epsilon 0.01 Recall }, ylabel={ Queries per second (1/s) }, ymode = log, yticklabel style={/pgf/number format/fixed, /pgf/number format/precision=3}, legend style = { anchor=west}, cycle list name = black white ] \addplot [only marks] coordinates { (0.33386, 1477752.1756) (0.28693, 1230470.26726) (0.25708, 1071697.8818) (0.43899, 832698.828668) (0.80709, 655646.845495) (0.75586, 615415.676263) (0.86295, 464856.142217) (0.52807, 428874.210107) (0.95459, 358794.183062) (0.97357, 246504.810433) (0.9922, 173090.897086) (0.94894, 156406.418389) (0.98765, 143344.531669) (0.9965, 111871.674299) (0.9985, 101380.747272) (0.98053, 65563.0447559) (0.99872, 61130.3188195) (0.99946, 59330.6617139) (0.99856, 39673.1036988) (0.99987, 31690.2109732) (0.99988, 16350.1819479) (0.99982, 15841.8139186) (1.0, 8367.611988) (1.0, 6418.14799507) (1.0, 3349.62583781) }; \addlegendentry{ faiss-gpu-batch }; \addplot [only marks] coordinates { (1.0, 24471.5942374) }; \addlegendentry{ faiss-gpu-bf-batch }; \addplot [only marks] coordinates { (0.38633, 59623.916072) (0.43921, 48826.2185007) (0.334, 43604.8650104) (0.2867, 38591.2722328) (0.5006, 31545.750056) (0.72169, 30246.5702847) (0.65479, 27453.1549858) (0.78671, 21606.3023602) (0.80757, 19177.8449304) (0.5709, 18546.5411925) (0.86201, 18507.0066932) (0.85034, 13429.0008254) (0.9112, 12807.7546952) (0.6437, 9264.08025991) (0.9831, 8017.92183418) (0.90306, 7517.09010409) (0.9491, 7498.71857011) (0.99281, 5585.82448731) (0.71433, 4968.63554027) (0.99648, 4769.34920272) (0.94469, 3969.14548996) (0.97485, 3928.577015) (0.99729, 3139.09548363) (0.99874, 3003.50261506) (0.99951, 2722.67465935) (0.783, 2310.95458538) (0.98954, 2059.89549416) (0.97276, 1991.43564316) (0.99932, 1655.19427352) (0.99965, 1644.80200631) (0.99986, 1585.14279348) (0.98912, 1043.27286147) (0.9971, 1019.5437277) (0.99988, 850.885548608) (0.99998, 849.951149589) (0.99987, 847.845417893) (0.99929, 532.357461086) (0.99722, 477.058471847) (1.0, 438.318637103) (1.0, 437.11795856) (0.99999, 435.371325153) (0.99999, 243.563677855) (1.0, 225.160765831) (1.0, 225.121279056) (1.0, 217.875766238) (1.0, 121.733832339) (1.0, 120.474439569) (1.0, 118.761720127) (1.0, 90.2383540698) (1.0, 90.2068682201) (1.0, 90.1323338369) (1.0, 89.7159728439) (1.0, 89.5964033749) (1.0, 89.0485764733) }; \addlegendentry{ faiss-ivf-batch }; \addplot [only marks] coordinates { (0.05693, 273008.012601) (0.12026, 227858.427271) (0.1984, 218131.816125) (0.14291, 206458.320002) (0.27334, 182972.010889) (0.05813, 158952.219258) (0.35704, 158641.995855) (0.24769, 158637.195722) (0.48319, 148544.553053) (0.39407, 135651.948926) (0.56425, 122737.006593) (0.66033, 120190.961974) (0.54536, 117072.669672) (0.123, 112803.173536) (0.58722, 112209.571098) (0.14236, 105351.964092) (0.65705, 96549.2920462) (0.76432, 92958.4531983) (0.81736, 86425.9662976) (0.84814, 86023.0649802) (0.78056, 83955.2591335) (0.19504, 81784.8632923) (0.25261, 79776.6264199) (0.89612, 77320.3455383) (0.27112, 75515.6259565) (0.76953, 75461.5523011) (0.88924, 72202.6761599) (0.90717, 71716.5060828) (0.82953, 65000.9608411) (0.39871, 59100.9250583) (0.94533, 59079.6968758) (0.3565, 57339.1060177) (0.95436, 56784.2975855) (0.86918, 56231.9042652) (0.94815, 55249.566624) (0.48006, 53335.571383) (0.96853, 51493.3587712) (0.9755, 50023.2446918) (0.90713, 47827.0051336) (0.97188, 45188.5250582) (0.98059, 44443.0504753) (0.58864, 41538.7845488) (0.99143, 39641.0074173) (0.56232, 39387.4632237) (0.65809, 39311.7474933) (0.54411, 38364.5834762) (0.98347, 38235.3573935) (0.98956, 37563.2075615) (0.99149, 35517.7690293) (0.99622, 33124.5286178) (0.99425, 32838.3458941) (0.99132, 31074.2356655) (0.65833, 30664.4207374) (0.76198, 30633.5141704) (0.99668, 29879.1953576) (0.99821, 28174.7270729) (0.77697, 26877.3121047) (0.81729, 26447.7351433) (0.9956, 25178.7054257) (0.99861, 24842.2536463) (0.84672, 24524.4794334) (0.99811, 24252.003652) (0.99932, 21934.2470023) (0.7697, 21449.8297537) (0.99938, 20741.9378608) (0.89508, 20647.4276519) (0.88855, 20357.0624277) (0.99956, 19539.8726134) (0.90714, 19506.2586182) (0.99969, 18159.8566367) (0.82874, 16495.823642) (0.99981, 16204.1967141) (0.94503, 15883.2254774) (0.95465, 15407.7052044) (0.99986, 14676.5086158) (0.99986, 14416.4278997) (0.94811, 14173.3600019) (0.86877, 13744.7817691) (0.99989, 13307.764648) (0.96794, 12888.1577047) (0.97596, 12847.4762236) (0.99994, 12318.5328792) (0.90775, 10928.3528252) (0.98014, 10894.777172) (0.97233, 10881.1821597) (0.99995, 10646.1333528) (0.99141, 9685.39078319) (0.99997, 9653.89808303) (0.98996, 9578.95614303) (0.99998, 9463.9791275) (0.98374, 8820.62083921) (0.99998, 8489.52639608) (0.99181, 8332.83301549) (0.99637, 7802.39241143) (0.99427, 7528.45897655) (0.99999, 7112.06248259) (0.99686, 7056.67950259) (0.99144, 6966.17960645) (0.99821, 6485.38289205) (0.99873, 5748.56628621) (0.99998, 5466.44673872) (0.99558, 5399.99348546) (0.99817, 5316.06426319) (1.0, 5136.64015582) (0.9993, 4849.03248928) (0.99941, 4763.14767413) (0.99955, 4471.76208027) (0.99971, 4122.57044966) (1.0, 4076.42163161) (0.99983, 3683.1016458) (0.99987, 3306.24417074) (0.99987, 3187.73759996) (0.9999, 3006.18617379) (0.99994, 2757.67282958) (0.99995, 2372.69711192) (0.99998, 2087.85488658) (0.99997, 2075.8929875) (0.99998, 1871.84068889) (0.99999, 1558.72764569) (0.99998, 1149.95625877) (1.0, 1111.87050728) (1.0, 881.284292401) }; \addlegendentry{ hnsw(nmslib)-batch }; \end{axis} \end{tikzpicture} \caption{ Epsilon 0.01 Recall-Queries per second (1/s) tradeoff - up and to the right is better } \label{} \end{figure}
ANN-Benchmarks has been developed by Martin Aumueller ([email protected]), Erik Bernhardsson ([email protected]), and Alec Faitfull ([email protected]). Please use Github to submit your implementation or improvements.