🚀 Zilliz Cloudを無料で試す、完全管理型のMilvus—10倍の高速パフォーマンスを体験しよう!今すぐ試す>>

milvus-logo
LFAI
  • Home
  • Blog
  • Milvus2.3を発表:GPU、Arm64、CDC、その他多くの待望の機能をサポートするマイルストーンリリース

Milvus2.3を発表:GPU、Arm64、CDC、その他多くの待望の機能をサポートするマイルストーンリリース

  • News
August 28, 2023
Owen Jiao, Fendy Feng

エキサイティングなニュースです!Milvus2.3は、GPU、Arm64、upsert、変更データキャプチャ、ScaNNインデックス、MMapテクノロジーのサポートなど、多くの待望の機能を搭載したマイルストーンバージョンです。また、Milvus 2.3では、クエリー性能の向上、より強固なロードバランシングとスケジューリング、より優れた観測性と操作性が導入されています。

私と共にこれらの新機能と機能強化を見て、このリリースからどのような恩恵を受けることができるかを学びましょう。

QPSを3~10倍高速化するGPUインデックスのサポート

GPUインデックスはMilvusコミュニティで非常に期待されている機能です。Nvidiaのエンジニアとの素晴らしいコラボレーションにより、Milvus 2.3では、MilvusインデックスエンジンであるKnowhereに追加された堅牢なRAFTアルゴリズムにより、GPUインデックスがサポートされました。GPUのサポートにより、Milvus 2.3は、CPU HNSWインデックスを使用する旧バージョンと比較して、QPSで3倍以上速くなり、重い計算を必要とする特定のデータセットでは、ほぼ10倍速くなりました。

ユーザーニーズの高まりに対応するArm64サポート

クラウドプロバイダーや開発者の間でArm CPUの人気が高まっています。この需要の高まりに対応するため、MilvusはARM64アーキテクチャ用のDockerイメージを提供するようになりました。この新しいCPUサポートにより、MacOSユーザはMilvusでよりシームレスにアプリケーションを構築することができます。

より良いユーザーエクスペリエンスのためのUpsertサポート

Milvus 2.3では、upsert操作をサポートすることで、注目すべき機能強化が行われています。この新機能により、ユーザーはデータの更新や挿入をシームレスに行うことができ、Upsertインターフェイスを通じて1回のリクエストで両方の操作を実行できるようになります。この機能は、データ管理を合理化し、効率性をもたらします。

注意

  • アップサート機能は、自動インクリメントIDには適用されません。
  • アップサートは、deleteinsert の組み合わせとして実装されているため、パフォーマンスが多少低下する可能性があります。Milvusを書き込みの多いシナリオで使用する場合は、insert を使用することをお勧めします。

より正確な結果を得るための範囲検索

Milvus2.3では、クエリー中に入力ベクトルとMilvusに保存されているベクトルとの距離を指定することができます。Milvusは、設定された範囲内で一致するすべての結果を返します。以下は、範囲検索機能を使って検索距離を指定した例です。

// add radius and range_filter to params in search_params
search_params = {"params": {"nprobe": 10, "radius": 10, "range_filter" : 20}, "metric_type": "L2"}
res = collection.search(
vectors, "float_vector", search_params, topK,
"int64 > 100", output_fields=["int64", "float"]
)

この例では、ユーザはMilvusが入力ベクトルから10~20単位の距離内のベクトルを返すことを要求しています。

注意: 異なる距離メトリクスは、距離の計算方法が異なるため、値の範囲やソート戦略が異なります。したがって、範囲検索機能を使用する前に、それぞれの特徴を理解することが不可欠です。

ScaNNインデックスによるクエリの高速化

Milvus 2.3では、Googleが開発したオープンソースの近似最近傍(ANN)インデックスであるScaNNインデックスをサポートしました。ScaNNインデックスは様々なベンチマークで優れた性能を発揮しており、HNSWを約20%上回り、IVFFlatよりも約7倍高速です。ScaNNインデックスをサポートすることで、Milvusは旧バージョンと比較してはるかに高速なクエリを実現している。

成長するインデックスによる安定したクエリ性能の向上

Milvusにはインデックス付きデータとストリーミングデータの2つのカテゴリーがあります。Milvusはインデックスを使用してインデックス付きデータを高速に検索することができますが、ストリーミングデータは行単位でしか検索できないため、パフォーマンスに影響を与える可能性があります。Milvus2.3では、ストリーミングデータのリアルタイムインデックスを自動的に作成し、クエリのパフォーマンスを向上させるGrowing Indexが導入されました。

一括データ検索のためのイテレータ

Milvus2.3では、16,384以上のエンティティを検索または範囲検索で取得できるイテレータインタフェースが導入されました。この機能は、数万またはそれ以上のベクトルを一括してエクスポートする必要がある場合に便利です。

MMapのサポートによる容量の増加

MMapは、ファイルやその他のオブジェクトをメモリにマッピングするために使用されるUNIXのシステムコールです。Milvus2.3はMMapをサポートしており、データをローカルディスクにロードし、それをメモリにマッピングすることで、シングルマシンの容量を増やすことができます。

