服务端配置

Milvus 文件结构

成功启动 Milvus 服务后,你可以在 home/$USER/milvus 的路径下看到 Milvus 的文件夹。其中包含以下文件:

  • milvus/db(数据库存储)
  • milvus/conf(设置文件)

    • server_config.yaml(服务设置)

你可以直接编辑配置文件对配置进行修改。如果修改了配置文件,你必须重启 Milvus 服务来启用新的更改。

下面以 Milvus 的系统配置文件 server_config.yaml 为例,演示如何修改日志级别和日志存储路径:

运行时修改

你可以使用 Milvus 客户端对 server_config.yaml 的配置进行运行时修改。详情请参考客户端参考

  • cache 区域

    • cache_size
    • insert_buffer_size
  • gpu 区域

    • enable
    • cache_size
    • gpu_search_threshold
    • search_devices
    • build_index_devices

对于其它参数,你必须重新启动 Milvus 才能使改动生效。

若有任何疑问,欢迎在 GitHub 上给我们 或是 加入 Slack 社区讨论

cluster 区域

参数说明类型默认值
timezone使用 UTC-x 或 UTC+x 来指定时区。比如,可以使用 UTC+8 来代表中国标准时间。TimezoneUTC+8
meta_uri元数据存储的 URI。可以使用 SQLite(Milvus 单机版本)或者 MySQL(Milvus 分布式版本)来存储元数据。URI 格式为 dialect://username:password@host:port/database。其中,dialect 可以是 sqlite 或者 mysql,其他文字需要替换成实际值。URIsqlite://:@:/

network 区域

参数说明类型默认值
bind.addressMilvus 服务端监听的 IP 地址。IP0.0.0.0
bind.portMilvus 服务端监听的端口号,范围:[1025, 65534]。Integer19530
http.enable是否开启 HTTP 服务。
  • true:开启 HTTP 服务。
  • false:不开启 HTTP 服务。
Booleantrue
Milvus HTTP 服务监听的端口号,范围:[1025, 65534]。Integer19121

storage 区域

参数说明类型默认值
enable是否开启 WAL(Write-Ahead Logging,预写式日志)。如果启用 WAL,Milvus 会在更改数据之前将所有数据更改写入日志文件。WAL 确保 Milvus 操作的原子性和耐用性。
  • false:不开启 WAL。
Booleantrue
recovery_error_ignore在通过 WAL 执行恢复操作时,是否忽略出现错误的日志。
  • true:Milvus 重启恢复时,忽略错误的日志。
  • false:Milvus 重启恢复时,会因错误的日志启动失败。
Booleanfalse
buffer_sizeWAL 缓冲区大小,范围:64MB ~ 4096MB。建议该值大于单次插入的数据量两倍,以获取更好的性能。格式请见 空间大小的格式String256MB
path预写式日志文件存储路径。String/var/lib/milvus/wal

cache 区域

参数说明类型默认值
cache_size内存中用于驻留搜索数据的缓存空间大小。cache_sizeinsert_buffer_size 之和不能超过内存总量。格式请见 空间大小的格式String4GB
insert_buffer_size用于数据导入的缓冲区所使用的内存量。cache_sizeinsert_buffer_size 之和不能超过内存总量。格式请见 。String1GB
preload_collection在 Milvus 开启时,需要加载的集合列表。
  • 若要加载所有集合,使用 (包含引号)。例如:preload_collection=’
  • 若要加载指定集合,列出需要加载的集合名(用引号包围每个集合名,并用逗号隔开相邻集合)。例如:preload_collection=[‘collection1’,’collection2’]
StringListN/A

gpu 区域

在该区域选择是否在 Milvus 里启用 GPU 用于搜索和索引创建。同时使用 CPU 和 GPU 可以达到资源的最优利用,在特别大的数据集里做搜索时性能更佳。

在 Milvus 里,创建索引和搜索是两个独立分开的过程,可以只在 CPU,或同时在 CPU 和 GPU 里进行。通过将 GPU 添加至 search_devices 或者 build_index_devices 下方,你可以指定多个 GPU 设备来进行创建索引或搜索。请参考下面的 YAML 示例代码:

参数说明类型默认值
level日志打印的最低级别。日志级别:debug < info < warning < error < fatalStringdebug
trace.enable是否开启 trace 级别日志打印。
  • true:开启 trace 级别日志打印。
  • false:不开启 trace 级别日志打印。
Booleantrue
path日志存储路径。String/var/lib/milvus/logs
max_log_file_size单个日志文件的大小限制,范围:1024MB ~ 4096MB。格式请见 。Integer1024MB
log_rotate_num每个日志级别最多保存的文件数量,范围:[0, 1024]。0 代表日志文件数无限制。Integer0

metric_config 区域

参数说明类型默认值
enable是否开启 Prometheus 监控。
  • true:开启 Prometheus 监控。
  • false:不开启 Prometheus 监控。
Booleanfalse
address访问 Prometheus Pushgateway 的 IP 地址。IP127.0.0.1
port访问 Prometheus Pushgateway 的端口号。范围:[1025, 65534]。Integer9091

在 Milvus 配置文件中,空间大小的格式为“数字+单位”,如“4GB”。

  • 数字和单位之间没有空格。
  • 数字必须是整数。
  • 可选单位为 GB、MB、KB。

除了配置文件外,怎样可以判断我确实在使用 GPU 做搜索?

有以下三种方式:

  • 使用 nvidia-smi 命令查看 GPU 使用情况。
  • 使用 Milvus 服务端的日志。

如果设置了 preload_collection,必须是等集合全部加载到内存,服务才能访问吗? 是的。如果是在 server_config.yaml 里设置的,那在启动 Milvus 时就会加载好数据后才开始提供服务。 为什么查询时 GPU 一直空闲?

为什么我的日志文件时间与系统时间不一致? Docker 镜像内部的日志文件默认使用 UTC 时间。如果宿主机未使用 UTC 时间,就会出现日志文件时间与系统时间不一致的情况。建议在宿主机上挂载日志文件,这样可以保证宿主机上的日志文件和系统时间是一致的。