
坑 之 Ubuntu Conda虚拟环境使用faiss-gpu报错分析及解决办法
faiss-gpu的使用于cuda版本是紧密相关的,cuda又是与nvidia driver紧密相关的,nvidia driver又是与显卡紧密相关的
写在前面,笔者用faiss-gpu来执行聚类运算。faiss-gpu的使用于cuda版本是紧密相关的,cuda又是与nvidia driver紧密相关的,nvidia driver又是与显卡紧密相关的。如果faiss-gpu和cuda版本不匹配会报错而无法使用。
我的环境:RTX3090、python3.7.5、pytorch1.7.1+cuda11.0,根据我查阅的资料显示,faiss-gpu==1.7.1支持cuda11.0。
一.错误示例
我首先使用conda 安装 faiss-gpu=1.7.1
conda install faiss-gpu cudatoolkit=11.0 -c pytorch
报错:
Faiss assertion 'err == CUBLAS_STATUS_SUCCESS' failed in void faiss::gpu::runMatrixMult(faiss::gpu::Tensor<float, 2, true>&, bool, faiss::gpu::Tensor<T, 2, true>&, bool, faiss::gpu::Tensor<IndexType, 2, true>&, bool, float, float, cublasHandle_t, cudaStream_t) [with AT = float; BT = float; cublasHandle_t = cublasContext*; cudaStream_t = CUstream_st*] at /project/faiss/faiss/gpu/utils/MatrixMult-inl.cuh:265; details: cublas failed (13): (512, 2) x (2, 128)' = (512, 2) gemm params m 2 n 512 k 128 trA T trB N lda 128 ldb 128 ldc 2
错误原因:依然怀疑是版本问题,在github上也查看到了类似的issue,也没有很好的解决办法。
所以我尝试使用pip安装faiss-gpu
pip install faiss-gpu==1.7.1
依旧报错:段错误,无效指针等问题,头皮发麻
奇怪现象:当特征维度是768时并不报错,为512时就会报错,这里依旧没有得到很好的解释,读者可以尝试一下,看有无相同的实验现象。
抱着版本不对升级版本的目的又安装了faiss-gpu=1.7.2的版本,但依旧不好使。
二. 解决办法:使用源码安装的方式编译安装faiss-gpu==1.7.1,成功
说一下前提条件,若要在conda环境里安装则先激活虚拟环境,并检查当前环境的python解释器
conda activate xxx
which python
安装步骤:1.去faiss-gpu官网下载对应版本的faiss-gpu,解压
Releases · facebookresearch/faiss · GitHub
2.进入目录,执行:
cmake -B build . -DCUDAToolkit_ROOT=/usr/local/cuda/ -DFAISS_ENABLE_GPU=ON -DPython_EXECUTABLE=/home/xxx/anaconda3/envs/xxx/python
make -C build -j16
cd build/faiss/python/ && python setup.py install
#注意修改成 自己的 cuda 和 python解释器
3.若报错与swig有关,则需提前安装swig和prec/prec2/prec3(根据报错判断缺哪个版本的prec)
swig下载链接:SWIG - Browse /swig at SourceForge.net
prec2下载链接:https://link.zhihu.com/?target=https%3A//sourceforge.net/projects/pcre/files/pcre2/10.37/pcre2-10.37.tar.gz
将prec2压缩包放入swig解压后的文件夹中,执行,否则报错:
Cannot find pcre-config script from PCRE2 (Perl Compatible Regular Expressions)
安装prec2:
1 ./Tools/pcre2-build.sh
安装swig:进入swig目录
1 ./configure
2 make
3 sudo make install
4.解决报错后重新执行步骤2。
5.进入build目录,测试demo,成功运行,则表示顺利安装
make demo_ivfpq_indexing
cd demos
./demo_ivfpq_indexing
解释并强调:在虚拟环境下安装,则会存放在虚拟环境下的site-packages,为保证虚拟环境python可以调用,必须确保步骤2中的python解释器路径是对的。
测试能否调用:成功导入这里就大功告成。
1. python
2. import faiss
import时有可能会遇到报错如下:
ImportError: cannot import name '_swigfaiss',
问题原因:faiss文件是.egg的压缩形式
解决办法:去到虚拟环境下的site-packages,将faiss-xxx-xx.egg解压(tar -zxvf faiss-xxx-xx.egg)
到这里,笔者就没有问题了,希望你们也是。
参考:
prec2:Nginx系列:依赖安装(pcre,zlib,openssl)(2) - 知乎
www.taodudu.cc/news/show-1683956.html?action=onClick
https://www.cnblogs.com/chen1846847163/p/15605074.html
更多推荐
所有评论(0)