GithubHelp home page GithubHelp logo

adamnemecek / granne Goto Github PK

View Code? Open in Web Editor NEW

This project forked from granne/granne

0.0 2.0 0.0 561 KB

Graph-based Approximate Nearest Neighbor Search

License: MIT License

Dockerfile 0.51% Rust 99.20% Shell 0.14% Python 0.15%

granne's Introduction

granne*


granne (graph-based retrieval of approximate nearest neighbors) is a Rust library for ANN-search based on Hierarchical Navigable Small World (HNSW) graphs and is used in Cliqz Search. For some background and motivation behind granne, please read Indexing Billions of Text Vectors.

Note: granne is still under active development. A more stable release (with documentation) is coming soon.

Features

  • Memory-mapped
  • Multithreaded index creation
  • Extensible indexes (add elements to an already built index)
  • Python bindings
  • Dense float or int8 elements (cosine distance)

Installation

Requirements

granne is dependent on BLAS (https://en.wikipedia.org/wiki/Basic_Linear_Algebra_Subprograms) for some computations. This applies both to the rust and python versions. On Debian/Ubuntu both libblas-dev and libopenblas-dev should work, with the latter being significantly faster.

On Mac OS there seems to be some issue (maybe this one) with the default BLAS library. A workaround is to install e.g. openblas and link to that instead.

Rust

# build
cargo build --release

# test
cargo test

# bench
cargo +nightly bench

Python

To quickly install:

pip install setuptools_rust
pip install .

To build python wheels for python 2.7, 3.4, 3.5 and 3.6 (requires docker).

docker build -t granne_manylinux docker/manylinux/
docker run -v $(pwd):/granne/ granne_manylinux /opt/build_wheels.sh

The output is written to wheels/ and can be installed by

pip install granne --no-index -f wheels/

Index Creation

...

Search

...

*granne is Swedish and means neighbor

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.