Milvusとは?

Milvus はタカ目タカ科Milvus属の猛禽類で、その飛行速度、鋭い視力、驚くべき適応性で有名である。

Milvusは、ラップトップから大規模な分散システムまで、幅広い環境で効率的に動作する、オープンソースの高性能で拡張性の高いベクトルデータベースの名前です。オープンソースソフトウェアとしても、クラウドサービスとしても利用できる。

MilvusはZillizによって開発され、まもなくLinux Foundation傘下のLF AI & Data Foundationに寄贈され、世界有数のオープンソース・ベクターデータベースプロジェクトとなった。MilvusはApache 2.0ライセンスの下で配布されており、ほとんどの貢献者はハイパフォーマンス・コンピューティング(HPC)コミュニティの専門家であり、大規模システムの構築やハードウェアを考慮したコードの最適化を専門としている。中心的な貢献者には、Zilliz、ARM、NVIDIA、AMD、Intel、Meta、IBM、Salesforce、Alibaba、Microsoftの専門家が含まれる。

興味深いことに、Zillizのオープンソース・プロジェクトにはすべて鳥の名前が付けられており、これは自由、先見性、テクノロジーの機敏な進化を象徴する命名規則となっている。

非構造化データ、エンベッディング、milvus

テキスト、画像、音声のような非構造化データは、形式が様々であり、豊富なセマンティクスを持っているため、分析が困難です。この複雑さを管理するために、エンベッディングは非構造化データをその本質的な特徴を捉える数値ベクトルに変換するために使用されます。これらのベクトルはベクトルデータベースに格納され、高速でスケーラブルな検索と分析を可能にします。

Milvusは堅牢なデータモデリング機能を備えており、非構造化データやマルチモーダルデータを構造化されたコレクションに整理することができます。Milvusは、一般的な数値型や文字型、様々なベクトル型、配列、集合、JSONなど、様々な属性モデリングに対応したデータ型を幅広くサポートしており、複数のデータベースシステムを管理する手間を省くことができます。

Untructured data, embeddings, and Milvus 非構造化データ、エンベッディング、Milvus

Milvusは3つのデプロイメントモードを提供し、Jupyter Notebooksでのローカルプロトタイピングから数百億のベクトルを管理する大規模なKubernetesクラスタまで、幅広いデータスケールをカバーします:

  • Milvus Liteは、アプリケーションに簡単に統合できるPythonライブラリです。Milvusの軽量版として、Jupyter Notebooksでの迅速なプロトタイピングや、リソースが限られたエッジデバイスでの実行に最適です。詳細はこちら。
  • Milvus Standaloneは、シングルマシンサーバーデプロイメントで、すべてのコンポーネントが単一のDockerイメージにバンドルされており、デプロイに便利です。詳細はこちら
  • Milvus Distributedは、Kubernetesクラスタ上にデプロイすることができ、10億規模またはさらに大規模なシナリオ向けに設計されたクラウドネイティブなアーキテクチャを特徴としています。このアーキテクチャは、重要なコンポーネントの冗長性を保証します。詳細はこちら。

Milvusは何が速いのか?

Milvusは初日から非常に効率的なベクトルデータベースシステムとして設計されました。ほとんどの場合、Milvusは他のベクターデータベースを2~5倍凌駕します(VectorDBBenchの結果を参照)。この高い性能は、いくつかの重要な設計上の決定の結果です:

ハードウェアを考慮した最適化:Milvusを様々なハードウェア環境に対応させるため、AVX512、SIMD、GPU、NVMe SSDなど、多くのハードウェアアーキテクチャとプラットフォームに特化して性能を最適化しました。

高度な検索アルゴリズム:milvusは、IVF、HNSW、DiskANNなど、幅広いインメモリおよびオンディスクインデックス/検索アルゴリズムをサポートしており、これらはすべて深く最適化されています。FAISSやHNSWLibのような一般的な実装と比較して、Milvusは30%から70%の性能向上を実現しています。

C++の検索エンジン:ベクトルデータベースの性能の80%以上は検索エンジンによって決まります。Milvusは、高性能、低レベル最適化、効率的なリソース管理のために、この重要なコンポーネントにC++を使用しています。最も重要なことは、Milvusはハードウェアの能力を十分に活用するために、アセンブリレベルのベクトル化からマルチスレッド並列化、スケジューリングに至るまで、ハードウェアを意識した数多くのコード最適化を統合していることです。

