1. 背景最近ベクトル検索を使用したので、milvus でストレス テストを実行する必要があります。同時に、ストレステストで発生した問題をさらに分析するために、milvus のソースコードとドキュメントもいくつか読みました。私たちはいくつかの問題や疑問に遭遇し、milvus コミュニティやオープンソースの貢献者と直接コミュニケーションを取りました。 ストレステストを通じて、特定のシナリオではmilvusのパフォーマンスを改善できないことが判明し、そのシナリオに基づいたソリューションを提供しました。コミュニティはミルバスの役員にフィードバックしました。 以下は、milvus の設計とストレス テストで発生した問題とその解決策またはフォローアップ プランです。 2. ベクトル検索とmilvus2.1 ベクトル検索ベクトル検索は ANNS と略され、完全な英語名は approximate Nearest Neighbor Search です。一般的な概念は、多数のベクトルの中からターゲット ベクトルに最も近い N 個のベクトルを見つけることです。最も単純かつ大雑把な検索方法はブルートフォース検索ですが、インデックスを拡張し、大規模クエリの QPS を向上させることで検索速度を高速化できます。 現在のベクトル インデックスは、ツリー ベース インデックス、グラフ ベース インデックス、ハッシュ ベース インデックス、量子化ベース インデックスの 4 つのカテゴリに分類できます。その中で、グラフ アプローチは、再現率が高く、パフォーマンスが優れており、最適化後のアイデアが豊富なため、際立っています。 2.2 ミルバスmilvus (主にバージョン 2.0 以上用) は、ベクター挿入、ANNS 検索などをサポートするメタネイティブ ベクター データベースです。Milvus は、大量のベクター データを非常にうまく処理できます。ベクトル類似度計算の分野でよく知られているいくつかのオープンソースライブラリ (Faiss、SPTAG など) を統合し、データとハードウェアの計算能力の合理的なスケジュール設定を通じて最適な検索パフォーマンスを実現します。 公式サイト: https://milvus.io/ 3. Milvus アーキテクチャの紹介3.1 Milvusデータセットの概念データセットの概念:
公式ウェブサイトには、データセットの読み取りと書き込みの例が掲載されています: https://milvus.io/docs/v2.1.x/example_code.md データセットクエリツール: https://github.com/milvus-io/birdwatcher 以下は、birdwatcher を使用してコレクションとセグメントの情報を表示します。 上記の出力結果がツールに変換されました。 etcd 内の特定のセグメントに関するすべての情報: 、 3.2 milvus アーキテクチャ図milvus 公式サイトで提供されているアーキテクチャ図は次のとおりです。 グループは次のカテゴリに分類できます。 上記のマイクロサービスの機能を簡単に紹介します。
上記から、マイクロサービスが多数存在し、マイクロサービス間の通信方法は主に以下の通りであることがわかります。 4. Milvusベクターの書き込みと読み取りリンク4.1 milvus ベクター書き込みパス
3.2 milvus ベクター検索パス現在の最新バージョン 2.1.4 の以下の読み取りプロセスは、インターネット上の読み取りプロセス バージョン リンクと異なるため、修正する必要があります。
5. milvusストレステストの問題分析ストレステストバージョン: milvus-2.1.4 データ次元: 512dim 索引: 5.1 ストレステストの結果
5.2 ストレステストにおける問題と分析QPS と CPU 使用率は増加できず、CPU が 50% を超える可能性は低くなります。 (最適化済み)現象の説明:ストレステスト中に、QPS を増やすことができないことが判明しました。慎重に調査した結果、クエリ ノードの CPU 使用率を増やすことができず、QPS が増加しないことが判明しました。
このパラメータは主に、検索タスクの CPU 使用率を評価するために使用されます。パラメータが高くなるほど、タスクが使用する CPU が多くなります。スケジュール設定時に、複数のタスクによる並列クエリの数が少なくなります。今のところ、並列タスクが多すぎて高い QPS を達成できないのではないかと考えています。 Milvus はこのパラメータ設定を公開していませんが、問題/機能強化を通じて Milvus コミュニティに提出しました。以降のバージョンではいくつかの最適化が行われる予定です。 クエリノードを展開した後、短期間でセグメントが自動的にバランス調整されない(疑わしい、フォローアップ)現象の説明:
長期間にわたって大規模な書き込みが継続すると、大量の成長セグメントが生成され、クエリのパフォーマンスが低下します(後述)。
私はこの問題について milvus コミュニティのメンテナーに相談しており、引き続き原因を突き止めて改善に努めていきます。 バージョンアップ後、元のデータに互換性がない(解決方法あり)。 バージョンアップ後、元のデータに互換性がない(解決方法あり)。
数千万のデータポイントでは、ストレステストの QPS は期待を満たすことができません (フォローアップが必要)
たとえば、次の例では 32 コア 16G を 2 つ使用します。
デプロイメントを通じて容量を拡大または縮小しないでください。Helm を通じて行うようにしてください。
そのため、公式サイトでもスムーズに容量拡張するためにはhelmを使うようにすることを推奨しています。 6. まとめストレステスト後、milvus は当社の現在のビジネス シナリオを満たすことができます。上記のストレス テストで残った問題のいくつか、たとえば、多数のセグメントの問題、ノードの拡張、その他の問題などについては、現在も追跡中です。これらの問題は 100% 発生するわけではなく、一部は当社の厳しいテスト条件下でのみ発生します。私たちは引き続きテストを行い、原因を特定し、さらなる最適化のためにコミュニティにフィードバックを提供していきます。上記のストレステストで使用されるインデックスは FLAT です。より高いパフォーマンスを実現するために、グラフ インデックスを使用することが公式に推奨されています。現在のビジネス シナリオでは FLAT インデックスの使用が必要なため、最初に FLAT インデックスに基づいてストレス テストを実行します。グラフインデックスは後で使用され、ストレステストも実行されます。 milvus のストレス テストを行うことで、milvus の設計を理解し、学ぶこともできます。一般的に、Milvus は優れたクラウドネイティブ ベクター データベースです。いくつかのデザインコンセプトは比較的先進的です。ベクトル検索と k8s を組み合わせ、クエリノードを単純に拡張するだけでベクトル検索のパフォーマンスを線形に向上させることができます。分散データベースでは、読み取りと書き込みの分離、ストレージとコンピューティングの分離を実現します。公式ウェブサイトでは、豊富なドキュメントと、attu、birdwatcher などの多くのツールが提供されています。 |
<<: アリババクラウドデータベースの責任者であるフェイフェイ・リーが、中国コンピュータ協会の2022年CCFフェローに選出されました。
7月23日から25日まで、第10回中国クラウドコンピューティングカンファレンスが北京国家会議センター...
TF-idf アルゴリズムは、実際にはユーザー情報の検索や情報マイニングによく使用される加重技術であ...
vps777は2017年に設立された新しい事業で、米国に登録されているそうです。現在はCCコンピュー...
今日、「Cat's Claw」という友人が、彼のウェブサイトのタイトルが悪意を持って改ざんさ...
1. ページコンテンツの最適化1. キーワードの密度、分布、同義語。 ①キーワード密度SEO ツール...
[51CTO.comより引用] クラウドコンピューティングの重要な構成要素として、SaaSサービスは...
2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っています携帯電話の...
モーニングポストニュース(記者 李東華)昨日、上海第一中級人民法院は、原告上海漢涛情報コンサルティン...
「外部リンクは王様、コンテンツは女王」という言葉は SEO 業界では不変の定理となっているようで、多...
最近、中国電信はオンラインビジネスホールの新しいドメイン名を導入する移行作業を開始しました。このドメ...
私は2年以上ネットワークプロモーションに従事してきました。社内でのネットワークプロモーションと学習の...
OpenTelemetry Operator は、OpenTelemetry コンポーネントをデプロ...
昨日は週末だったので家で何もすることがなかったので、映画「グリーン ランタン」を見ました。グリーン ...
現在、SEOを学ぶ人が増えています。初心者の場合、注意を払う必要がある問題が多数あります。適切に処理...
状況はそれぞれ異なります。しかし、確かなのは、クラウドとエッジ コンピューティングのバランスが将来の...