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フェローに選出されました。
2023年11月、Volcano Engineは北京、上海、深センでVolcano Engineパブ...
SEO は現在、急速な発展の時代を迎えています。大企業から草の根レベルのウェブマスターまで、あらゆる...
リンク交換は、友好リンクまたは相互リンクとも呼ばれます。このようなリンクはリソースを補完することがで...
Baidu が Aibang.com を買収すると報じられているが、Aibang.com はコメント...
アーキテクチャレビューこのプロセスで取り上げられるアーキテクチャの詳細は、オープンソース テクノロジ...
[[410935]]最近、米国第2位のモバイル通信事業者であるAT&Tは、パブリッククラウド...
Elasticsearch 入門Elasticsearch (略して ES) は、全文検索、構造化検...
これらの Kubernetes ヘルパー ツールを活用して、アプリケーション定義の簡素化、監視の強化...
International Data Corporation (IDC) の最新の調査レポート「ID...
多くのウェブマスターにとって、ウェブサイトがBaiduにKまたは降格された後、一定期間公開されないこ...
現在、企業組織は 5G とエッジ テクノロジーを活用して、従業員の生産性を高め、既存の製品やサービス...
この記事は主に、産業用不動産ウェブサイトの運営において避けるべきいくつかの問題について説明しています...
インターネットが商業化、市場化されてから20年以上が経ち、産業生態環境と産業チェーンは大きな変化を遂...
月収10万元の起業の夢を実現するミニプログラム起業支援プラン最適化の方法はユーザーによって異なります...
4月25日、百度プラットフォームは外部リンクの不正行為に対する挑戦を発表し、調整の範囲は包括的です。...