Часто задаваемые вопросы по эксплуатации

Что такое делегатор QueryNode и каковы его обязанности?

Когда коллекция загружается, узел QueryNode подписывается на каналы DML для сообщений вставки и удаления, поступающих из очереди сообщений. Узел QueryNode, который подписывается на эти каналы, известный как делегатор, отвечает за:

  • Управление растущими сегментами, требующими дополнительной памяти из-за продолжающихся вставок.
  • Получение сообщений об удалении и передача их другим узлам запроса, которые содержат соответствующие сегменты.

Как определить узлы-делегаторы для коллекции?

Используйте Birdwatcher.

Установите Birdwatcher, следуя этой инструкции, а затем выполните следующую команду:

./birdwatcher
# Find delegator nodes for your collection
Milvus(my-release) > show segment-loaded-grpc --collection <your-collectionID>

ServerID 2
Channel by-dev-rootcoord-dml_2, collection: 430123456789, version 1
Leader view for channel: by-dev-rootcoord-dml_2
Growing segments count: 1, ids: [430123456789_4]

# Map server ID to pod IP
Milvus(my-release) > show session

Node(s) querynode
        ID: 1        Version: 2.4.0        Address: 10.0.0.4:19530
        ID: 2        Version: 2.4.0        Address: 10.0.0.5:19530
        ID: 3        Version: 2.4.0        Address: 10.0.0.6:19530

Какие параметры можно настроить, если использование памяти узла запроса неравномерно?

Иногда память узла запроса изменяется, потому что некоторые узлы выступают в роли делегаторов, используя больше оперативной памяти. Если память делегатора велика, настройте queryCoord.delegatorMemoryOverloadFactor, чтобы разгрузить запечатанные сегменты на другие узлы и уменьшить использование оперативной памяти.

  • Значение по умолчанию равно 0,1.
  • Увеличение этого значения (например, до 0,3 или выше) приведет к тому, что система будет выгружать больше сегментов с перегруженным делегатором на другие узлы QueryNodes, помогая сбалансировать использование памяти. Также вы можете попробовать увеличить значение до 1, что означает, что в узлы делегатора не будут загружаться сегменты с уплотнениями.

Если вы не хотите перезапускать кластер, вы можете изменить конфигурацию milvus с помощью birdwatcher:

./birdwatcher
Offline > connect --etcd <your-etcd-ip>:2379 --auto

# Change delegatorMemoryOverloadFactor to 0.3 without restart, default value is 0.1
set config-etcd --key queryCoord.delegatorMemoryOverloadFactor --value 0.3

Как задать shard_num для коллекции?

В качестве лучшей практики, для коллекции с векторами размерности 768, рекомендуется использовать как минимум 1 шард на ~100 миллионов векторов. Для случаев интенсивной записи используйте 4 шарда на ~100 миллионов векторов.

Например, если у вас 100 миллионов векторов, используйте 1-4 шарда. Если у вас 500 миллионов векторов, используйте 5-10 осколков.

Что делать, если не удалось извлечь образ Milvus Docker из Docker Hub?

Если вам не удалось извлечь образ Milvus Docker из Docker Hub, попробуйте добавить другие зеркала реестра.

Пользователи из материкового Китая могут добавить URL "https://registry.docker-cn.com" в массив registry-mirrors в файле /etc.docker/daemon.json.

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

Является ли Docker единственным способом установки и запуска Milvus?

Docker - это эффективный способ развертывания Milvus, но не единственный. Вы также можете развернуть Milvus из исходного кода. Для этого требуется Ubuntu (18.04 или выше) или CentOS (7 или выше). Дополнительные сведения см. в разделе "Сборка Milvus из исходного кода".

Какие основные факторы влияют на отзыв?

На отзыв в основном влияют тип индекса и параметры поиска.

Для FLAT-индекса Milvus выполняет исчерпывающее сканирование внутри коллекции со 100-процентным возвратом.

Для индексов IVF параметр nprobe определяет объем поиска в коллекции. Увеличение параметра nprobe увеличивает долю искомых векторов и возврат, но снижает производительность запроса.

Для индекса HNSW параметр ef определяет широту поиска в графе. Увеличение ef увеличивает количество искомых точек на графе и запоминание, но снижает производительность запроса.

Дополнительные сведения см. в разделе Векторное индексирование.

