milvus的磁盘索引

背景

本文介绍一种叫做DiskANN的磁盘索引算法,它基于Vamana graph,DiskANN在大数据集上搜索非常有效。

为了提高查询性能,我们可以为每个向量字段设置特定的索引类型。

注意:当前,一个向量字段仅仅支持一个索引类型,milvus会在切换新的索引类型的时候自动删除旧的索引类型。

前置条件

如果使用DiskANN,请注意:

  • DiskANN默认是开启的,如果我们倾向于选择内存索引而不是磁盘索引,建议我们禁用该功能来获得更好的性能
  • 禁用:我们可以修改milvus的配置文件的配置项: queryNode.enableDisk为false
  • 启用:设置 queryNode.enableDisk 为true
  • milvus实例运行在Ubuntu 18.04.6或者更高的版本上
  • 为了更好的性能,milvus数据路径应该挂载到 NVMe SSD
  • 如果milvus是独立部署,容器里面运行的milvus实例的数据路径应该配置为:/var/lib/milvus/data
  • 如果milvus是集群部署,容器里面运行的QueryNodes和IndexNodes的数据路径应该配置为:/var/lib/milvus/data

限制

为了使用DiskANN,需要确保:

  • 只能使用浮点数向量,并且我们的向量至少是一维的。
  • 只能使用欧几里得距离(L2)或者内积(IP)来计算向量之间的距离

索引和查询设置

  • 索引构建参数
    • 当构建DiskANN索引,使用 DISKANN作为索引类型,不需要其他任何的索引参数
  • 查询参数
Parameter Description Range
search_list 候选列表的大小,数字越大召回率越高相对性能就会降低 topk, int32_max

DiskANN相关的milvus配置

DiskANN是可以调整的,我们可以通过修改${MILVUS_ROOT_PATH}/configs/milvus.yaml里面的DiskANN相关的参数来提高它的性能:

复制代码
...
DiskIndex:
  MaxDegree: 56
  SearchListSize: 100
  PQCodeBugetGBRatio: 0.125
  SearchCacheBudgetGBRatio: 0.125
  BeamWidthRatio: 4.0
...
Parameter Description Value Range Default Value
MaxDegree Vamana graph的最大限度,更大的值能提高更多的召回率,但是也增加索引的大小和索引构建的时间 1, 512 56
SearchListSize 候选列表的大小,更大的值会增加索引构建的时间,但是提高了更高的召回率。设置它的值小于MaxDegree ,除非我们想要降低索引构建时间 1, int32_max 100
PQCodeBugetGBRatio PQ code的大小限制。更大的值提供了更高的召回率,但是增加了内存的使用 (0.0, 0.25] 0.125
SearchCacheBudgetGBRatio 缓存节点数与原始数据的比率,更大的值提高索引构建的性能,同时增加了内存的使用 [0.0, 0.3) 0.10
BeamWidthRatio 每次查询最大的IO请求和CPU个数之间的比例 1, max(128 / CPU number, 16) 4.0

问题解决

  • 怎么去解决 io_setup() failed; returned -11, errno=11:Resource temporarily unavailable 错误?
    • Linux内核提供了异步非阻塞IO(AIO)特性,它允许进程在不等待它们完成的情况下同时初始化多个I/O操作,这有助于提高计算和I/O叠加的应用程序的性能。
    • 可以在 proc系统文件 /proc/sys/fs/aio-max-nr 来调整此性能,aio-max-nr参数决定了并发请求的最大可允许数量,默认情况下,aio-max-nr值是65535,我们可以设置到10485760.
相关推荐
TheBestRucy1 天前
从零构建企业级“中文法律智能问答系统”:FastAPI+Milvus+混合检索+真流式RAG实战
fastapi·milvus
Flynn Liang2 天前
内存/Redis/PGVector/Milvus/ES 怎么选?Spring AI VectorStore 抽象与向量库选型对照表
redis·elasticsearch·milvus·rag·springai·pgvector·向量库
kyrie_sakura3 天前
大模型学习19 大模型学习 - LangChain2_Retrieval(RAG-文档处理-向量处理检索-Milvus)
学习·langchain·milvus
Maiko Star3 天前
*【HM-LC】Milvus向量库详解:Collection、索引、混合检索与LangChain实战
langchain·milvus
霸道流氓气质5 天前
AI 图片管理平台:Spring AI 原生多模态、Milvus 向量语义检索与 MinIO 预签名安全管控的 React + 全栈生产级实战
人工智能·spring·milvus
一枕槐安4876 天前
多模态RAG实战:PDF图文混合文档检索问答本地跑通
langchain·pdf·milvus·ai应用开发·多模态rag
ai大模型-探索者10 天前
BGE-M3三种向量在Milvus怎么存(稠密、稀疏、多向量)
milvus·稀疏·多向量·稠密
唠点键盘之外的12 天前
29 切片的权限隔离(实战篇):Milvus + Spring AI,从 0 搭一条带权限过滤的检索链路
人工智能·spring·milvus
ai大模型-探索者12 天前
Milvus向量数据库(介绍与使用)
数据库·milvus
Crayon Lin13 天前
Milvus向量数据库入门
数据库·milvus