You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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.solibcudart.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

火山引擎 最新活动