Почему мои изменения в конфигурационных файлах не вступили в силу?

Milvus не поддерживает изменение конфигурационных файлов во время выполнения. Чтобы изменения в файлах конфигурации вступили в силу, необходимо перезапустить Milvus Docker.

Как узнать, что Milvus успешно запустился?

Если Milvus запущен с помощью Docker Compose, запустите docker ps, чтобы посмотреть, сколько контейнеров Docker запущено, и проверить, правильно ли запущены службы Milvus.

Для автономного Milvus вы должны наблюдать как минимум три запущенных Docker-контейнера, один из которых - служба Milvus, а два других - служба управления и хранения etcd. Для получения дополнительной информации см. раздел Установка Milvus Standalone.

Почему время в файлах журнала отличается от системного времени?

Разница во времени обычно связана с тем, что хост-машина не использует универсальное координированное время (UTC).

В файлах журнала внутри образа Docker по умолчанию используется UTC. Если на вашей хост-машине не используется UTC, может возникнуть такая проблема.

Как узнать, поддерживает ли мой процессор Milvus?

Вычислительные операции Milvus зависят от поддержки процессором набора инструкций расширения SIMD (Single Instruction, Multiple Data). Поддержка вашим процессором набора инструкций расширения SIMD имеет решающее значение для построения индексов и поиска векторного сходства в Milvus. Убедитесь, что ваш процессор поддерживает хотя бы один из следующих наборов инструкций SIMD:

  • SSE4.2
  • AVX
  • AVX2
  • AVX512

Выполните команду lscpu, чтобы проверить, поддерживает ли ваш процессор указанные выше наборы SIMD-инструкций:

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

Почему Milvus возвращает illegal instruction при запуске?

Milvus требует, чтобы ваш процессор поддерживал набор SIMD-инструкций: SSE4.2, AVX, AVX2 или AVX512. Для нормальной работы Milvus процессор должен поддерживать хотя бы одну из них. Ошибка illegal instruction, возвращаемая при запуске, указывает на то, что ваш процессор не поддерживает ни один из четырех вышеперечисленных наборов инструкций.

См. раздел Поддержка процессором набора инструкций SIMD.

Могу ли я установить Milvus на Windows?

Да. Вы можете установить Milvus на Windows, скомпилировав его из исходного кода или из бинарного пакета.

О том, как установить Milvus на Windows, читайте в разделе Запуск Milvus на Windows.

Я получил ошибку при установке pymilvus на Windows. Что мне делать?

Попробуйте использовать следующую команду, чтобы обновить pymilvus до последней версии.

pip install --upgrade pymilvus

Могу ли я установить Milvus, отключившись от Интернета?

Да. Вы можете установить Milvus в автономной среде. Дополнительные сведения см. в разделе Установка Milvus в автономном режиме.

Где я могу найти журналы, сгенерированные Milvus?

По умолчанию журнал Milvus печатается в stout (стандартный вывод) и stderr (стандартная ошибка), однако мы настоятельно рекомендуем перенаправлять журнал на постоянный том в производстве. Для этого обновите log.file.rootPath в milvus.yaml. Если вы развертываете Milvus с графиком milvus-helm, вам также необходимо сначала включить персистентность журнала через --set log.persistence.enabled=true.

Если вы не меняли конфигурацию, найти журнал можно с помощью kubectl logs или docker logs CONTAINER.

Могу ли я создать индекс для сегмента перед вставкой в него данных?

Да, можно. Но мы рекомендуем вставлять данные партиями, каждая из которых не должна превышать 256 МБ, перед индексацией каждого сегмента.

Могу ли я использовать один экземпляр etcd совместно с несколькими экземплярами Milvus?

Да, вы можете использовать один экземпляр etcd совместно с несколькими экземплярами Milvus. Для этого вам нужно изменить etcd.rootPath на отдельное значение для каждого экземпляра Milvus в конфигурационных файлах каждого из них перед их запуском.

Могу ли я разделить экземпляр Pulsar между несколькими экземплярами Milvus?

