milvus-logo
LFAI
フロントページへ
  • Milvusについて

Milvusとは?

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

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

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

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

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

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

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

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

Milvusが高速である理由

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

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

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

C++の検索エンジン:ベクトルデータベースの性能の80%以上は検索エンジンによって決まります。Milvusはこの重要なコンポーネントにC++を使用しています。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は調整可能なインデックス作成および検索アルゴリズムのセットをサポートしています。詳細はインメモリインデックスオンディスクインデックスGPUインデックスをご参照ください。

  • パーティションとパーティション・キー パーティションはMilvusコレクションのサブディビジョンです。検索パフォーマンスを向上させるために、パーティション・キーとしてスカラー・フィールドを選択できます。詳細は、Manage PartitionsandUse Partition Keyを参照してください。

  • 調整可能な一貫性モデル 一定の時間にデータを書き込んだり読み込んだりするとき、すべてのMilvusノードまたはレプリカが同じデータビューを持つことを保証します。MilvusでANN検索を行う際、整合性レベルを簡単に調整することができます。詳細は一貫性を参照。

  • ハイスループット データ インポート 大量のデータを次々とMilvusにインポートするのではなく、ハイスループット データ インポート ツールの使用をご検討ください。詳細はソースデータの準備と データのインポートをご参照ください。

  • マルチテナンシーサポート パーティションキー、クラスタリングキーなど、Milvusはマルチテナンシーシナリオを指向した多くの機能を実装しています。詳細はマルチテナント戦略をご参照ください。

セキュリティと認証

  • 調整可能な一貫性モデル 一定の時間にデータを書き込んだり読み込んだりする際に、すべてのMilvusノードまたはレプリカが同じデータビューを持つことを保証します。MilvusでANN検索を行う際、一貫性レベルを簡単に調整することができます。詳細は一貫性を参照してください。

  • データの分離とリソース制御 マルチテナンシーシナリオでは、データの分離は基本的なセキュリティ要件です。Milvusはセキュリティ上の懸念を解決するためにいくつかの機能を実装しています。詳細はリソースグループの管理とクラスタリングコンパクションをご参照ください。

AIインテグレーション

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

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

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

ツールとエコシステム

  • 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インスタンスを含む多くのデータソース間でデータを転送するためのツールセットを提供しています。詳細はマイグレーションをご参照ください。