列指向:Milvusは列指向のベクトルデータベースシステムです。主な利点はデータアクセスパターンにある。クエリを実行する際、列指向データベースは行全体ではなく、クエリに関係する特定のフィールドのみを読み込むため、アクセスされるデータ量が大幅に削減される。さらに、列ベースのデータに対する操作は簡単にベクトル化することができるため、列全体に一度に操作を適用することができ、パフォーマンスをさらに向上させることができます。

Milvusがスケーラブルである理由

2022年、Milvusは10億スケールのベクトルをサポートし、2023年には安定したまま数百億までスケールアップし、Salesforce、PayPal、Shopee、Airbnb、eBay、NVIDIA、IBM、AT&T、LINE、ROBLOX、Inflectionなど、300を超える大手企業の大規模シナリオを支えている。

Milvusのクラウドネイティブで高度に分離されたシステムアーキテクチャは、データの成長に合わせてシステムを継続的に拡張できることを保証します:

Highly decoupled system architecture of Milvus Milvusの高度に分離されたシステム・アーキテクチャ

Milvus自体は完全にステートレスであるため、Kubernetesやパブリッククラウドの助けを借りて容易に拡張することができる。また、Milvusのコンポーネントは高度に分離されており、最も重要な3つのタスクである検索、データ挿入、インデックス作成/コンパクションは、複雑なロジックを分離し、並列化しやすいプロセスとして設計されている。これにより、対応するクエリー・ノード、データ・ノード、インデックス・ノードがそれぞれ独立してスケールアップ、スケールアウトできるようになり、パフォーマンスとコスト効率が最適化されます。

Milvusがサポートする検索の種類

Milvusは様々なユースケースの要求に応えるため、様々なタイプの検索機能をサポートしています:

  • ANN検索:クエリーベクトルに最も近い上位K個のベクトルを検索します。
  • フィルタリング検索:指定されたフィルタリング条件でANN検索を行います。
  • 範囲検索:クエリーベクトルから指定した半径内のベクトルを検索します。
  • ハイブリッド検索複数のベクトルフィールドに基づいてANN検索を行います。
  • 全文検索BM25に基づく全文検索。
  • 再順位付け追加条件または二次アルゴリズムに基づいて検索結果の順序を調整し、最初のANN検索結果を絞り込む。
  • フェッチ主キーでデータを検索する。
  • クエリー:特定の式を使用してデータを検索します。

包括的な機能セット

Milvusは、上記の主要な検索機能に加えて、ANN検索を中心に実装された一連の機能を提供しており、その機能をフルに活用することができます。

APIとSDK

高度なデータ型

Milvusはプリミティブなデータ型に加え、様々な高度なデータ型とそれぞれに適用可能な距離メトリクスをサポートしています。

なぜMilvusなのか?

  • 規模に応じた高性能と高可用性

    Milvusは、コンピュートと ストレージを分離した分散アーキテクチャを特徴としています。Milvusは、読み込みの多いワークロードにはクエリノードを、書き込みの多いワークロードにはデータノードを、それぞれ独立に増やすことで最適なパフォーマンスを実現し、多様なトラフィックパターンに水平スケールで適応することができます。K8s上のステートレスマイクロサービスは、障害からの迅速な復旧を可能にし、高い可用性を保証します。レプリカのサポートにより、複数のクエリーノードにデータセグメントをロードすることで、耐障害性とスループットがさらに向上します。性能比較はベンチマークを参照。

  • 様々なベクターインデックスタイプのサポートとハードウェアアクセラレーション

    Milvusはシステムとコアベクトルサーチエンジンを分離しているため、HNSW、IVF、FLAT(ブルートフォース)、SCANN、DiskANN、量子化ベースのバリエーションやmmapなど、さまざまなシナリオに最適化された主要なベクトルインデックスタイプをすべてサポートすることができます。Milvusは、メタデータフィルタリングや 範囲検索などの高度な機能のためにベクトル検索を最適化します。さらにMilvusは、ベクトル検索のパフォーマンスを向上させるハードウェアアクセラレーションを実装し、NVIDIAのCAGRAのようなGPUインデックスをサポートします。

  • 柔軟なマルチテナンシーとホット/コールドストレージ

    Milvusはデータベース、コレクション、パーティション、パーティションキーレベルでの分離によりマルチテナントをサポートします。この柔軟な戦略により、単一のクラスタで数百から数百万のテナントを処理することができ、最適化された検索パフォーマンスと柔軟なアクセス制御を保証します。Milvusはホット/コールドストレージによりコスト効率を高めます。頻繁にアクセスされるホットデータはメモリまたはSSDに保存してパフォーマンスを向上させ、アクセス頻度の低いコールドデータは低速でコスト効率の高いストレージに保存します。このメカニズムにより、重要なタスクに対して高いパフォーマンスを維持しながら、コストを大幅に削減することができます。

  • 全文検索とハイブリッド検索のためのスパース・ベクトル

    密なベクトルによるセマンティック検索に加えて、MilvusはSPLADEやBGE-M3のような学習されたスパース埋め込みだけでなく、BM25による全文検索もネイティブでサポートします。ユーザはスパースベクタと密なベクタを同じコレクションに格納し、複数の検索リクエストの結果を再ランク付けする関数を定義することができます。セマンティック検索+全文検索のハイブリッド検索の例をご覧ください。

  • データセキュリティときめ細かなアクセス制御

    Milvusは、必須のユーザー認証TLS暗号化役割ベースのアクセス制御(RBAC)を実装することで、データセキュリティを確保しています。ユーザー認証により、有効な認証情報を持つ正規ユーザーのみがデータベースにアクセスできるようにし、TLS暗号化によりネットワーク内のすべての通信を保護します。さらに、RBACにより、役割に基づいてユーザに特定の権限を割り当てることで、きめ細かなアクセス制御が可能になります。これらの機能により、Milvusは企業アプリケーションにとって堅牢かつ安全な選択肢となり、機密データを不正アクセスや潜在的な侵害から保護します。

