当前位置: 首页 > java >正文

使用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的编译和安装
http://www.xdnf.cn/news/13796.html

相关文章:

  • 《网络安全与防护》知识点复习
  • 多通道信号采集分析系统 - 01 功能分解与采样子系统
  • 体育赛事直播平台需要有哪些数据?
  • 通用人工智能离我们还有多远?从认知模型到大模型的深度解析
  • JavaScript中声明变量的关键字const/let/var区别
  • 13-Linux启动流程和内核管理自我总结
  • python根据图片路径获取文件后缀名
  • Spring Boot Actuator 健康信息
  • OpenLayers 动画
  • 零基础RT-thread第一节:串口通信UART
  • C语言——指针
  • 实现AI数据高效评估的一种方法
  • 分水岭边缘提取和hough提取边缘
  • ubuntu20上 : mujoco210安装教程
  • 计算机系统设计:E-R图、类图、时序图、功能结构图、流程图、用例图、架构图
  • 【ARMv7-A】——CLZ 指令
  • 【25-cv-06400、25-cv-06413】Keith律所再次代理Elizabeth Anne Evans蝴蝶版权画
  • 使用MetaGPT 创建智能体(3)常用操作和晋级
  • < 自用文儿 腾讯云 VPS > Ubuntu 24 系统,基本设置
  • 无人机接收机运行技术要点分析!
  • 基于SC内存一致性模型两个核心约束的放松维度
  • Systemctl 手记:从服务管理到资源控制的进阶实践
  • AI时代,学习力进化指南:如何成为知识的主人?
  • JSON 与 AJAX
  • 开疆智能ModbusTCP转Devicenet网关连接ABB机器人配置案例
  • 网页中调用自定义字体可以通过 ‌CSS‌ 的 @font-face 规则实现
  • Vue 跳转页面,第一次进页面,会出现样式混乱,刷新后即恢复正常(问题已解决)
  • 进程和计划任务管理
  • 剑指offer23_树的子结构
  • ESP32S3 关于使用INMP441麦克风 和MAX98357AETE功放进行录音和播放