Linux环境安装faiss-gpu库的问题汇总(量大管饱)
前言:进行无监督学习时,通常会用到faiss-gpu用来进行聚类或者举例计算等操作。但是faiss-gpu不同版本对运行环境非常敏感,faiss-gpu版本过低会导致找不到attribute。过高则会有各种各样的莫名报错。
本机环境:
服务器版本Ubuntu 22.04.5
Driver Version: 575.64.03
CUDA Version: 12.9
显卡:A100
报错情况一:
主要已安装库:
python:3.8.20
torch:1.8.0cu111
torchvision:0.9.0cu111
发生错误时的faiss-gpu:1.7.2
遇到的问题:在计算jaccard_distance(这个方法用到了faiss库)时,计算异常缓慢,并且最终返回值异常(算得的jaccard_distance矩阵值全0)。
失败方案:思考,既然faiss-gpu对版本敏感,那直接安装faiss-gpu-cu12版本不就好了,结果安装完成后,运行项目,一开始就报错“undefined symbol: cublasLtGetEnvironmentMode, version libcublasLt.so.12”。怀疑是其cu12版本太新导致相互库之间不兼容》
解决方案:安装faiss-gpu-cu11版本,这个版本兼容显卡cuda的12.9版本,
直接在你的虚拟环境输入:pip install faiss-gpu-cu11
注意过低的python版本可能也会不兼容faiss-gpu-cu11(没尝试)。安装时可能会出现网络问题,换清华源安装即可。安装完成后faiss-gpu版本如下:
![]()
报错情况二:
主要已安装库:
python:3.7.16
torch:1.8.0cu111
torchvision:0.9.0cu111
发生错误时的faiss-gpu:1.7.2
运行项目时报错:
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, 384) x (12936, 384)' = (512, 12936) gemm params m 12936 n 512 k 384 trA T trB N lda 384 ldb 384 ldc 12936
而若使用方案一的方法来解决,安装会报错,因为此时python环境已从3.8变为3.7。原因可能是其版本不支持python3.7。
解决方案:访问:Releases · faiss-wheels/faiss-wheels,找到faiss-gpu1.7.3。找到对应的python3.7版本,离线下载后,将文件传到服务器上安装
例:你将下载好的文件放在/home/zhangsan。cd /home/zhangsan后在虚拟环境内输入
pip install /home/zhangsan/faiss_gpu-1.7.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl 即可解决

报错情况三:
主要已安装库:
python:3.8.20
torch:1.8.0cu111
torchvision:0.9.0cu111
发生错误时的faiss-gpu:faiss-gpu-cu11==1.8.0.2
这次是直接复制问题一修复好的环境运行一个项目,但是运行后报错:
AttributeError: module 'faiss' has no attribute 'cast_integer_to_long_ptr'。
解决方案:
更多推荐
所有评论(0)