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

milvus-logo
LFAI

はじめに

  • Engineering
November 08, 2021
Zilliz

ビッグデータの時代、どのようなデータベース・テクノロジーやアプリケーションが脚光を浴びるのだろうか?次のゲームチェンジャーは何だろうか?

非構造化データが全保存データの約80~90%を占める中、増大するデータレイクをどう扱えばいいのだろうか?従来の分析手法を使おうと思うかもしれないが、有益な情報を引き出せない。この疑問に答えるため、Zillizの研究開発チームの "三銃士 "である郭廉東博士、阮暁帆氏、李暁孟博士は、汎用ベクトルデータベースシステムを構築する際に直面する設計と課題について論じた論文を共著で発表した。

この論文は、中国最大のソフトウェア開発者コミュニティであるCSDNが作成した雑誌Programmerに掲載されました。今号のProgrammerには、2020年チューリング賞受賞者のJeffrey Ullman氏、2018年チューリング賞受賞者のYann LeCun氏、MongoDB CTOのMark Porter氏、OceanBase創業者のZhenkun Yang氏、PingCAP創業者のDongxu Huang氏などの記事も掲載されています。

以下、記事全文を紹介する:

はじめに

現代のデータ・アプリケーションは、今日のデータの約20%を占める構造化データを容易に扱うことができる。そのツールボックスには、リレーショナル・データベースやNoSQLデータベースなどのシステムがある。対照的に、全データの約80%を占める非構造化データには、信頼できるシステムが存在しない。この問題を解決するために、本記事では、従来のデータ分析が非構造化データに対して抱えるペインポイントについて説明し、さらに独自の汎用ベクトルデータベースシステムを構築する際に直面したアーキテクチャと課題について解説する。

AI時代のデータ革命

5GとIoT技術の急速な発展により、産業界はデータ収集のチャネルを増やし、現実世界をデジタル空間にさらに投影しようとしている。それはいくつかの途方もない課題をもたらしたが、同時に成長する業界に多大な利益ももたらした。こうした困難な課題のひとつは、新たに入ってくるデータをいかに深く洞察するかということだ。

IDCの統計によると、2020年だけでも世界中で4万エクサバイト以上の新しいデータが生成されるという。このうち、構造化データ(高度に秩序化され、数値計算や関係代数によって整理・分析が容易なデータ)はわずか20%に過ぎない。一方、残りの80%を占める非構造化データは、データ型のバリエーションが極めて豊富で、従来のデータ分析手法では深い意味合いを明らかにすることが難しい。

幸いなことに、私たちは非構造化データとAIの同時進行的な急速な進化を経験しており、図1に示すように、AIによって様々なタイプのニューラルネットワークを通じてデータをより深く理解できるようになっている。

newdata1.jpeg newdata1.jpeg

埋め込み技術は、Word2vecのデビュー後に急速に人気を集め、「すべてを埋め込む」という考え方が機械学習のあらゆる分野に及んでいる。これにより、生データ層とベクトルデータ層という2つの主要なデータ層が出現することになる。生データ層は、非構造化データとある種の構造化データで構成され、ベクトル層は、生データ層から機械学習モデルを通過した、分析しやすい埋め込みデータの集合体である。

生データと比較した場合、ベクトル化データには以下のような利点がある:

  • 埋め込みベクトルは抽象的なデータ型であり、非構造化データの複雑さを軽減するための統一的な代数システムを構築できる。
  • 埋め込みベクトルは高密度の浮動小数点ベクトルで表現されるため、アプリケーションはSIMDを利用できる。SIMDはGPUとほぼすべての最新のCPUでサポートされているため、ベクトル間の計算は比較的低コストで高いパフォーマンスを達成することができます。
  • 機械学習モデルによってエンコードされたベクトル・データは、元の非構造化データよりも少ないストレージ容量で済むため、より高いスループットを実現できる。
  • 算術演算も埋め込みベクトル間で実行できる。図2は、クロスモーダル意味近似マッチングの例である。図に示された画像は、単語の埋め込みと画像の埋め込みをマッチングした結果である。

newdata2.png newdata2.png

図3に示すように、画像と単語の意味を組み合わせることは、対応する埋め込み間の単純なベクトルの加算と減算で行うことができます。

