使用cmake安装faiss-GPU.so(无网或者内网情况下)
流程
GPU使用基本原理
1. 物理 GPU 卡(如 Tesla V100)
- 是一块 硬件设备,可加速矩阵运算、向量计算等任务。
2. 操作系统不认识 GPU,必须靠 驱动程序(NVIDIA driver)
-
类似网卡/显卡都需要驱动。
-
安装完驱动后你才可以用
nvidia-smi
等命令看到 GPU。
3. CUDA 是 NVIDIA 的并行计算平台
-
CUDA Toolkit 包含运行库(driver API + runtime API)和开发工具。
-
没有它,你的程序(如 PyTorch/FAISS)无法调用 GPU 进行计算。
4. cuDNN 是深度学习专用的加速库
- 可选安装,用于 TensorFlow/PyTorch,但不是 FAISS 的前提。
5. FAISS GPU 模块 依赖 CUDA + NVIDIA 驱动
-
FAISS 的
gpu
backend 编译时需要 CUDA 支持; -
运行时调用 GPU 也需要系统已加载 NVIDIA 驱动。
二、使用 GPU 的安装流程(按顺序执行)
步骤 | 安装内容 | 作用 | 是否必须 |
---|---|---|---|
1️⃣ | NVIDIA 驱动(如 V550+) | 操作系统识别 GPU | ✅ 必须 |
2️⃣ | CUDA Toolkit(如 11.8) | 为 GPU 提供开发环境 | ✅ 必须 |
3️⃣ | 设置环境变量 | 让系统找到 CUDA 工具 | ✅ 必须 |
4️⃣ | FAISS 编译或安装 GPU 版 | 使用 GPU 加速索引搜索 | ✅ 必须 |
5️⃣ | (可选) cuDNN | 深度学习库加速卷积等 | ❌ 可选 |
全流程回顾(安装顺序图)
[硬件 GPU] ──▶ 安装 NVIDIA 驱动 ──▶ 安装 CUDA Toolkit ──▶ 配置环境变量│ │└────▶ 验证 nvidia-smi └──▶ 验证 nvcc -V↓安装 FAISS GPU 版↓验证 Python 中 GPU 调用
验证GPU驱动
nvidia-smi
- 驱动版本为 Driver Version: 560.28.03
- Driver Version: 560.28.03
验证CUDA版本
nvcc -v
寻找nvcc的内容:
(base) [root@node24 ~]#find /usr/local -name nvcc 2>/dev/null
/usr/local/cuda-12.6/bin/nvcc
(base) [root@node24 ~]#export PATH=/usr/local/cuda-12.6/bin:$PATH
(base) [root@node24 ~]#export LD_LIBRARY_PATH=/usr/local/cuda-12.6/lib64:$LD_LIBRARY_PATH
(base) [root@node24 ~]#source ~/.bashrc
(base) [root@node24 ~]#nvcc --version
安装faiss的GPU版本
# 在Centos上面安装相关依赖
sudo yum update -y# 编译工具和依赖库
sudo yum groupinstall -y "Development Tools"sudo yum install -y epel-release
sudo yum install -y cmake3 \openblas-devel \libgomp \python3 \python3-devel \python3-pip \swig \gitcd faiss-1.10.0/
mkdir build && cd build
# 切换到llw权限下,安装Miniforge
cd /home/llw
wget https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-Linux-x86_64.sh
bash Miniforge3-Linux-x86_64.sh
source ~/.bashrc# 从github里面下载googletest的1.12.1版本
# 修改faiss-1.10.0/test/CMakeLists.txt下的有关于googletest内容:
# 修改google的文件名字
mv google-release-1.12.1 googletest-src
include(FetchContent)
FetchContent_Declare(googletestSOURCE_DIR ${CMAKE_SOURCE_DIR}/googletest-src
)
set(BUILD_GMOCK CACHE BOOL OFF)
set(INSTALL_GTEST CACHE BOOL OFF)
FetchContent_MakeAvailable(googletest)# 手动添加 GTest::GTest 和 GTest::Main 别名(只影响 googletest)
add_library(GTest::GTest ALIAS gtest)
add_library(GTest::Main ALIAS gtest_main)find_package(OpenMP REQUIRED)target_link_libraries(faiss_test PRIVATEOpenMP::OpenMP_CXXGTest::gtest_main$<$<BOOL:${FAISS_ENABLE_ROCM}>:hip::host>
)
include(GoogleTest)
gtest_discover_tests(faiss_test)# 要修改的内容挺多的,要去添加google benchmark\gflags-2.2.2,还需要升级swig到4.1.1版本,然后需要去修改faiss-1.10.0下test和perls_tests目录下的CMakeLists.txt里面与google benchmark\gflags-2.2.2有关的内容,都是从本地获取,然后让CMakeLists去寻找本地的文件。
export PATH=/usr/local/cuda-12.2/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-12.2/lib64:$LD_LIBRARY_PATH
source ~/.bashrc
cmake .. \-DFAISS_ENABLE_GPU=ON \-DFAISS_ENABLE_PYTHON=ON \-DCMAKE_CUDA_ARCHITECTURES="native" \-DCUDAToolkit_ROOT=/usr/local/cuda-12.2 \-DCMAKE_BUILD_TYPE=Release \-DBLA_VENDOR=OpenBLAS \-DFAISS_OPT_LEVEL=avx2 \-DBUILD_TESTING=OFF \-DPython_EXECUTABLE=$(which python3) \-DPython_INCLUDE_DIR=$(python3 -c "from distutils.sysconfig import get_python_inc; print(get_python_inc())") \-DPython_NumPy_INCLUDE_DIR=$(python3 -c "import numpy; print(numpy.get_include())") \-DCMAKE_CXX_FLAGS="-I/usr/local/cuda-12.2/include" \-DCMAKE_CUDA_FLAGS="-I/usr/local/cuda-12.2/include" \-DCMAKE_INSTALL_PREFIX=/home/llw/localmake -j$(nproc)
make install# 进入到build目录下面,修改tutorial/cpp/CMakeLists.txt里面针对4-GPU的内容,建立与libfaiss.a和libfaiss_gpu.a之间的关系,运行下面的内容:
make 4-GPU
# 开启另一个终端,使用下面的命令查看GPU的使用情况
watch -n 1 nvidia-smi
# 至此完成了faiss-GPU的编译和安装