坑 之 Ubuntu Conda虚拟环境使用faiss-gpu报错分析及解决办法

写在前面,笔者用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

https://github.com/facebookresearch/faiss/issues/866

https://github.com/facebookresearch/faiss/issues/2064

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值