newdata3.png newdata3.png

上記の特徴とは別に、これらの演算子は、実用的なシナリオにおいて、より複雑なクエリ文をサポートします。コンテンツの推薦が有名な例である。一般的に、システムはコンテンツとユーザーの視聴嗜好の両方を埋め込む。次に、システムは埋め込まれたユーザーの嗜好を、意味的類似性分析によって最も類似した埋め込まれたコンテンツとマッチングさせ、ユーザーの嗜好に類似した新しいコンテンツを生成する。このベクトルデータレイヤーはレコメンダーシステムに限らず、電子商取引、マルウェア分析、データ分析、生体認証、化学式分析、金融、保険などのユースケースも含まれる。

非構造化データには完全な基本ソフトウェア・スタックが必要

システム・ソフトウェアはすべてのデータ指向アプリケーションの基礎に位置するが、データベース、データ分析エンジンなど、過去数十年にわたって構築されたデータ・システム・ソフトウェアは、構造化データを扱うためのものである。現代のデータアプリケーションは、ほとんど非構造化データのみに依存しており、従来のデータベース管理システムの恩恵を受けていない。

この問題に取り組むため、我々はAI指向の汎用ベクトルデータベースシステムMilvusを開発し、オープンソース化した(文献No.1~2)。Milvusは、従来のデータベースシステムと比較すると、データのレイヤーが異なります。リレーショナル・データベース、KVデータベース、テキスト・データベース、画像・映像データベースなど、従来のデータベースは生データ層で動作するが、Milvusはベクトル・データ層で動作する。

以下の章では、Milvusを構築する際に直面した斬新な機能、アーキテクチャ設計、技術的な課題について述べる。

ベクトルデータベースの主な特徴

ベクターデータベースは、ベクターを保存、検索、分析するデータベースであり、他のデータベースと同様に、CRUD操作のための標準的なインターフェイスも提供します。また、他のデータベースと同様に、CRUD操作のための標準的なインターフェイスを提供します。これらの「標準的な」機能に加えて、以下に挙げる属性もベクトルデータベースとして重要な資質です:

  • 高効率ベクトル演算子のサポート

解析エンジンにおけるベクトル演算子のサポートは、2つのレベルに焦点を当てている。第一に、ベクトル・データベースはさまざまなタイプの演算子をサポートする必要がある。たとえば、前述の意味類似度マッチングや意味演算などである。これに加えて、類似度計算の基礎となるさまざまな類似度メトリックをサポートする必要がある。このような類似性は通常、ベクトル間の空間的距離として定量化され、一般的なメトリックスはユークリッド距離、余弦距離、内積距離である。

  • ベクトルインデックスのサポート

従来のデータベースにおけるB-treeやLSM-treeベースのインデックスと比較して、高次元ベクトルインデックスは通常、より多くのコンピューティングリソースを消費する。クラスタリングとグラフインデックスアルゴリズムを使用し、行列とベクトル演算を優先することで、前述のハードウェアベクトル演算アクセラレーション能力をフルに活用することを推奨します。

  • 異なる導入環境でも一貫したユーザーエクスペリエンス

ベクターデータベースは通常、異なる環境で開発・導入される。準備段階では、データサイエンティストやアルゴリズムエンジニアは、検証効率や反復速度に注意を払うため、ラップトップやワークステーションで作業することがほとんどです。検証が完了すると、プライベートクラスタやクラウド上にフルサイズのデータベースをデプロイする。したがって、適格なベクトルデータベースシステムは、さまざまな展開環境において一貫したパフォーマンスとユーザーエクスペリエンスを提供する必要がある。

  • ハイブリッド検索への対応

ベクターデータベースのユビキタス化に伴い、新たなアプリケーションが出現している。これらの要求の中で最も頻繁に言及されるのは、ベクトルと他のタイプのデータとのハイブリッド検索です。スカラーフィルタリング後の近似最近傍検索(ANNS)、全文検索とベクトル検索からのマルチチャネルリコール、時空間データとベクトルデータのハイブリッド検索などがその例である。このような課題には、ベクトル検索エンジンをKV、テキスト、その他の検索エンジンと効果的に融合させるための、弾力的なスケーラビリティとクエリの最適化が必要です。

  • クラウドネイティブアーキテクチャ

