User File "/home/.../OpenUnReID/openunreid/core/utils/compute_dist.py", line 99, in compute_jaccard_distance _, initial_rank = search_raw_array_pytorch(res, features, features, k1) File "/home.../OpenUnReID/openunreid/core/utils/faiss_utils.py", line 98, in search_raw_array_pytorch I_ptr, File "/home/.../envs/open-mmlab/lib/python3.7/site-packages/faiss/swigfaiss.py", line 4567, in bruteForceKnn return _swigfaiss.bruteForceKnn(resources, metric, vectors, vectorsRowMajor, numVectors, queries, queriesRowMajor, numQueries, dims, k, outDistances, outIndices) RuntimeError: Error in void faiss::gpu::allocMemorySpaceV(faiss::gpu::MemorySpace, void**, size_t) at gpu/utils/MemorySpace.cpp:26: Error: 'err == cudaSuccess' failed: failed to cudaMalloc 1073741824 bytes (error 2 out of memory)
实验环境:
ubuntu20.04
pytorch1.8
faiss-gpu1.6.3
cuda11.2
faiss是一个用来进行相似性搜索的库,主要用于处理大规模的高维向量数据,先把二维数据转换成faiss要求的索引数据结构,然后就可以用来做聚类、相似度计算这些。
报错原因:显存分配不足。
尝试方案:①减小batch_size,从32=>16=>8=>4,无法解决;②将GPU个数调整为单个,无法解决;③在创建faiss索引之前对缓存进行清除,有效!
解决方案:
在faiss.py文件中,创建faiss索引之前加入以下代码:torch.cuda.empty_cache()
在本项目中,具体是在
D_ptr = swig_ptr_from_FloatTensor(D)
torch.cuda.empty_cache() #加入的代码
I_ptr = swig_ptr_from_LongTensor(I)