milvus-logo
LFAI
首页
  • 常见问题

操作常见问题

从 Docker Hub 提取 Milvus Docker 镜像失败怎么办?

如果从 Docker Hub 拉取 Milvus Docker 镜像失败,请尝试添加其他注册镜像。

中国大陆的用户可以在/etc.docker/daemon.json 中的 registry-mirrors 数组中添加网址 "https://registry.docker-cn.com"。

{
  "registry-mirrors": ["https://registry.docker-cn.com"]
}

Docker 是安装和运行 Milvus 的唯一方式吗?

Docker 是部署 Milvus 的有效方法,但不是唯一的方法。你也可以从源代码部署 Milvus。这需要 Ubuntu(18.04 或更高版本)或 CentOS(7 或更高版本)。更多信息,请参阅从源代码构建 Milvus

影响召回率的主要因素是什么?

召回率主要受索引类型和搜索参数的影响。

对于 FLAT 索引,Milvus 在一个 Collection 内进行穷举扫描,100% 返回。

对于 IVF 索引,nprobe 参数决定了 Collections 内的搜索范围。增加 nprobe 会增加搜索到的向量比例和召回率,但会降低查询性能。

对于 HNSW 索引,ef 参数决定图搜索的广度。增加 ef 会增加在图上搜索的点数和召回率,但会降低查询性能。

有关详细信息,请参阅向量索引

为什么我对配置文件的修改没有生效?

Milvus 不支持在运行期间修改配置文件。您必须重新启动 Milvus Docker,配置文件的更改才能生效。

如何知道 Milvus 是否已成功启动?

如果使用 Docker Compose 启动 Milvus,请运行docker ps 观察有多少 Docker 容器正在运行,并检查 Milvus 服务是否正确启动。

对于 Milvus Standalone,应该至少能观察到三个运行中的 Docker 容器,其中一个是 Milvus 服务,其他两个是 etcd 管理和存储服务。有关详细信息,请参阅安装 Milvus Standalone

为什么日志文件中的时间与系统时间不同?

时间不同通常是由于主机不使用协调世界时(UTC)。

Docker 映像中的日志文件默认使用 UTC。如果您的主机不使用 UTC,可能会出现这个问题。

我如何知道我的 CPU 是否支持 Milvus?

Milvus 的操作符取决于 CPU 对 SIMD(单指令、多数据)扩展指令集的支持。您的中央处理器是否支持 SIMD 扩展指令集对 Milvus 中的索引建立和向量相似性搜索至关重要。请确保您的 CPU 至少支持以下一种 SIMD 指令集:

  • SSE4.2
  • AVX
  • AVX2
  • AVX512

运行 lscpu 命令检查 CPU 是否支持上述 SIMD 指令集:

$ lscpu | grep -e sse4_2 -e avx -e avx2 -e avx512

为什么 Milvus 在启动时返回illegal instruction

Milvus 要求 CPU 支持 SIMD 指令集:SSE4.2、AVX、AVX2 或 AVX512。CPU 必须至少支持其中之一,以确保 Milvus 正常操作符。启动过程中返回的illegal instruction 错误说明 CPU 不支持上述四种指令集中的任何一种。

请参阅CPU 对 SIMD 指令集的支持

我可以在 Windows 上安装 Milvus 吗?

可以。您可以通过源代码编译或二进制包在 Windows 上安装 Milvus。

请参阅在 Windows 上运行 Milvus了解如何在 Windows 上安装 Milvus。

我在 Windows 上安装 pymilvus 时出错了。我该怎么办?

不建议在 Windows 上安装 PyMilvus。但如果您必须在 Windows 上安装 PyMilvus,却发现了错误,请尝试在Conda环境中安装。有关如何在 Conda 环境中安装 PyMilvus 的详细信息,请参阅安装 Milvus SDK

断开网络连接后还能部署 Milvus 吗?

可以。您可以在离线环境中安装 Milvus。请参阅离线安装 Milvus获取更多信息。

在哪里可以找到 Milvus 生成的日志?

Milvus 日志默认打印到 stout(标准输出)和 stderr(标准错误),但是我们强烈建议在生产中将日志重定向到持久卷。为此,请更新Milvus.yaml 中的log.file.rootPath 。而如果你用milvus-helm chart 部署 Milvus,也需要先通过--set log.persistence.enabled=true 启用日志持久性。

如果你没有更改配置,使用 kubectl logs <pod-name> 或 docker logs CONTAINER 也能帮你找到日志。

在插入数据之前,我可以为段创建索引吗?

可以。但我们建议在为每个数据段创建索引之前,分批插入数据,每批不应超过 256 MB。

能否在多个 Milvus 实例之间共享一个 etcd 实例?

可以,您可以在多个 Milvus 实例之间共享一个 etcd 实例。为此,在启动每个 Milvus 实例之前,需要在每个实例的配置文件中将etcd.rootPath 更改为单独的值。

能否在多个 Milvus 实例之间共享一个 Pulsar 实例?

