LLM之高性能向量检索库

文章介绍了开源向量数据库Milvus,强调其在高效存储和检索高维向量数据方面的优势,包括高性能、可扩展性和多语言支持。同时,文章提及了Facebook的Faiss库,用于大规模向量索引和搜索,支持多种度量方式和索引结构。两者均广泛应用于机器学习相关领域。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

高性能向量检索库

milvus

简介

Milvus 是一个开源的向量数据库引擎,旨在提供高效的向量存储、检索和分析能力。它被设计用于处理大规模的高维向量数据,常用于机器学习、计算机视觉、自然语言处理和推荐系统等领域。

Milvus 提供了多种功能和特性,使其成为处理向量数据的理想选择。以下是一些 Milvus 的主要特点:

  1. 高性能:Milvus 使用了高度优化的数据结构和索引算法,以实现快速的向量检索。它支持多种索引类型,如平面索引、倒排索引和 HNSW(Hierarchical Navigable Small World)等,这些索引能够加速向量的相似度搜索。
  2. 可扩展性:Milvus 具备良好的可扩展性,可以轻松地扩展到大规模的向量数据集。它支持分布式部署,可以在多个节点上进行数据存储和查询操作,实现高吞吐量和低延迟。
  3. 多样化的向量类型:Milvus 支持多种向量类型,包括浮点型向量、二进制向量和文本向量等。这使得它可以适应不同领域和应用中的向量数据需求。
  4. 多语言支持:Milvus 提供了多种编程语言的 SDK(软件开发工具包),包括 Python、Java、Go 和 C++ 等,使开发者可以方便地集成 Milvus 到他们的应用程序中。
  5. 可视化管理界面:Milvus 提供了一个易于使用的 Web 界面,用于管理和监控向量数据库。开发者可以通过该界面进行数据导入、索引构建和查询优化等操作,同时还能够查看系统状态和性能指标。

总之,Milvus 是一个功能强大的向量数据库引擎,通过其高性能、可扩展性和多样化的特性,能够有效地存储和检索大规模的高维向量数据。它在许多领域的应用中发挥着重要作用,帮助开发者加速向量相关任务的开发和部署。

安装

  • docker 安装镜像:docker pull milvusdb/milvus:cpu-latest

  • 创建工作目录:

    mkdir milvus

    cd milvus

    mkdir congf

    mkdir db

    mkdir logs

    mkdir wal

我的目录结构是:

  milvus
    │
    ├─conf //配置文件目录
    │      server_config.yaml  //配置文件 搜索引擎配置都在这里修改
    │
    ├─db //数据库存储目录 你的索引与向量存储的位置
    │
    └─logs //日志存储目录 
    │
    └─wal // 预写式日志相关配置

server_config.yaml

docker run -it milvusdb/milvus:cpu-latest bash

docker cp 74c20a680091:/var/lib/milvus/conf/server_config.yaml milvus/conf/

  • 启动容器

    docker run -td --name mymilvus -e "TZ=Asia/Shanghai" -p 19530:19530 -p 19121:19121 -v /work/lnn_workspace/chatgpt/search/milvus/conf:/var/lib/milvus/conf -v /work/lnn_workspace/chatgpt/search/milvus/db:/var/lib/milvus/db -v /work/lnn_workspace/chatgpt/search/milvus/logs:/var/lib/milvus/logs   milvusdb/milvus:cpu-latest
    

    docker ps | grep mymilvus

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-orhH8dlK-1685346967888)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230519105321396.png)]

  • 安装pymilvus
pip install pymilvus==1.1.2
ps:注意这里安装最新版本可以会无法正常调用,1.1.2经过测试可正常使用

调用

# -*- coding: utf-8 -*-  

# 导入相应的包  
import numpy as np  
from milvus import Milvus, MetricType  

# 初始化一个Milvus类,以后所有的操作都是通过milvus来的  
milvus = Milvus(host='localhost', port='19530')  

# 向量个数  
num_vec = 5000  
# 向量维度  
vec_dim = 768  
# name  
collection_name = "test_collection"  
# 创建collection,可理解为mongo的collection  
collection_param = {  
    'collection_name': collection_name,  
    'dimension': vec_dim,  
    'index_file_size': 32,  
    'metric_type': MetricType.IP  # 使用内积作为度量值  
}  
milvus.create_collection(collection_param)  

# 随机生成一批向量数据  
# 支持ndarray,也支持list  
vectors_array = np.random.rand(num_vec, vec_dim)  

# 把向量添加到刚才建立的collection中  
status, ids = milvus.insert(collection_name=collection_name, records=vectors_array)  # 返回 状态和这一组向量的ID  
milvus.flush([collection_name])  

# 输出统计信息  
print(milvus.get_collection_stats(collection_name))  

# 创建查询向量  
query_vec_array = np.random.rand(1, vec_dim)  
# 进行查询,  
status, results = milvus.search(collection_name=collection_name, query_records=query_vec_array, top_k=5)  
print(status)  
print(results)  

# 如果不用可以删掉  
status = milvus.drop_collection(collection_name)  

# 断开、关闭连接  
milvus.close()
collection_name = "test_collection"
- 定义集合名称为test_collection
collection_param = {
    'collection_name': collection_name,
    'dimension': vec_dim,
    'index_file_size': 32,
    'metric_type': MetricType.IP 
}
milvus.create_collection(collection_param)  