Да, вы можете использовать один экземпляр Pulsar совместно с несколькими экземплярами Milvus. Для этого вы можете

  • Если на экземпляре Pulsar включена многопользовательская среда, выделите для каждого экземпляра Milvus отдельного арендатора или пространство имен. Для этого перед запуском необходимо изменить pulsar.tenant или pulsar.namespace в конфигурационных файлах экземпляров Milvus на уникальное значение для каждого из них.
  • Если вы не планируете включать многопользовательский режим на экземпляре Pulsar, перед запуском следует изменить msgChannel.chanNamePrefix.cluster в конфигурационных файлах экземпляров Milvus на уникальное значение для каждого из них.

Могу ли я разделить экземпляр MinIO между несколькими экземплярами Milvus?

Да, вы можете разделить экземпляр MinIO между несколькими экземплярами Milvus. Для этого вам нужно изменить minio.rootPath на уникальное значение для каждого экземпляра Milvus в конфигурационных файлах каждого из них перед запуском.

Как мне справиться с сообщением об ошибке pymilvus.exceptions.ConnectionConfigException: <ConnectionConfigException: (code=1, message=Illegal uri: [example.db], expected form 'https://user:pwd@example.com:12345')>?

Сообщение об ошибке Illegal uri [example.db] указывает на то, что вы пытаетесь подключиться к Milvus Lite, используя более раннюю версию PyMilvus, которая не поддерживает этот тип соединения. Чтобы решить эту проблему, обновите свою установку PyMilvus как минимум до версии 2.4.2, которая включает поддержку подключения к Milvus Lite.

Обновить PyMilvus можно с помощью следующей команды:

pip install pymilvus>=2.4.2

Почему я получаю меньше результатов, чем limit, которые я задал в своем поиске/запросе?

Есть несколько причин, по которым вы можете получить меньше результатов, чем указанный вами limit:

  • Ограниченные данные: В коллекции может быть недостаточно сущностей, чтобы выполнить запрошенный вами лимит. Если общее количество сущностей в коллекции меньше установленного лимита, вы, естественно, получите меньше результатов.

  • Дублирование первичных ключей: Milvus отдает приоритет определенным сущностям, когда во время поиска встречаются дубликаты первичных ключей. Это поведение зависит от типа поиска:

  • Запрос (точное совпадение): Milvus выбирает последнюю сущность с совпадающим PK. ANN Search: Milvus выбирает сущность с наибольшим показателем сходства, даже если сущности имеют одинаковый PK. Такая расстановка приоритетов может привести к получению меньшего количества уникальных результатов, чем предел, если в вашей коллекции много дублирующихся первичных ключей.

  • Недостаточное количество совпадений: Выражения фильтрации поиска могут быть слишком строгими, в результате чего меньшее количество сущностей удовлетворяет порогу сходства. Если условия поиска слишком строгие, то совпадет недостаточно сущностей, что приведет к меньшему количеству результатов, чем ожидалось.

MilvusClient("milvus_demo.db") gives an error: ModuleNotFoundError: No module named 'milvus_lite'. Что вызывает эту ошибку и как ее решить?

Эта ошибка возникает при попытке использовать Milvus Lite на платформе Windows. Milvus Lite в основном разработан для Linux и может не иметь встроенной поддержки Windows.

Решение заключается в использовании среды Linux:

  • Используйте операционную систему на базе Linux или виртуальную машину для запуска Milvus Lite.
  • Такой подход обеспечит совместимость с зависимостями и функциональностью библиотеки.

Что такое ошибки "длина превышает максимальную" в Milvus, и как их понять и устранить?

Ошибки "Длина превышает максимальную длину" в Milvus возникают, когда размер элемента данных превышает максимально допустимый размер для коллекции или поля. Вот несколько примеров и объяснений:

  • Ошибка поля 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, которая не поддерживает его. Чтобы решить эту проблему, обновите свою установку pymilvus, по крайней мере, до версии 2.4.2. Эта версия поддерживает подключение к Milvus Lite. Для обновления используйте следующую команду:

pip install pymilvus>=2.4.2

У вас остались вопросы?

Вы можете:

  • Ознакомиться с Milvus на GitHub. Не стесняйтесь задавать вопросы, делиться идеями и помогать другим.
  • Присоединяйтесь к нашему форуму Milvus или каналу Discord, чтобы найти поддержку и принять участие в работе нашего сообщества разработчиков с открытым исходным кодом.

Попробуйте Managed Milvus бесплатно

Zilliz Cloud работает без проблем, поддерживается Milvus и в 10 раз быстрее.

Начать
Обратная связь

Была ли эта страница полезной?