AIインテグレーション

  • エンベッディングモデルの統合 エンベッディングモデルは、非構造化データを高次元データ空間の数値表現に変換し、Milvusに保存できるようにします。現在、Python SDKであるPyMilvusは、データをベクトル埋め込みに素早く準備できるように、いくつかの埋め込みモデルを統合しています。詳細はエンベッディングの概要をご覧ください。

  • 再ランキングモデルの統合 情報検索や生成AIの領域では、再ランカーは最初の検索結果の順序を最適化する必須のツールです。PyMilvusは最初の検索から返される結果の順序を最適化するために、いくつかの再ランクモデルも統合しています。詳細はリランカーの概要を参照してください。

  • LangChainとその他のAIツールの統合 GenAI時代において、LangChainのようなツールはアプリケーション開発者から注目を集めています。Milvusは通常、そのようなツールのコアコンポーネントとしてベクターストアの役割を果たします。Milvusをお気に入りのAIツールに統合する方法については、統合と チュートリアルをご参照ください。

ツールとエコシステム

  • Attu Attuはオールインワンの直感的なGUIで、Milvusとそのデータを管理することができます。詳細はAttuリポジトリをご参照ください。

  • Birdwatcher BirdwatcherはMilvusのデバッグツールです。etcdに接続することで、Milvusシステムの状態を確認したり、その場で設定を行うことができます。詳細はBirdWatcherをご参照ください。

  • PromethusとGrafanaの統合 PrometheusはKubernetesのためのオープンソースのシステム監視とアラートツールキットです。Grafanaはオープンソースの可視化スタックで、あらゆるデータソースと接続できます。PromethusとGrafanaを監視サービスプロバイダとして利用することで、分散したMilvusのパフォーマンスを視覚的に監視することができます。詳細については、監視サービスのデプロイを参照してください。

  • Milvusバックアップ Milvusバックアップは、Milvusデータのバックアップとリストアを可能にするツールです。CLIとAPIの両方を提供し、様々なアプリケーションシナリオに対応します。詳細はMilvus Backupをご参照ください。

  • Milvus Capture Data Change (CDC) Milvus-CDCはMilvusインスタンス内の増分データをキャプチャして同期し、ソースインスタンスとターゲットインスタンス間でシームレスに転送することでビジネスデータの信頼性を確保し、増分バックアップやディザスタリカバリを容易に行うことができます。詳細はMilvus CDCをご参照ください。

  • Milvusコネクタ Milvusは、MilvusとApache Sparkなどのサードパーティツールをシームレスに統合するためのコネクタ群を計画しています。現在、Spark Connectorを使用することで、MilvusのデータをApache Sparkに供給し、機械学習処理を行うことができます。詳細はSpark-Milvus Connectorをご参照ください。

  • Vector Transmission Services (VTS) Milvusは、MilvusインスタンスとZillizクラスタ、Elasticsearch、Postgres (PgVector)、別のMilvusインスタンスなどのデータソース間でデータを転送するためのツールセットを提供しています。詳細はVTSをご参照ください。