当社のテスト結果によると、MMap技術を使用することで、Milvusは性能劣化を20%以内に抑えながら、データ容量を2倍に増やすことができます。このアプローチは全体的なコストを大幅に削減するため、性能の妥協を気にしない予算が限られたユーザーにとって特に有益です。

システムの可用性を高めるCDCサポート

変更データキャプチャ(CDC)は、データベースシステムで一般的に使用されている機能で、データの変更をキャプチャし、指定された宛先に複製します。CDC機能により、Milvus 2.3では、データセンター間でのデータの同期、増分データのバックアップ、シームレスなデータ移行が可能となり、システムの可用性が向上する。

上記の機能に加え、Milvus 2.3では、コレクションに格納されたデータの行数をリアルタイムで正確に計算するカウントインターフェイスの導入、ベクトル距離を測定するCosineメトリックのサポート、JSON配列に対するより多くの操作の追加などが行われている。より多くの機能と詳細情報については、Milvus 2.3リリースノートを参照してください。

機能強化とバグ修正

Milvus 2.3では、新機能に加え、旧バージョンの改良とバグフィックスが多数含まれています。

データフィルタリングのパフォーマンス向上

Milvusでは、より正確な結果を得るために、スカラーとベクトルのハイブリッドデータクエリにおいて、ベクトル検索の前にスカラーフィルタリングを行います。しかし、スカラーフィルタリング後にユーザーがあまりにも多くのデータをフィルタリングしてしまった場合、インデックス作成のパフォーマンスが低下する可能性があります。Milvus2.3では、この問題に対処するためにHNSWのフィルタリング戦略を最適化し、クエリ性能を向上させました。

マルチコアCPU使用率の向上

近似最近傍探索(ANN)は膨大なCPUリソースを必要とする計算集約的なタスクです。以前のリリースでは、Milvusは利用可能なマルチコアCPUリソースの70%程度しか利用できませんでした。しかし、最新のリリースでは、Milvusはこの制限を克服し、利用可能な全てのマルチコアCPUリソースをフルに活用できるようになりました。

リファクタリングされたQueryNode

QueryNodeはMilvusにおいてベクトル検索を担う重要なコンポーネントです。しかし、旧バージョンでは、QueryNodeは複雑なステート、重複したメッセージキュー、整理されていないコード構造、直感的でないエラーメッセージを持っていました。

Milvus 2.3では、ステートレスなコード構造を導入し、データ削除用のメッセージキューを削除することで、QueryNodeをアップグレードしました。これらのアップデートにより、リソースの浪費が減り、より高速で安定したベクトル検索が可能になりました。

NATSに基づくメッセージキューの強化

Milvusはログ・ベースのアーキテクチャで構築されており、以前のバージョンでは、PulsarとKafkaをコア・ログ・ブローカーとして使用していました。しかし、この組み合わせは3つの重要な課題に直面していた:

  • マルチ・トピックの状況では不安定だった。
  • アイドル時にリソースを消費し、メッセージの重複排除に苦労した。
  • PulsarとKafkaはJavaエコシステムと密接に結びついているため、彼らのコミュニティはGo SDKのメンテナンスやアップデートをほとんど行っていません。

これらの問題を解決するために、私たちはMilvusの新しいログ・ブローカーとしてNATSとBookeeperを組み合わせました。

ロードバランサの最適化

Milvus 2.3では、システムの実負荷に基づき、より柔軟なロードバランシングアルゴリズムを採用しました。この最適化されたアルゴリズムにより、ユーザはノードの障害やアンバランスな負荷を迅速に検出し、それに応じてスケジューリングを調整することができます。我々のテスト結果によると、Milvus 2.3は障害、アンバランスな負荷、異常なノードステータス、およびその他のイベントを数秒以内に検出し、迅速に調整を行うことができます。

Milvus 2.3の詳細については、Milvus 2.3リリースノートをご参照ください。

ツールのアップグレード

Milvus2.3のリリースに伴い、Milvusの運用・保守に役立つツールであるBirdwatcherとAttuのアップグレードを行いました。

バードウォッチャーアップデート

MilvusのデバッグツールであるBirdwatcherをアップグレードし、以下のような多くの機能強化が行われました:

  • 他の診断システムとシームレスに統合するためのRESTful API。
  • Go pprofツールとの統合を容易にするPProfコマンドのサポート。
  • ストレージ使用状況の分析機能
  • 効率的なログ解析機能
  • etcd での設定の表示と変更のサポート。

Attuアップデート

オール・イン・ワンのベクター・データベース管理ツールであるAttuのインターフェイスを一新しました。新しいインターフェースは、よりわかりやすいデザインで、理解しやすくなっています。

詳しくはMilvus 2.3リリースノートをご覧ください。

今後ともよろしくお願いいたします!

Milvusに関するご質問やご意見がございましたら、Twitterや LinkedInからお気軽にお問い合わせください。また、私たちのSlackチャンネルに参加してエンジニアやコミュニティと直接チャットしたり、火曜日のオフィスアワーをチェックしたりすることも大歓迎です!

Like the article? Spread the word

続けて読む