可以,你可以在多个 Milvus 实例之间共享一个 Pulsar 实例。为此,你可以

  • 如果在你的 Pulsar 实例上启用了多租户,考虑为每个 Milvus 实例分配一个单独的租户或命名空间。为此,你需要在启动 Milvus 实例之前,将其配置文件中的pulsar.tenantpulsar.namespace 改为每个实例的唯一值。
  • 如果不打算在 Pulsar 实例上启用多租户功能,可考虑在启动 Milvus 实例之前,将其配置文件中的msgChannel.chanNamePrefix.cluster 更改为每个实例的唯一值。

我可以在多个 Milvus 实例之间共享一个 MinIO 实例吗?

可以,您可以在多个 Milvus 实例之间共享一个 MinIO 实例。为此,您需要在启动每个 Milvus 实例之前,在每个实例的配置文件中将minio.rootPath 更改为唯一值。

如何处理pymilvus.exceptions.ConnectionConfigException: <ConnectionConfigException: (code=1, message=Illegal uri: [example.db], expected form 'https://user:pwd@example.com:12345')> 错误信息?

错误信息Illegal uri [example.db] 表明你正在尝试使用早期版本的 PyMilvus 连接 Milvus Lite,而早期版本的 PyMilvus 不支持这种连接类型。要解决这个问题,请将你的 PyMilvus 安装升级到至少 2.4.2 版本,其中包括对连接 Milvus Lite 的支持。

您可以使用以下命令升级 PyMilvus:

pip install pymilvus>=2.4.2

为什么我得到的结果少于我在搜索/查询中设置的limit

有几种原因可能导致您收到的结果少于您指定的limit

  • 数据有限:Collections 可能没有足够的实体来满足您要求的限制。如果 Collections 中的实体总数少于限制,您收到的结果自然也会减少。

  • 主键重复:在搜索过程中遇到主键重复时,Milvus 会优先处理特定实体。这种行为根据搜索类型而有所不同:

  • 查询(完全匹配):Milvus 选择具有匹配 PK 的最新实体。 ANN 搜索:Milvus 会选择相似度得分最高的实体,即使实体共享相同的 PK。 如果您的 Collections 有很多重复的主键,这种优先级可能会导致唯一结果少于限制。

  • 匹配不足:您的搜索过滤表达式可能过于严格,导致符合相似性阈值的实体较少。如果为搜索设置的条件限制性太强,匹配的实体就不够多,导致结果比预期的少。

MilvusClient("milvus_demo.db") gives an error: ModuleNotFoundError: No module named 'milvus_lite'.什么原因导致这种情况,如何解决?

当你尝试在 Windows 平台上使用 Milvus Lite 时,就会出现这个错误。Milvus Lite 主要为 Linux 环境设计,可能不支持 Windows。

解决办法是使用 Linux 环境:

  • 使用基于 Linux 的操作系统或虚拟机来运行 Milvus Lite。
  • 这种方法将确保与库的依赖关系和功能兼容。

Milvus 中的 "长度超过最大长度 "错误是什么,如何理解和解决?

Milvus 中的 "长度超过最大长度 "错误发生在数据元素的大小超过 Collections 或字段的最大允许大小时。下面是一些示例和解释:

  • JSON 字段错误:<MilvusException: (code=1100, message=the length (398324) of json field (metadata) exceeds max length (65536): expected=valid length json string, actual=length exceeds max length: invalid parameter)>

  • 字符串长度错误:<ParamError: (code=1, message=invalid input, length of string exceeds max length. length: 74238, max length: 60535)>

  • VarChar 字段错误:<MilvusException: (code=1100, message=the length (60540) of 0th VarChar paragraph exceeds max length (0)%!(EXTRA int64=60535): invalid parameter)>

要理解和处理这些错误,请

  • 要理解len(str) 在 Python 中代表的是字符数,而不是以字节为单位的大小。
  • 对于基于字符串的数据类型,如 VARCHAR 和 JSON,使用len(bytes(str, encoding='utf-8')) 来确定以字节为单位的实际大小,这就是 Milvus 使用的 "max-length"。

Python 示例

# Python Example: result of len() str cannot be used as "max-length" in Milvus 
>>> s = "你好,世界!"
>>> len(s) # Number of characters of s.
6
>>> len(bytes(s, "utf-8")) # Size in bytes of s, max-length in Milvus.
18

pymilvus.exceptions.ConnectionConfigException: <ConnectionConfigException: (code=1, message=Illegal uri: [example.db], expected form 'https://user:pwd@example.com:12345')>.什么原因导致这种情况,如何解决?

这个错误表明,你试图使用不支持 Milvus Lite 的早期版本 pymilvus 连接 Milvus Lite。要解决这个问题,请将你的 pymilvus 至少升级到 2.4.2 版。该版本支持连接 Milvus Lite。要升级,请使用以下命令:

pip install pymilvus>=2.4.2

仍有问题?

你可以

  • 查看 GitHub 上的Milvus。随时提问、分享想法并帮助其他用户。
  • 加入我们的Milvus 论坛Slack 频道,寻求支持并参与我们的开源社区。

翻译自DeepL

想要更快、更简单、更好用的 Milvus SaaS服务 ?

Zilliz Cloud是基于Milvus的全托管向量数据库,拥有更高性能,更易扩展,以及卓越性价比

免费试用 Zilliz Cloud
反馈

此页对您是否有帮助?