運用に関するFAQ
Docker HubからのMilvus Dockerイメージのpullに失敗した場合は?
Docker HubからのMilvus Dockerイメージの引き抜きに失敗した場合は、他のレジストリミラーを追加してみてください。
中国本土のユーザは、/etc.docker/daemon.jsonのregistry-mirrors配列に "https://registry.docker-cn.com "というURLを追加することができます。
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
Milvusをインストールし、実行する唯一の方法はDockerですか?
DockerはMilvusの効率的なデプロイ方法ですが、唯一の方法ではありません。ソースコードからMilvusをデプロイすることもできます。これにはUbuntu (18.04以上) または CentOS (7以上) が必要です。詳しくはMilvusをソースコードからビルドするをご覧ください。
再現率に影響を与える主な要因は何ですか?
検索結果は主にインデックスタイプと検索パラメータに影響されます。
FLATインデックスの場合、Milvusはコレクション内を網羅的にスキャンし、100%の検索結果を返します。
IVFインデックスでは、nprobeパラメータがコレクション内の検索範囲を決定します。nprobeを増加させると、検索されるベクトルの割合が増加し、リコールが増加しますが、クエリ性能は低下します。
HNSWインデックスでは、efパラメータがグラフ検索の幅を決定する。efを増加させると、グラフ上で検索されるポイント数が増加し、リコールも増加しますが、クエリ性能は低下します。
詳細については、ベクトル・インデックスを参照してください。
設定ファイルを変更しても反映されません。
Milvusは実行中の設定ファイルの変更をサポートしていません。設定ファイルの変更を有効にするには、Milvus Dockerを再起動する必要があります。
Milvusが正常に起動したかどうかはどのように確認できますか?
Docker Composeを使用してMilvusを起動した場合、docker ps
、実行中のDockerコンテナ数を確認し、Milvusのサービスが正常に起動したかどうかを確認してください。
Milvusスタンドアロンの場合、少なくとも3つのDockerコンテナが動作していることが確認できるはずです。1つはMilvusサービス、残りの2つはetcd管理とストレージサービスです。詳細については、Milvusスタンドアロンのインストールを参照してください。
ログファイルの時刻がシステム時刻と異なるのはなぜですか?
時間の違いは通常、ホストマシンが協定世界時(UTC)を使用していないことが原因です。
Dockerイメージ内のログファイルはデフォルトでUTCを使用しています。ホストマシンがUTCを使用していない場合、この問題が発生する可能性があります。
自分のCPUがMilvusに対応しているかどうかは、どうすれば分かりますか?
Milvusの演算処理は、CPUがSIMD(Single Instruction, Multiple Data)拡張命令セットをサポートしているかどうかに依存します。お使いのCPUがSIMD拡張命令セットに対応しているかどうかは、Milvusのインデックス構築およびベクトル類似検索において非常に重要です。CPUが以下のSIMD命令セットの少なくとも1つをサポートしていることを確認してください:
- 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です。Milvusが正常に動作するためには、CPUがこれらのうち少なくとも1つをサポートしている必要があります。起動時に返されるillegal instruction
のエラーは、CPUが上記4つの命令セットのいずれにも対応していないことを示唆しています。
CPUのSIMD命令セット対応状況をご覧ください。
MilvusをWindowsにインストールできますか?
MilvusをWindowsにインストールするには、ソースコードからコンパイルする方法とバイナリパッケージからコンパイルする方法があります。
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をmilvus-helm
チャートでデプロイする場合、--set log.persistence.enabled=true
を使ってログの永続化を有効にする必要があります。
設定を変更していない場合は、kubectl logs <pod-name>やdocker logs CONTAINERを使ってもログを見つけることができます。
セグメントにデータを挿入する前にインデックスを作成できますか?
はい、できます。しかし、各セグメントにインデックスを作成する前に、256MBを超えない範囲でまとめてデータを挿入することをお勧めします。
複数のMilvusインスタンス間でetcdインスタンスを共有できますか?
複数のMilvusインスタンス間でetcdインスタンスを共有することは可能です。そのためには、Milvusインスタンスを起動する前に、各Milvusインスタンスの設定ファイルでetcd.rootPath
を別々の値に変更する必要があります。
複数のMilvusインスタンス間でPulsarインスタンスを共有できますか?
はい、複数のMilvusインスタンス間でPulsarインスタンスを共有することができます。そのためには
- Pulsarインスタンスでマルチ・テナントが有効になっている場合は、Milvusインスタンスごとに個別のテナントまたはネームスペースを割り当てることを検討してください。そのためには、Milvusインスタンスを起動する前に、Milvusインスタンスの設定ファイル内の
pulsar.tenant
またはpulsar.namespace
をそれぞれ固有の値に変更する必要があります。 - Pulsarインスタンスでマルチテナントを有効にする予定がない場合は、Milvusインスタンスを起動する前に、Milvusインスタンスの構成ファイル内の
msgChannel.chanNamePrefix.cluster
。
複数のMilvusインスタンス間でMinIOインスタンスを共有できますか?
複数のMilvusインスタンス間でMinIOインスタンスを共有することは可能です。そのためには、Milvusインスタンスを起動する前に、それぞれの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を、Milvus Liteへの接続がサポートされているバージョン2.4.2以上にアップグレードしてください。
PyMilvus は以下のコマンドでアップグレードできます:
pip install pymilvus>=2.4.2
検索/クエリで設定したlimit
よりも少ない結果しか得られないのはなぜですか?
指定したlimit
より少ない結果しか得られない理由はいくつかあります:
データが限られている:限られたデータ: コレクションには、要求した制限を満たすのに十分なエンティティがない可能性があります。コレクション内のエンティティの総数が制限を下回ると、当然、結果が少なくなります。
主キーの重複:Milvusは、検索中に主キーの重複に遭遇した場合、特定のエンティティを優先します。この動作は検索タイプによって異なります:
クエリ (完全一致):ANN検索: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の "length exceeds max length "エラーとは何ですか?
Milvusの "Length exceeds max length "エラーは、データ要素のサイズがコレクションまたはフィールドの最大許容サイズを超えた場合に発生します。以下はその例と説明です:
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)>
これらのエラーを理解し、対処する:
- Pythonの
len(str)
はバイト数ではなく文字数を表すことを理解してください。 - 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
まだ質問がありますか?
できます:
- GitHubでMilvusをチェックしてください。自由に質問したり、アイデアを共有したり、他の人を助けたりしてください。
- Milvusフォーラムや Slackチャンネルに参加して、オープンソースコミュニティに参加しましょう。