ベクトルデータの量は、データ収集の指数関数的な増加とともに急増する。兆スケールの高次元ベクトルデータは、数千TBのストレージに相当し、単一ノードの限界をはるかに超えています。その結果、水平方向の拡張性はベクトルデータベースにとって重要な能力であり、伸縮性と展開の俊敏性に対するユーザーの要求を満たす必要がある。さらに、クラウドインフラストラクチャの支援により、観測可能性を向上させながら、システムの運用と保守の複雑さを低減させる必要がある。このようなニーズには、マルチテナント分離、データのスナップショットやバックアップ、データの暗号化、データの可視化など、従来のデータベースで一般的なものがある。

ベクターデータベースシステムアーキテクチャ

Milvus2.0は、「データとしてのログ」、「バッチ処理とストリーム処理の統合」、「ステートレス」、「マイクロサービス」という設計原則に従っている。図4は、Milvus 2.0の全体的なアーキテクチャを示している。

newdata4.png newdata4.png

データとしてのログ:Milvus 2.0は物理的なテーブルを保持しない。その代わりに、ログの永続化とログのスナップショットによってデータの信頼性を確保している。ログブローカー(システムのバックボーン)はログを保存し、ログ公開-サブスクリプション(pub-sub)メカニズムによってコンポーネントとサービスを分離します。図5に示すように、ログブローカは「ログシーケンス」と「ログサブスクライバ」で構成される。ログシーケンスは、コレクション(リレーショナルデータベースのテーブルに相当)の状態を変更するすべての操作を記録し、ログサブスクライバーは、ローカルデータを更新し、読み取り専用コピーの形でサービスを提供するためにログシーケンスをサブスクライブする。pub-subメカニズムはまた、変更データキャプチャ(CDC)とグローバルに分散されたデプロイメントという点で、システムを拡張する余地を与える。

newdata5.png newdata5.png

バッチ処理とストリーム処理の統合:Milvusはログストリーミングによってリアルタイムにデータを更新し、リアルタイムなデリバリ性を確保しています。さらに、データバッチをログスナップショットに変換し、スナップショット上にインデックスを構築することで、Milvusはより高いクエリ効率を実現することができます。Milvusはクエリ中に、増分データと履歴データの両方からクエリ結果をマージし、返されるデータの統合性を保証します。このような設計により、リアルタイムのパフォーマンスと効率のバランスがより良くなり、従来のLambdaアーキテクチャと比較して、オンラインとオフラインの両方のシステムのメンテナンス負担が軽減される。

ステートレス:クラウドインフラストラクチャとオープンソースのストレージコンポーネントにより、Milvusは自身のコンポーネント内でのデータの永続化から解放される。Milvus 2.0は、メタデータストレージ、ログストレージ、オブジェクトストレージの3種類のストレージでデータを永続化する。メタデータ・ストレージはメタデータを保存するだけでなく、サービス・ディスカバリーとノード管理も行う。ログストレージは、インクリメンタルなデータ永続化とデータ公開-サブスクリプションを実行する。オブジェクト・ストレージは、ログのスナップショット、インデックス、いくつかの中間計算結果を保存する。

マイクロサービス:Milvusは、データプレーンとコントロールプレーンの分離、リード/ライトの分離、オンライン/オフラインのタスク分離の原則に従っている。アクセス・レイヤー、コーディネータ・レイヤー、ワーカー・レイヤー、ストレージ・レイヤーの4つのレイヤーから構成される。これらのレイヤーは、スケーリングとディザスタリカバリに関しては相互に独立している。フロント・レイヤーおよびユーザー・エンドポイントとして、アクセス・レイヤーはクライアント接続を処理し、クライアント・リクエストを検証し、クエリー結果を結合する。システムの "頭脳 "として、コーディネータ・レイヤーはクラスタ・トポロジーの管理、負荷分散、データ宣言、データ管理などのタスクを引き受けます。ワーカー層はシステムの "手足 "であり、データ更新、クエリー、インデックス構築作業を実行する。最後に、ストレージ層がデータの永続化とレプリケーションを担当する。全体として、このマイクロサービスベースの設計は、各コンポーネントがそれぞれ対応する機能に責任を持ち、制御可能なシステムの複雑性を保証する。Milvusは、明確に定義されたインターフェースを通じてサービスの境界を明確にし、より細かい粒度に基づいてサービスを切り離すことで、弾力的なスケーラビリティとリソースの分散をさらに最適化しています。

