Anaconda安装的cudatoolkit与cudnn路径查询及FAISS编译求助
解决conda安装CUDA Toolkit/CUDNN后路径定位及FAISS编译问题
我之前也踩过conda装CUDA后找不到路径、nvcc版本不匹配的坑,刚好能给你分享下解决方法,适配Ubuntu 18.04环境:
1. 先确认conda环境激活状态
conda安装的CUDA工具链是绑定到具体环境的,首先确保你激活了安装cudatoolkit=10.0的环境:
# 如果你用的是自定义环境,替换成你的环境名 conda activate your_env_name # 如果是base环境,直接跳过激活命令
执行echo $CONDA_PREFIX,这个输出的路径就是当前conda环境的根目录,后续所有CUDA相关文件都在这个目录下。
2. 定位cudatoolkit和CUDNN的具体路径
conda会把CUDA的头文件、库文件直接放到当前环境的对应目录里:
- CUDA头文件:
$CONDA_PREFIX/include(里面能找到cuda.h等核心头文件) - CUDA库文件:
$CONDA_PREFIX/lib(包含libcuda.so、libcudart.so等) - CUDNN头文件:
$CONDA_PREFIX/include/cudnn.h - CUDNN库文件:
$CONDA_PREFIX/lib/libcudnn.so(可能带版本后缀,比如libcudnn.so.7)
你可以用以下命令快速验证:
# 查找CUDA核心头文件 find $CONDA_PREFIX -name "cuda.h" # 查找CUDNN头文件 find $CONDA_PREFIX -name "cudnn.h"
3. 解决nvcc版本显示为9.1的问题
你看到的nvcc --version是系统级CUDA 9.1的版本,conda默认不会自动覆盖系统的环境变量。要让conda环境的nvcc生效:
方法一:临时设置环境变量(激活环境后执行)
export PATH="$CONDA_PREFIX/bin:$PATH" export LD_LIBRARY_PATH="$CONDA_PREFIX/lib:$LD_LIBRARY_PATH"
再执行nvcc --version,应该就能显示10.0版本了。
方法二:永久配置环境变量
如果不想每次激活环境都手动设置,可以在环境的activate.d目录下添加配置文件:
mkdir -p $CONDA_PREFIX/etc/conda/activate.d echo 'export PATH="$CONDA_PREFIX/bin:$PATH"' >> $CONDA_PREFIX/etc/conda/activate.d/env_vars.sh echo 'export LD_LIBRARY_PATH="$CONDA_PREFIX/lib:$LD_LIBRARY_PATH"' >> $CONDA_PREFIX/etc/conda/activate.d/env_vars.sh
下次激活环境时会自动加载这些变量。
注意:如果执行
$CONDA_PREFIX/bin/nvcc提示找不到命令,说明你的cudatoolkit包不包含nvcc,需要单独安装对应版本的nvcc:conda install -c conda-forge cuda-nvcc=10.0
4. 编译带CUDA支持的FAISS
在激活conda环境、配置好环境变量后,编译FAISS时需要指定conda环境的CUDA路径,用cmake命令示例:
# 进入FAISS源码目录 cd faiss # 创建build目录并执行cmake cmake -B build \ -DCMAKE_CUDA_COMPILER=$CONDA_PREFIX/bin/nvcc \ -DCUDA_TOOLKIT_ROOT_DIR=$CONDA_PREFIX \ -DBUILD_SHARED_LIBS=ON \ -DBUILD_TESTING=OFF \ . # 编译 make -C build -j$(nproc)
这样cmake就会使用conda环境里的CUDA 10.0工具链,自动找到CUDNN的文件,完成FAISS的CUDA支持编译。
内容的提问来源于stack exchange,提问作者duhaime




