All Projects → cgtuebingen → Ggnn

cgtuebingen / Ggnn

Licence: mit
GGNN: State of the Art Graph-based GPU Nearest Neighbor Search

Projects that are alternatives of or similar to Ggnn

lbvh
an implementation of parallel linear BVH (LBVH) on GPU
Stars: ✭ 67 (+6.35%)
Mutual labels:  gpu, cuda, nearest-neighbor-search
Wheels
Performance-optimized wheels for TensorFlow (SSE, AVX, FMA, XLA, MPI)
Stars: ✭ 891 (+1314.29%)
Mutual labels:  gpu, cuda
Optix Path Tracer
OptiX Path Tracer
Stars: ✭ 60 (-4.76%)
Mutual labels:  gpu, cuda
Graphvite
GraphVite: A General and High-performance Graph Embedding System
Stars: ✭ 865 (+1273.02%)
Mutual labels:  gpu, cuda
Marian
Fast Neural Machine Translation in C++
Stars: ✭ 777 (+1133.33%)
Mutual labels:  gpu, cuda
Pyopencl
OpenCL integration for Python, plus shiny features
Stars: ✭ 790 (+1153.97%)
Mutual labels:  gpu, cuda
Heteroflow
Concurrent CPU-GPU Programming using Task Models
Stars: ✭ 57 (-9.52%)
Mutual labels:  gpu, cuda
Thundergbm
ThunderGBM: Fast GBDTs and Random Forests on GPUs
Stars: ✭ 586 (+830.16%)
Mutual labels:  gpu, cuda
Cuda
Experiments with CUDA and Rust
Stars: ✭ 31 (-50.79%)
Mutual labels:  gpu, cuda
Nvidia libs test
Tests and benchmarks for cudnn (and in the future, other nvidia libraries)
Stars: ✭ 36 (-42.86%)
Mutual labels:  gpu, cuda
Pycuda
CUDA integration for Python, plus shiny features
Stars: ✭ 1,112 (+1665.08%)
Mutual labels:  gpu, cuda
Gunrock
High-Performance Graph Primitives on GPUs
Stars: ✭ 718 (+1039.68%)
Mutual labels:  gpu, cuda
Chainer
A flexible framework of neural networks for deep learning
Stars: ✭ 5,656 (+8877.78%)
Mutual labels:  gpu, cuda
Scikit Cuda
Python interface to GPU-powered libraries
Stars: ✭ 803 (+1174.6%)
Mutual labels:  gpu, cuda
Speedtorch
Library for faster pinned CPU <-> GPU transfer in Pytorch
Stars: ✭ 615 (+876.19%)
Mutual labels:  gpu, cuda
Neanderthal
Fast Clojure Matrix Library
Stars: ✭ 927 (+1371.43%)
Mutual labels:  gpu, cuda
Carlsim3
CARLsim is an efficient, easy-to-use, GPU-accelerated software framework for simulating large-scale spiking neural network (SNN) models with a high degree of biological detail.
Stars: ✭ 52 (-17.46%)
Mutual labels:  gpu, cuda
Cupy
NumPy & SciPy for GPU
Stars: ✭ 5,625 (+8828.57%)
Mutual labels:  gpu, cuda
Cudasift
A CUDA implementation of SIFT for NVidia GPUs (1.2 ms on a GTX 1060)
Stars: ✭ 555 (+780.95%)
Mutual labels:  gpu, cuda
Cub
Cooperative primitives for CUDA C++.
Stars: ✭ 883 (+1301.59%)
Mutual labels:  gpu, cuda

GGNN: Graph-based GPU Nearest Neighbor Search

*Fabian Groh, Lukas Ruppert, Patrick Wieschollek, Hendrik P.A. Lensch

Approximate nearest neighbor (ANN) search in high dimensions is an integral part of several computer vision systems and gains importance in deep learning with explicit memory representations. Since PQT and FAISS started to leverage the massive parallelism offered by GPUs, GPU-based implementations are a crucial resource for today’s state-of-the-art ANN methods. While most of these methods allow for faster queries, less emphasis is devoted to accelerate the construction of the underlying index structures. In this paper, we propose a novel search structure based on nearest neighbor graphs and information propagation on graphs. Our method is designed to take advantage of GPU architectures to accelerate the hierarchical building of the index structure and for performing the query. Empirical evaluation shows that GGNN significantly surpasses the state-of-the-art GPU- and CPU-based systems in terms of build-time, accuracy and search speed.


Update: 03/14/21

This work is currently under review. We've updated the code. Some new results are shown below. GGNN Plots

How to run the code?

# Get the repository and dependencies
git clone --recursive https://github.com/cgtuebingen/ggnn.git
cd ggnn

# get the SIFT1M data
cd data
./get_sift1m
cd ..

# Build the demo
mkdir build_local
cd build_local
cmake ..
make

# Example for SIFT1M on GPU 0:
./sift1m_multi  --base_filename ../data/sift/sift_base.fvecs 
                --query_filename ../data/sift/sift_query.fvecs 
                --groundtruth_filename ../data/sift/sift_groundtruth.ivecs 
                --gpu_ids="0"

# Example usage with 2 GPUs and 4 shards in total (4x250k = 1M):
./sift1m_multi  --base_filename ../data/sift/sift_base.fvecs 
                --query_filename ../data/sift/sift_query.fvecs 
                --groundtruth_filename ../data/sift/sift_groundtruth.ivecs 
                --gpu_ids="0 1" 
                --factor 10000 
                --base 100 
                --shard 25

Native build

Requirements:

  • CUDA (>10.2)
  • libgflags-dev (sudo apt install libgflags-dev)

Docker build

An alternative to the native build is to use nvidia-docker. Follow instruction on https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html#installing-docker-ce

Prepare the docker image by

cd docker
make
cd ../

Make sure you can run

sudo docker run --gpus all cgtuebingen/ggnn:v1 nvidia-smi

Now build the code via

[email protected] $ sudo docker run --rm -it --user "$(id -u):$(id -g)" -v ${PWD}:/ggnn:rw --gpus all cgtuebingen/ggnn:v1 bash
[email protected] $ ./build.sh

cd build_docker
make

More Resources

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].