{"author":"maximente","children":[{"author":"bobosha","children":[{"author":"IfOnlyYouKnew","children":[],"created_at":"2020-01-10T21:20:08.000Z","created_at_i":1578691208,"id":22015657,"options":[],"parent_id":22013603,"points":null,"story_id":22012300,"text":"Yes on online learning, as I gather from the comparison at <a href=\"https:&#x2F;&#x2F;milvus.io&#x2F;docs&#x2F;v0.6.0&#x2F;about_milvus&#x2F;vector_db.md\" rel=\"nofollow\">https:&#x2F;&#x2F;milvus.io&#x2F;docs&#x2F;v0.6.0&#x2F;about_milvus&#x2F;vector_db.md</a>","title":null,"type":"comment","url":null},{"author":"gujun720","children":[{"author":"ffast-math","children":[{"author":"gujun720","children":[],"created_at":"2020-01-12T22:34:30.000Z","created_at_i":1578868470,"id":22030075,"options":[],"parent_id":22023110,"points":null,"story_id":22012300,"text":"200 GB is the size of original vectors. When creating index, Milvus supports IVF SQ8 and IVF PQ ADC.<p>Based on our users experience, SQ8 is the most balanced one at this moment. SQ8 provides 8x compression, higher accuracy and better performance.","title":null,"type":"comment","url":null}],"created_at":"2020-01-11T23:17:08.000Z","created_at_i":1578784628,"id":22023110,"options":[],"parent_id":22017554,"points":null,"story_id":22012300,"text":"&gt; &quot;As each vector takes 2 KB space, the minimum storage space for 100 million vectors is about 200 GB&quot;<p>Why are you not quantizing the vectors when you insert them? Bolt [1] and Quicker-ADC [2] make 10-100x compression basically free for approximate search (and also get you ~100x compression roughly 10x faster querying within a partition....)<p>[1] <a href=\"https:&#x2F;&#x2F;github.com&#x2F;dblalock&#x2F;bolt\" rel=\"nofollow\">https:&#x2F;&#x2F;github.com&#x2F;dblalock&#x2F;bolt</a><p>[2] <a href=\"https:&#x2F;&#x2F;github.com&#x2F;technicolor-research&#x2F;faiss-quickeradc\" rel=\"nofollow\">https:&#x2F;&#x2F;github.com&#x2F;technicolor-research&#x2F;faiss-quickeradc</a>","title":null,"type":"comment","url":null}],"created_at":"2020-01-11T02:05:39.000Z","created_at_i":1578708339,"id":22017554,"options":[],"parent_id":22013603,"points":null,"story_id":22012300,"text":"Please check \n<a href=\"https:&#x2F;&#x2F;medium.com&#x2F;@milvusio&#x2F;managing-data-in-massive-scale-vector-search-engine-db2e8941ce2f\" rel=\"nofollow\">https:&#x2F;&#x2F;medium.com&#x2F;@milvusio&#x2F;managing-data-in-massive-scale-...</a><p>It explains how Milvus managing vectors.","title":null,"type":"comment","url":null}],"created_at":"2020-01-10T18:32:49.000Z","created_at_i":1578681169,"id":22013603,"options":[],"parent_id":22012300,"points":null,"story_id":22012300,"text":"Great to see another ANN tool available. FAISS and SPTAG were good, but this appears to be much better. Not sure if this supports &quot;online&quot; learning i.e. is a training phase required?","title":null,"type":"comment","url":null},{"author":"tlack","children":[],"created_at":"2020-01-10T19:30:53.000Z","created_at_i":1578684653,"id":22014443,"options":[],"parent_id":22012300,"points":null,"story_id":22012300,"text":"Another option in this very interesting space is GNES[1], which attempts to do the encoding&#x2F;decoding on its own, rather than just working with feature&#x2F;embedding vectors.<p>[1] <a href=\"https:&#x2F;&#x2F;gnes.ai&#x2F;\" rel=\"nofollow\">https:&#x2F;&#x2F;gnes.ai&#x2F;</a>","title":null,"type":"comment","url":null},{"author":"bra-ket","children":[{"author":"gujun720","children":[{"author":"rainmanwy","children":[],"created_at":"2020-01-11T03:12:10.000Z","created_at_i":1578712330,"id":22017847,"options":[],"parent_id":22017503,"points":null,"story_id":22012300,"text":"Cool stuff! Very easy to use and good examples to getting start.","title":null,"type":"comment","url":null}],"created_at":"2020-01-11T01:54:39.000Z","created_at_i":1578707679,"id":22017503,"options":[],"parent_id":22015809,"points":null,"story_id":22012300,"text":"We have some test reports in <a href=\"https:&#x2F;&#x2F;github.com&#x2F;milvus-io&#x2F;milvus&#x2F;tree&#x2F;master&#x2F;tests\" rel=\"nofollow\">https:&#x2F;&#x2F;github.com&#x2F;milvus-io&#x2F;milvus&#x2F;tree&#x2F;master&#x2F;tests</a><p>At this moment, the IVF indecies are based on FAISS. So the performance is the same as Faiss.<p>IVF_SQ8H is the reconstruction from Faiss IVF SQ8. Performance is much better, but you need GPU for it.<p>We provide benchmark test procedures and tools.<p>Please check this:\n<a href=\"https:&#x2F;&#x2F;github.com&#x2F;milvus-io&#x2F;bootcamp&#x2F;tree&#x2F;master&#x2F;EN_benchmark_test\" rel=\"nofollow\">https:&#x2F;&#x2F;github.com&#x2F;milvus-io&#x2F;bootcamp&#x2F;tree&#x2F;master&#x2F;EN_benchma...</a>","title":null,"type":"comment","url":null},{"author":"ffast-math","children":[{"author":"gujun720","children":[],"created_at":"2020-01-12T22:56:42.000Z","created_at_i":1578869802,"id":22030249,"options":[],"parent_id":22023248,"points":null,"story_id":22012300,"text":"Good points. I want to add one more.<p>I think the Ann benchmark should pay more attention on<p>1. The index building speed, as this is very important in some production scenarios. Now it only says I will give 5 hours to build the index on that 1 million vectors.<p>2. The memory footprint, as 1m vectors are not that many. We will have to deal with billion s of vectors for chemical molecules, images and word vectors. The memory consumption will definitely impact how many servers you need.","title":null,"type":"comment","url":null}],"created_at":"2020-01-11T23:39:23.000Z","created_at_i":1578785963,"id":22023248,"options":[],"parent_id":22015809,"points":null,"story_id":22012300,"text":"I&#x27;m a big fan of ann-benchmarks and will be the first to tell you that the research community needs way more benchmarks like this. But I do want to add a couple caveats about it for people looking into this area:<p>1) Most of these datasets have <i>extremely</i> correlated dimensions. If you plot the covariance matrices, you&#x27;ll see dense blobs of entries close to 1 all over the place. This makes the ANN task much easier than it would be with, say, high-quality DNN features. As an example, I&#x27;ve compressed MNIST digits down to 1 byte representations with vector quantization and still gotten nearly perfect retrieval accuracy.<p>2) 1M vectors is not that many. You can get easily get 1k queries per second in a single thread at a decent precision&#x2F;recall just brute-force scanning through them with a SIMD approximate distance function like Bolt or Quicker ADC [1]. Also worth noting that the FAISS paper (along with a lot of other work since then) focuses mostly on 100M to billions of vectors.<p>3) Related to (2), I think most of these methods aren&#x27;t incorporating state-of-the-art approximate distance functions yet (though I haven&#x27;t dug into all of their source code). AFAICT FAISS+Quicker ADC [2] is the actual leader on x86 CPUS. Can&#x27;t comment on the production-readiness of their code though.<p>[1] The latter is a bit faster for ANN search, though the code is more complex IIRC.<p>[2] <a href=\"https:&#x2F;&#x2F;github.com&#x2F;technicolor-research&#x2F;faiss-quickeradc\" rel=\"nofollow\">https:&#x2F;&#x2F;github.com&#x2F;technicolor-research&#x2F;faiss-quickeradc</a>","title":null,"type":"comment","url":null}],"created_at":"2020-01-10T21:34:47.000Z","created_at_i":1578692087,"id":22015809,"options":[],"parent_id":22012300,"points":null,"story_id":22012300,"text":"how does it compare to state-of-the art? (<a href=\"https:&#x2F;&#x2F;github.com&#x2F;erikbern&#x2F;ann-benchmarks\" rel=\"nofollow\">https:&#x2F;&#x2F;github.com&#x2F;erikbern&#x2F;ann-benchmarks</a>)","title":null,"type":"comment","url":null},{"author":"peter_l_downs","children":[{"author":"gujun720","children":[{"author":"peter_l_downs","children":[{"author":"gujun720","children":[],"created_at":"2020-01-11T09:03:37.000Z","created_at_i":1578733417,"id":22018985,"options":[],"parent_id":22017976,"points":null,"story_id":22012300,"text":"Correct, new vectors will first be searched thru brute force until the index is created on that file slice.","title":null,"type":"comment","url":null}],"created_at":"2020-01-11T03:42:58.000Z","created_at_i":1578714178,"id":22017976,"options":[],"parent_id":22017449,"points":null,"story_id":22012300,"text":"If I append a single new vector, will it show up in search results without me needing to ask for the index to be rebuilt? Can i update an existing vector without having to ask for the index to be rebuilt?<p>EDIT: from reading the linked article, it seems like newly inserted vectors will be queried using brute force. Very interesting idea!","title":null,"type":"comment","url":null}],"created_at":"2020-01-11T01:42:56.000Z","created_at_i":1578706976,"id":22017449,"options":[],"parent_id":22015940,"points":null,"story_id":22012300,"text":"Milvus allows users to append vectors. Vectors are stored in multiple file slices. When a file slice reaches the threshold, Milvus will build the index for that file slice, and new data will be inserted into a new file slice. For details, please refer\n<a href=\"https:&#x2F;&#x2F;medium.com&#x2F;@milvusio&#x2F;managing-data-in-massive-scale-vector-search-engine-db2e8941ce2f\" rel=\"nofollow\">https:&#x2F;&#x2F;medium.com&#x2F;@milvusio&#x2F;managing-data-in-massive-scale-...</a><p>We are now working on the vector deletion. Hopefully will be ready by the end of 1Q this year.","title":null,"type":"comment","url":null},{"author":"pilooch","children":[],"created_at":"2020-01-11T04:54:22.000Z","created_at_i":1578718462,"id":22018228,"options":[],"parent_id":22015940,"points":null,"story_id":22012300,"text":"See <a href=\"https:&#x2F;&#x2F;github.com&#x2F;jolibrain&#x2F;deepdetect&#x2F;pull&#x2F;641\" rel=\"nofollow\">https:&#x2F;&#x2F;github.com&#x2F;jolibrain&#x2F;deepdetect&#x2F;pull&#x2F;641</a> that uses FAISS as a backend alternative to annoy (annoy supported as well). Deletion can be implemented by removing entries from the listing db while the vector remains within the index.<p>Tests show that FAISS is bit better than annoy on retrieval of both small and million items indexes. It also includes ind x compression techniques that in our tests do fair very well, with very low loss on mid size 500k image indexes.","title":null,"type":"comment","url":null}],"created_at":"2020-01-10T21:47:14.000Z","created_at_i":1578692834,"id":22015940,"options":[],"parent_id":22012300,"points":null,"story_id":22012300,"text":"I&#x27;d be curious how they implement updating. AFAICT this is the thorniest part of working with existing open source solutions. When working with ANNOY in the past I&#x27;ve had data small enough to be able to recompute the full index in the background every few seconds in a background process and then swap in the built index to the process serving similarity queries.<p>(you can see the VERY &quot;research quality&quot; code on Github, here&#x27;s a decent starting place  <a href=\"https:&#x2F;&#x2F;github.com&#x2F;hyperstudio&#x2F;spectacles&#x2F;blob&#x2F;master&#x2F;spectacles&#x2F;nndb&#x2F;server.py#L51\" rel=\"nofollow\">https:&#x2F;&#x2F;github.com&#x2F;hyperstudio&#x2F;spectacles&#x2F;blob&#x2F;master&#x2F;specta...</a>)<p>EDIT: from the insertion docs <a href=\"https:&#x2F;&#x2F;milvus.io&#x2F;docs&#x2F;guides&#x2F;milvus_operation.md#Insert-vectors-into-a-table\" rel=\"nofollow\">https:&#x2F;&#x2F;milvus.io&#x2F;docs&#x2F;guides&#x2F;milvus_operation.md#Insert-vec...</a> it seems that they still ask you to re-build your indices after you insert vectors, although in some cases they can tell that they need to re-build the indices for you. Looks like the major value adds here are potentially shifting computation to the GPU and building multiple indices. I&#x27;ll certainly evaluate this next time I&#x27;m building a project around vector search.","title":null,"type":"comment","url":null},{"author":"gravypod","children":[{"author":"gujun720","children":[],"created_at":"2020-01-11T01:44:33.000Z","created_at_i":1578707073,"id":22017455,"options":[],"parent_id":22016994,"points":null,"story_id":22012300,"text":"You may check our Medium site.  We will post more tech details.<p><a href=\"https:&#x2F;&#x2F;medium.com&#x2F;@milvusio\" rel=\"nofollow\">https:&#x2F;&#x2F;medium.com&#x2F;@milvusio</a>","title":null,"type":"comment","url":null}],"created_at":"2020-01-11T00:16:43.000Z","created_at_i":1578701803,"id":22016994,"options":[],"parent_id":22012300,"points":null,"story_id":22012300,"text":"There&#x27;s not a lot of information on the site about the architecture or storage solutions used. Do the authors have more info about this space?","title":null,"type":"comment","url":null},{"author":"setib","children":[{"author":"gujun720","children":[],"created_at":"2020-01-11T02:03:52.000Z","created_at_i":1578708232,"id":22017546,"options":[],"parent_id":22017506,"points":null,"story_id":22012300,"text":"We are working on this feature which allows use to perform hyper search (attributes plus feature vectors). And you can code your scoring rules.<p>Again, hopefully be ready by the end of 1Q this year.","title":null,"type":"comment","url":null},{"author":"rainmanwy","children":[],"created_at":"2020-01-11T03:15:04.000Z","created_at_i":1578712504,"id":22017860,"options":[],"parent_id":22017506,"points":null,"story_id":22012300,"text":"I think could also try the partition feature.","title":null,"type":"comment","url":null},{"author":"rainmanwy","children":[],"created_at":"2020-01-11T03:17:15.000Z","created_at_i":1578712635,"id":22017873,"options":[],"parent_id":22017506,"points":null,"story_id":22012300,"text":"check this out: <a href=\"https:&#x2F;&#x2F;github.com&#x2F;milvus-io&#x2F;bootcamp&#x2F;blob&#x2F;master&#x2F;EN_solutions&#x2F;partition_hybrid_search&#x2F;README.md\" rel=\"nofollow\">https:&#x2F;&#x2F;github.com&#x2F;milvus-io&#x2F;bootcamp&#x2F;blob&#x2F;master&#x2F;EN_solutio...</a>","title":null,"type":"comment","url":null}],"created_at":"2020-01-11T01:55:58.000Z","created_at_i":1578707758,"id":22017506,"options":[],"parent_id":22012300,"points":null,"story_id":22012300,"text":"Does anyone know how to combine vector similarity search with more conventional field-based search (using elasticsearch for example)?\nFor example, given a set of labeled images, a user should be able to compose a query using a combination of filters (like size or description) along with a reference image (the vector).","title":null,"type":"comment","url":null},{"author":"kateshao0510","children":[{"author":"gujun720","children":[],"created_at":"2020-01-12T22:46:01.000Z","created_at_i":1578869161,"id":22030161,"options":[],"parent_id":22017721,"points":null,"story_id":22012300,"text":"It&#x27;s not about the ML platform.<p>It&#x27;s about the ML scenarios. If you want to search thru a huge amount of unstructured data after vectorization tech (like deep learning), Milvus will help you a lot.<p>Our users use Milvus in below scenarios:\n1. Chemical molecules analysis, searching SMILE format vectors\n2. Image retrieval type application, for example shopping website\n3. NLP\n4. Recommendation system\n5. and more, we are collecting users&#x27; feedback","title":null,"type":"comment","url":null}],"created_at":"2020-01-11T02:39:30.000Z","created_at_i":1578710370,"id":22017721,"options":[],"parent_id":22012300,"points":null,"story_id":22012300,"text":"any recommendation on the machine learning platforms to use?","title":null,"type":"comment","url":null},{"author":"azinman2","children":[{"author":"gujun720","children":[],"created_at":"2020-01-11T13:45:51.000Z","created_at_i":1578750351,"id":22019821,"options":[],"parent_id":22018981,"points":null,"story_id":22012300,"text":"Milvus could run on arm CPU. We ported it to Nvidia Jetson NANO and Raspberry PI 4 (4GB mem) so far.<p>Most people told us running Milvus on arm looked cool but they were not sure if they want to do this...<p>Please tell us your requirements and scenarios on arm. It will really help.","title":null,"type":"comment","url":null}],"created_at":"2020-01-11T09:01:34.000Z","created_at_i":1578733294,"id":22018981,"options":[],"parent_id":22012300,"points":null,"story_id":22012300,"text":"What are good answers to this in the embedded space... eg mobile?","title":null,"type":"comment","url":null}],"created_at":"2020-01-10T16:50:53.000Z","created_at_i":1578675053,"id":22012300,"options":[],"parent_id":null,"points":152,"story_id":22012300,"text":null,"title":"Milvus \u2013 An Open-Source Vector Similarity Search Engine","type":"story","url":"https://milvus.io/"}