- collection_name 指定集合名称为test_collection
- dimension 表示集合中向量的维度,由vec_dim变量赋值
- index_file_size 设置索引文件大小为32MB
- metric_type 设置度量类型为IP,表示使用向量内积作为相似度度量
所以,这段代码定义了集合名称和相关参数,用于在Milvus服务上创建一个新的集合。
在Milvus中,集合相当于关系数据库的表,是存储向量的基本单元。在创建集合时,我们需要指定:
1. 集合名称:唯一标识一个集合
2. 向量维度:集合中向量的特征数量
3. 度量类型:测量向量之间相似度的算法,如IP(内积)、L2(欧氏距离)4. 索引文件大小:用于提高搜索性能,索引文件会存储向量的索引信息

faiss

简介

Faiss是Facebook开源的一个向量检索库,用于大规模向量集合的索引和搜索。主要功能包括:

  1. 支持多种索引结构: IVF, IVFFlat, HNSW, etc。这些索引结构可以实现高精度和高召回的向量搜索。
  2. 支持多种度量方式:内积,欧氏距离,cosine 相似度等。可选择合适的度量方式对向量集合建立索引。
  3. 快速的索引构建与搜索:Faiss使用GPU加速,可以实现亿量级向量的索引构建和搜索。
  4. 降维与聚类:Faiss提供PCA,IVFFlat等算法进行向量降维,并支持Kmeans算法进行向量聚类。
  5. 高级特性:Faiss支持在线学习,异构向量检索,索引压缩等高级特性。

Faiss的典型应用有:

  1. 图像检索:在大规模图片数据库中找到与输入图片最相似的图片。

  2. 文本匹配:快速找到与输入文本最相近的文本内容。

  3. 推荐系统:根据用户兴趣对大量商品进行快速检索和推荐。

  4. 声纹识别:在海量语音数据中实现语音识别和检索。

Faiss提供C++, Python和Java语言接口,可以轻松构建向量检索系统。如果需要管理和搜索海量高维向量,Faiss是一个非常好的选择。

安装

install faiss-cpu

调用

# 导入库  
import numpy as np  
import faiss  

# 向量个数  
num_vec = 5000  
# 向量维度  
vec_dim = 768  
# 搜索topk  
topk = 10  

# 随机生成一批向量数据  
vectors = np.random.rand(num_vec, vec_dim)  

# 创建索引  
faiss_index = faiss.IndexFlatL2(vec_dim)  # 使用欧式距离作为度量  
# 添加数据  
faiss_index.add(vectors)  

# 查询向量 假设有5个  
query_vectors = np.random.rand(5, vec_dim)  
# 搜索结果  
# 分别是 每条记录对应topk的距离和索引  
# ndarray类型 。shape:len(query_vectors)*topk  
res_distance, res_index = faiss_index.search(query_vectors, topk)  
print(res_index)  
print(res_distance)
### DeepSeek 向量检索模型概述 DeepSeek向量检索模型旨在提供高效、精准的内容匹配服务,适用于多种应用场景,如文档检索、推荐系统等。为了帮助用户更好地理解和应用该模型,以下是详细的使用指南和最佳实践。 ### 安装指南 对于希望在本地环境中部署并测试DeepSeek向量检索模型的用户而言,遵循以下指导可以顺利完成安装过程: #### 准备工作环境 确保已配置好Python开发环境,并且具备必要的依赖项管理工具(pip)。此外,考虑到性能优化的需求,在支持CUDA加速的硬件上运行将显著提升效率[^2]。 #### 获取模型文件 访问官方资源页面下载最新的预训练权重以及配套脚本;注意确认所选版本与目标平台兼容性良好。通常情况下,模型会被打包成压缩包形式分发给最终使用者。 #### 配置启动参数 利用`accelerate`命令行工具来简化跨多个GPU设备上的分布式计算任务设置。通过指定相应的选项调整并发处理能力及其他高级特性开关状态,例如混合精度浮点运算模式(`--mixed_precision`)可有效减少内存占用同时加快推理速度。 ```bash accelerate launch \ --num_processes 4 \ --mixed_precision fp16 \ deepseek_serving.py \ --model_path ./deepseek-llm-7b-chat \ --batch_size 32 ``` 上述实例展示了如何基于四个进程执行多GPU分布式的模型加载和服务端口开启操作,其中还包含了针对特定路径下的大型语言模型实例化时所需的批量大小设定。 ### 使用教程 当完成初步搭建之后,便可以通过API接口调用来实现具体业务逻辑交互。下面列举了一些常见的请求范例供参考学习: - **索引构建**:上传待查询的数据集至服务器端进行特征提取及存储结构创建; - **相似度搜索**:提交关键词表达式获取最接近的结果列表及其对应得分值; - **实时更新**:允许动态修改已有记录或新增条目而不影响在线服务能力连续性。 值得注意的是,随着每次迭代更新,可能会引入新的特性和改进之处,因此建议经常查阅官方发布的变更日志以便及时跟进变化趋势[^1]。 ### 最佳实践 为了充分发挥DeepSeek向量检索系统的潜力,这里给出几条实用性的建议: - 尽可能采用高质量标注样本作为输入源材料,这有助于提高召回率和准确性; - 结合实际需求灵活调节超参组合方案,找到平衡点所在从而达到最优解效果; - 积极参与到社区交流活动中去分享经验教训同时也汲取他人智慧结晶。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

江小皮不皮

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

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

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

打赏作者

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

抵扣说明:

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

余额充值