ベクトルデータベースが直面する技術的課題

ベクトルデータベースに関する初期の研究は、主に高効率なインデックス構造とクエリ手法の設計に集中しており、その結果、様々なベクトル検索アルゴリズムライブラリが生まれた(参考文献3~5)。ここ数年の間に、ベクトル検索の問題をシステム設計の観点から捉え直し、体系的な解決策を提案する学術チームや技術チームが増加している。既存の研究やユーザーの要望をまとめると、ベクトルデータベースの主な技術的課題は以下のように分類される:

  • 負荷に対するコストパフォーマンスの最適化

ベクトルデータは高次元データであるため、従来のデータ型と比較して、解析に必要なストレージやコンピューティングリソースが非常に多くなる。さらに、ユーザはベクトル検索ソリューションの負荷特性やコスト・パフォーマンスの最適化に対して多様な好みを示している。例えば、極めて大規模なデータセット(数百億から数千億のベクトル)を扱うユーザーは、データ保存コストが低く、検索レイテンシにばらつきのないソリューションを好むだろうし、一方で、より高い検索性能とばらつきのない平均レイテンシを求めるユーザーもいるだろう。このような多様な好みを満たすために、ベクトルデータベースのコアインデックスコンポーネントは、異なるタイプのストレージとコンピューティングハードウェアでインデックス構造と検索アルゴリズムをサポートできなければなりません。

例えば、より安価なストレージ媒体(NVMやSSDなど)にベクトルデータと対応するインデックスデータを格納することは、ストレージコストを下げる際に考慮されるべきである。しかし、既存のベクトル検索アルゴリズムのほとんどは、メモリから直接読み込んだデータで動作する。ディスクドライブの使用による性能低下を避けるため、ベクトルデータベースは、ベクトルデータとインデックス構造のストレージソリューションに適応できることに加え、検索アルゴリズムと組み合わせたデータアクセスの局所性を利用できる必要がある(参考文献6~8)。性能向上のため、GPU、NPU、FPGAなどのハードウェアアクセラレーション技術が研究されている(参考文献9)。しかし、アクセラレーションに特化したハードウェアやチップのアーキテクチャ設計は様々であり、異なるハードウェアアクセラレータ間で最も効率的な実行の問題はまだ解決されていない。

  • システム構成とチューニングの自動化

ベクトル探索アルゴリズムに関する既存の研究のほとんどは、ストレージコスト、計算性能、探索精度の柔軟なバランスを追求している。一般に、アルゴリズムのパラメータとデータの特徴の両方が、アルゴリズムの実際の性能に影響を与える。ユーザの要求はコストと性能において異なるため、ユーザのニーズとデータの特徴に合ったベクトル検索方法を選択することは重要な課題となる。

とはいえ、データ分布が検索アルゴリズムに与える影響を手動で分析する方法は、ベクトルデータの高次元のため有効ではない。この問題に対処するため、学界と産業界は機械学習に基づくアルゴリズム推薦ソリューションを模索している(参考文献No.10)。

また、MLを利用したインテリジェントなベクトル検索アルゴリズムの設計も研究のホットスポットである。一般に、既存のベクトル探索アルゴリズムは、様々な次元や分布パターンを持つベクトルデータに対して汎用的に開発されている。そのため、データの特徴に応じた特定のインデックス構造をサポートしておらず、最適化の余地が少ない。今後の研究では、データの特徴に合わせたインデックス構造を実現する効果的な機械学習技術も検討されるべきである(参考文献No.11-12)。

  • 高度なクエリーセマンティクスのサポート

現代のアプリケーションは、ベクトル間のより高度なクエリに依存することが多い。従来の最近傍検索セマンティクスは、ベクトルデータ検索にはもはや適用できない。さらに、複数のベクターデータベースにまたがる検索や、ベクターデータと非ベクターデータを組み合わせた検索に対する要求も出てきている(参考文献No.13)。

