46.4kデモを予約するログイン無料で始める

Milvusリファレンス・アーキテクチャ

May 10, 20241 min read

このブログでは、特定のユースケースに基づくMilvusのリソース割り当てに関して、よくある質問を取り上げます。これらの質問には以下が含まれます:

  • 特定のユーザー数またはRPS(requests per second)に基づき、Milvusに必要なCPUおよびメモリリソースはどのくらいですか?

  • READとWRITEの異なる組み合わせに基づき、Milvusに必要なCPUとメモリリソースはどのくらいか?

ワークロード特性の理解

Milvusにリソースを割り当てる最初のステップは、お客様のワークロード特性を理解することです。これらの要素はMilvusの計算能力とメモリ要件を決定する上で重要な役割を果たします。

以下はLinuxパッケージベースのリファレンスアーキテクチャのリスト例です。RPSはRequests Per Secondを意味します:

  • 最大20 RPSまたは1,000ユーザー](https://docs.gitlab.com/ee/administration/reference_architectures/1k_users.html)API:20RPS、ウェブ:2RPS、Git(Pull):2RPS、Git(Push):1 RPS

  • 最大40RPSまたは2,000ユーザー](https://docs.gitlab.com/ee/administration/reference_architectures/2k_users.html)API:40RPS、Web:4RPS、Git(Pull):4RPS、Git(Push):1 RPS

  • 最大60RPSまたは3,000ユーザー](https://docs.gitlab.com/ee/administration/reference_architectures/3k_users.html)API:60RPS、Web:6RPS、Git(Pull):6RPS、Git(Push):1 RPS

  • 100RPSまたは5,000ユーザーまで](https://docs.gitlab.com/ee/administration/reference_architectures/5k_users.html)API:100RPS、Web:10RPS、Git(Pull):10RPS、Git(プッシュ):2RPS

  • 200RPSまたは10,000ユーザーまで](https://docs.gitlab.com/ee/administration/reference_architectures/10k_users.html)API:200RPS、ウェブ:20RPS、Git(Pull):20RPS、Git(Push):4 RPS

  • 500RPSまたは25,000ユーザーまで](https://docs.gitlab.com/ee/administration/reference_architectures/25k_users.html)API:500RPS、ウェブ:50RPS、Git(Pull):50RPS、Git(Push):10 RPS

  • 1000RPSまたは50,000ユーザーまで](https://docs.gitlab.com/ee/administration/reference_architectures/50k_users.html)API:1000RPS、ウェブ:100RPS、Git(Pull):100RPS、Git(プッシュ):20RPS

リソース要件の見積もり

Milvusに必要なリソースを見積もるには、いくつかの仮定が必要です:

1.読み込み:各WebリクエストとGitプルはREAD操作である。

2.書き込み:各GitプッシュはWRITE操作とみなされる。

3.読み書きの量と比率:ミルバスは、ユーザー数あたりのAPIコールの読み取り/書き込みの比率と同じであると仮定します。

4.クエリー/秒(QPS):ユーザー数あたりのAPI RPS(リクエスト/秒)要件と一致しなければならない。

また、読み取り/書き込みリクエストあたりのデータサイズも見積もる必要がある。一般的なGenAIのユースケースを想定する:

  • ベクトル次元:1024浮動小数点数

  • 浮動小数点数あたりのバイトサイズ:4 KB

  • Top_k (返されるベクトル数):検索リクエストあたり10ベクトル

  • コレクション(データベーステーブル)のサイズ:100万ベクトル/書き込み要求

  • データベースのインデックスタイプHNSW

これらの仮定に基づき、ナプキンのバック・オブ・ナプキンで計算することで、読み取りまたは書き込み1回あたりのデータサイズを見積もることができます。ベクトル次元が1024で、各ベクトルは1024 * 4バイト = 4KBであると仮定する。 典型的なtop_k = 10ベクトル/リードと仮定する。これらの仮定で

  • Milvusの各読み取りオペレーションは約40KBのデータを処理します。

  • 各Milvus書き込み操作は40MBのデータを処理すると推定される。

Milvusはinsert(全く新しいコレクションを作成する)とupsert(いくつかの行を変更する)の両方の機能を提供しています(詳細についてはブログMilvus insert, upsert, deleteを参照してください)。 各WRITE操作は、数行のupsertではなく、コレクション全体のinsertになるように過大評価します。

データベースはデータサイズだけでなく、検索と挿入の速度も考慮する必要があります。 ここでは、コレクションが一般的なHNSWインデックスを使用してインデックス化されていると仮定します。これは、検索時間がO(log n)というBig-O表記になります。

これらの仮定をもとに、ウェブベースのユーザー/RPS/リード/ライトをベクターデータベースのQPS/データサイズアーキテクチャ層に変換する:

  • 最大1,000ユーザー = 20 QPS、100万ベクトル

  • 最大2,000ユーザー=100万ベクターで40QPS

  • 最大3,000ユーザー = 100万ベクトルで60 QPS

  • 5,000ユーザーまで = 200万ベクトルで100 QPS

  • 10,000ユーザーまで = 200 QPS、400万ベクトル

  • 最大25,000ユーザー = 1000万ベクトルで500 QPS

  • 最大50,000ユーザー = 1000 QPS、2,000万ベクトル

負荷テストとベンチマーク

リソース推定の精度を保証するために、VectorDBBenchでアーキテクチャ層の負荷テストとベンチマークを行いました。Milvusアーキテクチャ](https://milvus.io/docs/architecture_overview.md)自体のデフォルトのSegment、Partition、Shard、Dataノード、Queryノード、Indexノードサイズを想定した。

Milvusのオートスケール機能により、パフォーマンスはデータサイズとクラスタリソースに比例します!以下は、異なるデータ容量とQPS要件に対して推奨されるMilvusとZilliz Cloud(フルマネージドMilvus)のリソースサイズを示した表です。

以下の表は1024_dimensionのベクトル数百万単位でデータ容量を表しています。Milvusのリソースは数CPUとGBのメモリで与えられる。 コスト比較のため、Zilliz Cloudのリソースサイズをパフォーマンスまたは容量タイプ別にコンピュートユニット(cu)単位で表示しています。

ユーザー/RPSティアごとのMilvusとZillizの推奨リソースサイズ表

ユーザー数|データ容量|QPSベンチマーク|必要RPS|Milvusリソース|Zillizリソース
3,000|1m_1024dベクトル|1200|60|8CPU、32G|1cu-perf|。
3,000|1m_1024dベクトル|2400|60|16CPU、64G|2cu-perf||。
3,000|1m_1024dベクトル|3600|60|24CPU、96G|4cu-perf||。
10000|3.7m_1024dベクトル|360|200|16CPU、64G|2cu-perf|の場合
10,000円|3.7m_1024dベクタ|700円|200円|64CPU、256G|4cu-cap|。
25,000円|10m_1024dベクトル|600円|500円|196CPU、768G|12cu-cap
250,000|100m_1024dベクトル|6000|5000|19200CPU、76800G|1200cu-cap

ユーザー/RPSティア数ごとの推奨MilvusおよびZillizリソースサイズの表。Milvusのスケーリングは、データサイズと必要なQPSに対して線形です。

上の表から、データサイズとQPSがある閾値に達する必要がある場合、オンプレミスではなくZillizクラウドからMilvusを実行した方がコスト効率が高くなる可能性があります。

結論

ワークロードの特性を理解し、仮定に基づいて必要なリソースを見積もり、VectorDBBenchのような負荷テストやベンチマークツールを活用することで、Milvus導入に必要なリソースを自信を持ってプロビジョニングすることができます。

クラスタサイジングガイドを参照してください。 ワークロードが進化するにつれて、最高のパフォーマンスを維持するために定期的にリソースの割り当てを見直し、調整することが不可欠であることを忘れないでください。

参考文献

Updated on Jul 09, 2026