アドバンスト・ベクトル・エクステンションとは?
世界を征服しようとする意識的なインテリジェント・マシンは、サイエンス・フィクションの中では着実に定着しているが、現実には現代のコンピューターは非常に従順である。言われなくても、自分で何をすればいいのかほとんどわからない。コンピューターは、プログラムからプロセッサーに送られる命令(インストラクション)に基づいてタスクを実行する。一般に、コンピュータのアセンブリ言語では、機械語の各ステートメントがプロセッサの命令に対応する。中央演算処理装置(CPU)は、命令を頼りに計算を行い、システムを制御する。また、CPUの性能は命令実行能力(実行時間など)で測られることが多い。
アドバンスト・ベクトル・エクステンションとは?
アドバンスト・ベクトル拡張命令(AVX)は、x86ファミリーの命令セット・アーキテクチャを採用したマイクロプロセッサ向けの命令セットです。インテルが2008年3月に初めて提案したAVXは、3年後のSandy Bridge(第2世代インテルCoreプロセッサー(Core i7、i5、i3など)に採用されたマイクロアーキテクチャ)の発表と、同じく2011年に発表されたAMDの競合マイクロアーキテクチャBulldozerによって、幅広い支持を得るようになりました。
AVXは新しいコーディング方式、新機能、新命令を導入した。AVX2では、ほとんどの整数演算が256ビットに拡張され、FMA(fused multiply-accumulate)演算が導入された。AVX-512は、新しい拡張ベクトル拡張(EVEX)プリフィックス符号化を使用して、AVXを512ビット演算に拡張します。
Milvusは、類似検索や人工知能(AI)アプリケーション向けに設計されたオープンソースのベクトルデータベースです。このプラットフォームはAVX-512命令セットをサポートしており、AVX-512命令を含むすべてのCPUで使用できる。Milvusは、レコメンダー・システム、コンピューター・ビジョン、自然言語処理(NLP)など、幅広い応用が可能です。この記事では、AVX-512とAVX2におけるMilvusベクトルデータベースの性能結果と解析を紹介します。
AVX-512とAVX2のMilvus性能比較
システム構成
- CPUIntel® Platinum 8163 CPU @ 2.50GHz 24コア 48スレッド
- CPU数2
- グラフィックカード、GeForce RTX 2080Ti 11GB 4枚
- メモリ:768GB
- ディスク: 2TB SSD
milvusパラメータ
- cahce.cahe_size: 25, 高速クエリのためのデータキャッシュに使用するCPUメモリのサイズ。
- nlist:4096
- nprobe:128
注:nlist
はクライアントから作成するインデックス作成パラメータです。nprobe
は検索パラメータです。IVF_FLATとIVF_SQ8はどちらもクラスタリングアルゴリズムを使用して、多数のベクトルをバケットに分割します。nlist
はクラスタリング中に分割するバケットの総数です。クエリの最初のステップは、ターゲットベクトルに最も近いバケットの数を見つけることであり、2番目のステップは、ベクトルの距離を比較することによって、これらのバケット内の上位k個のベクトルを見つけることです。nprobe
は、最初のステップのバケットの数を意味します。
データセットSIFT10Mデータセット
このデータセットは128次元のベクトルを100万個含み、対応する最近傍探索手法の性能分析によく使われる。nq = [1, 10, 100, 500, 1000]のトップ1探索時間を2つの命令セット間で比較する。
ベクトルインデックスの種類による結果
ベクトルインデックスは、様々な数学的モデルを用いてコレクションのベクトルフィールド上に構築される、時間と空間効率の良いデータ構造である。ベクトルインデックスを使用することで、入力ベクトルに類似したベクトルを特定しようとするときに、大規模なデータセットを効率的に検索することができる。正確な検索には時間がかかるため、Milvusがサポートするインデックスタイプのほとんどは近似最近傍(ANN)検索を使用している。
これらのテストではAVX-512とAVX2でIVF_FLAT、IVF_SQ8、HNSWの3つのインデックスが使用された。
IVF_FLAT
反転ファイル(IVF_FLAT)は量子化に基づくインデックスタイプである。最も基本的なIVFインデックスであり、各ユニットに格納される符号化データは元のデータと一致します。 このインデックスは、ベクトルデータをいくつかのクラスタ単位(nlist)に分割し、対象となる入力ベクトルと各クラスタの中心との距離を比較します。システムがクエリに設定するクラスタ数(nprobe)に応じて、ターゲット入力と最も類似したクラスタ(複数可)内のベクトルとの比較に基づく類似性検索結果が返され、クエリ時間が大幅に短縮される。nprobeを調整することで、シナリオに応じた精度と速度の理想的なバランスを見つけることができます。
パフォーマンス結果 IVF_FLAT.png
IVF_SQ8
IVF_FLATは圧縮を行わないため、生成されるインデックスファイルのサイズは、インデックスを持たない元の生のベクトルデータとほぼ同じです。ディスク、CPU、GPU のメモリリソースが限られている場合は、IVF_FLAT よりも IVF_SQ8 の方が適しています。 このインデックスタイプは、スカラー量子化を行うことで、元のベクトルの各次元を 4 バイトの浮動小数点数から 1 バイトの符号なし整数に変換できます。これにより、ディスク、CPU、GPUのメモリ消費量を70~75%削減することができます。
性能結果 IVF_SQ8.png
HNSW
HNSW(Hierarchical Small World Graph)は、グラフベースのインデックス作成アルゴリズムです。クエリは最上層でターゲットに最も近いノードを見つけることから始まり、次の層に降りて検索を繰り返します。何度も繰り返された後、ターゲットの位置に素早く近づくことができる。
パフォーマンス結果 HNSW.png
ベクトルインデックスの比較
ベクトル検索はAVX2よりもAVX-512命令セットの方が一貫して高速です。これはAVX-512が512ビット計算をサポートするのに対し、AVX2では256ビット計算しかサポートしないからです。理論的にはAVX-512はAVX2の2倍速くなるはずですが、Milvusはベクトルの類似度計算に加えて他の時間のかかるタスクも行っています。AVX-512の全体的な検索時間は、実世界のシナリオではAVX2の2倍短くなるとは考えにくい。 comparison.png
HNSWインデックスの検索は他の2つのインデックスよりかなり高速ですが、IVF_SQ8の検索はどちらの命令セットでもIVF_FLATよりわずかに高速です。これは、IVF_SQ8はIVF_FLATが必要とするメモリの25%しか必要としないためと思われる。IVF_SQ8 は各ベクトル次元に 1 バイトをロードしますが、IVF_FLAT は各ベクトル次元に 4 バイトをロードします。計算に必要な時間は、メモリ帯域幅に制約される可能性が高いです。その結果、IVF_SQ8 は、占有スペースが少ないだけでなく、ベクトル検索に要する時間も短くて済みます。
Milvusは汎用性の高い高性能ベクトルデータベースである。
この記事で紹介したテストは、MilvusがAVX-512とAVX2の両方の命令セットで異なるインデックスを使用して優れた性能を発揮することを示しています。インデックスの種類に関係なく、MilvusはAVX-512で優れた性能を発揮します。
Milvusはさまざまなディープラーニングプラットフォームと互換性があり、雑多なAIアプリケーションで使用されている。Milvus 2.0は、世界で最も人気のあるベクトルデータベースを再構築したもので、2021年7月にオープンソースライセンスでリリースされた。プロジェクトの詳細については、以下のリソースをご覧ください:
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word