*Fabian Groh, Lukas Ruppert, Patrick Wieschollek, Hendrik Pa Lensch
La búsqueda aproximada del vecino más cercano (ANN) en altas dimensiones es una parte integral de varios sistemas de visión por computadora y gana importancia en el aprendizaje profundo con representaciones de memoria explícitas. Desde que PQT y FAISS comenzaron a aprovechar el paralelismo masivo que ofrece las GPU, las implementaciones basadas en GPU son un recurso crucial para los métodos ANN de última generación. Si bien la mayoría de estos métodos permiten consultas más rápidas, se dedica menos énfasis para acelerar la construcción de las estructuras del índice subyacente. En este artículo, proponemos una nueva estructura de búsqueda basada en gráficos vecinos más cercanos y propagación de información en gráficos. Nuestro método está diseñado para aprovechar las arquitecturas de GPU para acelerar el edificio jerárquico de la estructura del índice y para realizar la consulta. La evaluación empírica muestra que GGNN supera significativamente los sistemas basados en GPU y CPU de última generación en términos de tiempo de compilación, precisión y velocidad de búsqueda.
Este trabajo está actualmente bajo revisión. Hemos actualizado el código. Algunos resultados nuevos se muestran a continuación. 
# 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 25Requisitos:
sudo apt install libgflags-dev )Una alternativa a la construcción nativa es usar nvidia-docker. Siga las instrucciones en https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html#installing-docker-ce
Preparar la imagen de Docker por
cd docker
make
cd ../Asegúrate de que puedas correr
sudo docker run --gpus all cgtuebingen/ggnn:v1 nvidia-smiAhora crea el código a través de
user@host $ sudo docker run --rm -it --user " $( id -u ) : $( id -g ) " -v ${PWD} :/ggnn:rw --gpus all cgtuebingen/ggnn:v1 bash
user@container $ ./build.sh
cd build_docker
make