*Fabian Groh, Lukas Ruppert, Patrick Wieschollek, Hendrik Pa Lensch
A pesquisa aproximada do vizinho mais próximo (RNA) em altas dimensões é parte integrante de vários sistemas de visão computacional e ganha importância no aprendizado profundo com representações explícitas de memória. Desde que o PQT e o FAISS começaram a alavancar o paralelismo maciço oferecido pelas GPUs, as implementações baseadas em GPU são um recurso crucial para os métodos de RNA de última geração de hoje. Embora a maioria desses métodos permita consultas mais rápidas, menos ênfase é dedicada a acelerar a construção das estruturas de índice subjacentes. Neste artigo, propomos uma nova estrutura de pesquisa com base nos gráficos vizinhos mais próximos e propagação de informações nos gráficos. Nosso método foi projetado para aproveitar as arquiteturas da GPU para acelerar o edifício hierárquico da estrutura do índice e realizar a consulta. A avaliação empírica mostra que o GGNN supera significativamente os sistemas baseados em GPU e CPU de última geração em termos de tempo de construção, precisão e velocidade de pesquisa.
Este trabalho está atualmente em revisão. Atualizamos o código. Alguns novos resultados são mostrados abaixo.
# 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 )Uma alternativa à construção nativa é usar o NVIDIA-Docker. Siga as instruções em https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html#installing-docker-ce
Prepare a imagem do Docker por
cd docker
make
cd ../Certifique -se de executar
sudo docker run --gpus all cgtuebingen/ggnn:v1 nvidia-smiAgora construa o código via
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