基于 dGPU部署NanoDB,实现基于clip和faiss-gpu的高性能多模态检索

目录

1 docker环境搭建

2 安装NanoDB

2.1 安装依赖

2.2 启动NanoDB

3 中文CLIP支持


当前 当前 NanoDB - NVIDIA Jetson AI Lab 是基于Jetson实现的,并没有在dGPU上部署的说明。为此, 参考上述的项目实现了在dGPU的NanoDB的部署,如T4。下面是具体的部署过程。

整个部署使用docker实现,因为涉及依赖库较多,普通的物理机部署较为复杂。

1 docker环境搭建

(1)下载docker images

当前的部署过程仅在nvcr.io/nvidia/tensorrt:24.05-py3这个image上测试通过,其余未进行测试。

docker pull nvcr.io/nvidia/tensorrt:24.05-py3

### FAISS-GPU 的安装与使用指南 FAISS 是由 Facebook 开源的一个高效相似度搜索库,支持 CPU GPU 加速。以下是关于如何在 Linux 系统上安装配置 FAISS-GPU 库的具体方法。 #### 依赖环境准备 为了成功安装 FAISS-GPU,需要先完成 NVIDIA 驱动程序、CUDA 工具包以及 cuDNN 的安装[^1]。具体操作可以参考 TensorFlow-GPU 在 Ubuntu 上的安装流程[^2]: - **NVIDIA 显卡驱动**:确保已正确安装适用于系统的显卡驱动版本。 - **CUDA Toolkit**:推荐 CUDA 版本需匹配 FAISS 支持范围(通常为 CUDA 9.0 或更高版本)。可以通过运行文件方式安装 CUDA: ```bash sudo sh cuda_9.0.run --override ``` - **cuDNN**:下载对应 CUDA 版本的 cuDNN 并解压到指定路径下。 完成后执行以下命令以更新初始化内存映射文件并重启系统: ```bash sudo update-initramfs -u && reboot ``` #### 安装 FAISS-GPU 通过 PyPI 或者从源码编译两种途径来实现 FAISS-GPU部署。 ##### 方法一:基于 pip 进行快速安装 如果目标平台已经满足上述所有前提条件,则可以直接利用 Python 包管理工具 `pip` 来获取预构建好的二进制轮子文件: ```bash pip install faiss-gpu ``` 此过程会自动拉取适合当前硬件架构的最佳兼容版本[^4]。 ##### 方法二:手动编译自定义优化版 对于追求极致性能或者特殊需求场景下的用户来说,建议自行克隆官方仓库后按照指示逐步构建项目工程[^5]: 1. 获取最新代码副本: ```bash git clone https://github.com/facebookresearch/faiss.git cd faiss ``` 2. 编辑 CMakeLists.txt 文件中的选项开关,开启 GPU 功能模块支持; 3. 执行 cmake 构建脚本生成 Makefile 后再调用 make 命令完成整个项目的组装工作流: ```bash mkdir build && cd build cmake .. -DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=Release \ -DGPU Faiss=ON -DCUDA_ARCH_LIST="7.5" make -j$(nproc) sudo make install ``` 注意调整 `-DCUDA_ARCH_LIST` 参数值至实际使用的 GPU 计算能力代号列表中去[^6]。 #### 使用示例 下面给出一段简单的 Python 脚本用于演示如何加载数据集并通过索引结构查询最近邻点对的结果集合: ```python import numpy as np import faiss d = 64 # vector dimensionality nb = 100000 # database size nq = 10000 # number of queries np.random.seed(1234) # set random seed for reproducibility xb = np.random.random((nb, d)).astype('float32') xq = np.random.random((nq, d)).astype('float32') index_flat = faiss.IndexFlatL2(d) # create a flat L2 index structure print(index_flat.is_trained) index_flat.add(xb) # add the vectors to be indexed into memory space print(index_flat.ntotal) k = 4 # define top-k nearest neighbors count we want back per query item D, I = index_flat.search(xq, k) # perform actual search operation against stored dataset entries print(I[:5]) # display first five results' indices only here print(D[:5]) # also print their corresponding distances metrics alongside them too. ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

space01

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值