链载Ai

标题: 一文读懂Milvus核心参数,十分钟解决80% 的配置问题 [打印本页]

作者: 链载Ai    时间: 昨天 18:04
标题: 一文读懂Milvus核心参数,十分钟解决80% 的配置问题

前言

最近在社区里经常听到一些小伙伴说,Milvus 的配置参数有几百个,这些参数究竟该怎么配置,Milvus 才能获得最佳的性能和稳定性。打开 Milvus 的配置文件 milvus.yaml,各个功能模块,从基础设施(存储、消息队列)到业务功能(查询、写入、索引),总共参数加起来超过了 500 多个,对于刚接触 Milvus 的朋友来说,确实无从下手。

其实 Milvus 的配置参数虽然很多,但是大部分的参数,我们平时基本都不需要关注,只需要深入理解其中的一些核心配置参数,就可以把 Milvus 运维得很好了。今天我们就从 milvus.yaml 入手,按照配置文件中的章节顺序,带大家一起来解读 Milvus 的核心配置参数及调优方案。

Milvus 的配置参数大体可以分为三大类:

01

Milvus 依赖组件配置

1.etcd

第一个依赖是 etcd, 这部分重点需要关注的配置有三个:

2.minio

第二个依赖是 minio,虽然这个模块的名字是"minio",但是在 Milvus 中,它其实指代的是所有的 OSS(Object Storage Service) client。

换言之,我们总是使用 minio client 来操作所有的 OSS,可以是 S3、GCS、Aliyun OOS 或其他,通过这个模块下的 cloudProvider 参数配置 OSS 提供商。这块需要关注的重点配置有四个:

3.mq

最后一个依赖是消息队列 mq,也有三个配置值得重点关注:

Milvus 也支持 Kafka 作为 mq,开启时需要注释掉 pulsar 的相关配置,然后关闭 Kafka 配置的注释。

02

Milvus 自身组件配置

1.rootcoord

Milvus 第一个自身组件是 rootcoord,主要用来处理 DDL(data definition language)、DCL(data control language) 请求以及时间戳服务 TSO 的管理。这个组件需要关注如下几个配置:

2.proxy

Proxy 是 Milvus 用来接收和验证请求以及做结果合并的组件,里面需要关注的参数有:

3.querynode

Querycoord 负责监控管理 querynode 的状态以及节点间的负载均衡,配置基本都是内部使用,用户不需要关注太多,所以我们就跳过 querycoord 直接到 querynode。querynode 的配置参数很多,作为用户重点关注一个参数即可:

4.datacoord

Indexnode 没有用户侧需要关注的参数,我们直接跳过进入到 datacoord。datacoord 主要负责数据段(segment)的大小、生命周期,以及压缩管理,同时负责数据的垃圾回收。同时,之前的 indexcoord 的功能也合并进了 datacoord,所以现在的 datacoord 还负责 create index,indexnode 索引任务调度等职责。这块重点关注如下参数:

Datanode 是负责数据写入落盘的节点,相关的配置使用默认的参数即可,这里就不展开赘述了。

03

其他功能配置

1.log

Milvus 是一个组件众多的分布式系统,日志是帮助我们进行 trouble shooting 重要的工具,对于每一个用户都需要认真配置,推荐使用 Loki 这类专业的日志采集工具来收集分析 Milvus 的日志。

2.security

Milvus 支持用户鉴权,以及基于角色的权限管控(RBAC),相关配置在 common 模块下:

3.quotaAndLimits

quotaAndLimits 是 milvus.yaml 里占用篇幅很大的一块内容。Milvus 提供了非常多的限流的配置,包括写入、删除、查询等等。我们重点关注以下几个配置:

04

场景示例

通过前面的梳理,大家应该对 Milvus 里的核心配置参数有了一定了解,接下来我们再通过两个常见场景,告诉大家如何灵活配置使用这些参数。

Case 1:Performance First

对于性能要求比较高的场景,比如推荐系统,金融风控,大家一般都会选择图索引,Milvus 支持的常见图索引:HNSW,DISKANN。除了索引选择外,一般会同时配合调节如下参数:

Case2Cost First

对于性能要求不严苛,但是成本比较敏感的场景,比如自动驾驶模型训练中的 corner case 图片搜索,超大规模知识库系统,我们可以利用索引量化或磁盘+内存的方式,在有限内存里装更多的数据,当然这样做的代价就是牺牲召回率或性能。索引的量化包括 SCANN,IVF_SQ8,以及 Milvus 2.5 推出的 HNSW_SQ/PQ/PRQ 索引;而使用磁盘的方式,一是可以使用磁盘索引,创建 Index 的时候选择 DISKANN 类型。第二种则是在配置文件中开启 mmap:

如果对于成本非常敏感,对于性能没有要求,推荐将 vectorField、vectorIndex、scalarField、scalarIndex 的 mmap 开关都打开。如果查询过程中需要用到标量字段且希望标量过滤性能足够快,可以将 vectorIndex、scalarIndex 的 mmap 开关关掉,来加速标量搜索的性能。需要注意的是,配合 mmap 使用的常见索引是 HNSW,这个索引会比原始数据膨胀 1.8 倍左右。所以当挂载了 100G 的磁盘,实际能装的数据只有 50G 左右,如果将原始数据也缓存到磁盘上,那么实际能装的数据就会更少,需要提前规划好磁盘空间。

05

结语

对于刚开始接触 Milvus 的朋友,把上面的这些参数理解清楚并进行正确配置,基本可以解决 80% 的配置使用问题。等对 Milvus 有了一定的使用经验和理解之后,推荐大家再次打开 milvus.yaml,对里面其他的配置参数,结合注释和源码去做更加深入地学习,相信又会有很多新的体悟。






欢迎光临 链载Ai (https://www.lianzai.com/) Powered by Discuz! X3.5