具体的には、ベクトル類似度の距離メトリクスのバリエーションが急速に増えている。ユークリッド距離、内積距離、余弦距離といった従来の類似度スコアでは、すべてのアプリケーションの要求を満たすことはできない。人工知能技術の普及に伴い、多くの業界では、谷本距離、マハラノビス距離、超構造、部分構造など、各分野に特化した独自のベクトル類似度評価基準を開発している。これらの評価指標を既存の検索アルゴリズムに統合すること、およびこれらの評価指標を利用した新しいアルゴリズムを設計することは、いずれも困難な研究課題である。

ユーザーサービスの複雑さが増すにつれ、アプリケーションはベクトルデータと非ベクトルデータの両方を検索する必要が出てくる。例えば、コンテンツ・レコメンダーは、ユーザーの嗜好や社会的関係を分析し、現在のホットな話題とマッチングさせて、適切なコンテンツをユーザーに提供する。このような検索は、通常、複数のデータタイプに対するクエリや、複数のデータ処理システムにまたがるクエリを含む。このようなハイブリッド検索を効率的かつ柔軟にサポートすることも、システム設計の課題である。

著者

Dr. Rentong Guo (Ph.D. of Computer Software and Theory, Huazhong University of Science and Technology)、Zillizのパートナー兼R&Dディレクター。中国コンピュータ連盟分散コンピューティング・処理技術委員会(CCF TCDCP)メンバー。データベース、分散システム、キャッシュシステム、ヘテロジニアスコンピューティングの研究に従事。研究成果は、Usenix ATC、ICS、DATE、TPDSなどの一流会議や学術誌に掲載されている。Milvusのアーキテクトとして、グオ博士はスケーラブルでコスト効率の高いAIベースのデータ分析システムを開発するソリューションを模索している。

Xiaofan Luan、Zillizのパートナー兼エンジニアリング・ディレクター、LF AI & Data Foundationの技術諮問委員会メンバー。オラクル米国本社、Software Defined Storageの新興企業Hedvigを歴任。Alibaba Cloud Databaseチームに参加し、NoSQLデータベースHBaseとLindormの開発を担当。コーネル大学で電子コンピューター工学の修士号を取得。

Dr. Xiaomeng Yi (Ph.D. of Computer Architecture, Huazhong University of Science and Technology) Zillizのシニアリサーチャー兼リサーチチームリーダー。高次元データ管理、大規模情報検索、分散システムにおけるリソース割り当ての研究に従事。Yi博士の研究成果は、IEEE Network Magazine、IEEE/ACM TON、ACM SIGMOD、IEEE ICDCS、ACM TOMPECSなどの主要ジャーナルや国際会議で発表されている。

ZillizのデータエンジニアであるFilip Haltmayerは、カリフォルニア大学サンタクルーズ校を卒業し、コンピューターサイエンスの理学士号を取得した。Zillizに入社後は、クラウドのデプロイメント、クライアントとのやり取り、技術的な講演、AIアプリケーションの開発などに時間を費やしている。

参考文献

  1. Milvusプロジェクト: https://github.com/milvus-io/milvus
  2. Milvus: A Purpose-Built Vector Data Management System, SIGMOD'21
  3. Faissプロジェクト: https://github.com/facebookresearch/faiss
  4. Annoyプロジェクト: https://github.com/spotify/annoy
  5. SPTAGプロジェクト:https://github.com/microsoft/SPTAG
  6. GRIP: ベクトル検索エンジンのためのマルチストア容量最適化高性能最近傍探索, CIKM'19
  7. DiskANN: シングルノード上での高速高精度10億点最近傍探索, NIPS'19
  8. HM-ANN: ヘテロジニアスメモリ上での効率的な10億点最近傍探索, NIPS'20
  9. SONG: GPU上での近似最近傍探索, ICDE'20
  10. データベース管理システムの自動チューニングサービスottertuneのデモ, VLDB'18
  11. 学習型インデックス構造の事例, SIGMOD'18
  12. 学習型適応早期終了による近似最近傍探索の改善, SIGMOD'20
  13. AnalyticDB-V:構造化データと非構造化データのクエリ融合に向けたハイブリッド分析エンジン, VLDB'20

オープンソースコミュニティ

Like the article? Spread the word

続けて読む