近似近隣の近隣の分布計算
このプロジェクトは、Wikimedia Foundationとの外部コラボレーションにおいて、コンピューターサイエンスの修士号のために、私のマスター論文作品「近隣の近隣の近隣の近隣の近隣の近隣の概念を分散した」という言及に言及しています。この作業は、ウィキペディアの画像アップロードサービスをより効率的にすることに焦点を当てており、近隣の近隣の概要の計算を分配する方法、アドホックソリューションの開発、既存の可能性を調査し、ウィキメディアデータセット内の同様の画像の分散検索を実行するために適応することに焦点を当てています。
このリポジトリは何ですか
このリポジトリは、私の目的に最適なものを見つけるために、類似性(COSINE)検索を実行するためのいくつかのライブラリの実装を含めることを目的としています。さまざまな実装は、以前に公開されたユースケースに基づいています。
おおよその最近隣人
- KNN:このライブラリは近似されておらず、私の研究ユースケースに対して非常に非効率的であり、その実装はSklearnを使用して、近似ライブラリと比較目的でのみ提供されています。 KNN内では、データ構造を作成せずに、単一のベクトルとデータセット全体の線形比較を実行するブルートフォースバージョンもあります。
- イライラ:このライブラリは、Spotifyに代わってErik Bernhardssonによって書かれたAnnのバージョンを実装しています。
- FAISS:このライブラリは、Facebook(現在のメタ)の研究チームによる高密度のベクターの効率的な類似性検索とクラスタリングのために作成されました。
- SPTAG:このライブラリは、Diskannと呼ばれる以前のライブラリの代替バージョンとしてMicrosoftによって作成された大規模なベクトル近隣の近隣検索用に設計されています。他のテクノロジーとは異なり、このソリューションには、RAMメモリと物理ディスクの使用が含まれ、それらを保存する情報と量を効率的に管理します。
近似近隣の近隣の近隣諸国
- 分散フェイス:このライブラリはすでにカバーされていますが、分散バージョンではありません。このアルゴリズムは、非常に効率的ですが、以前に単一のマシンで実行された提案にはあまり新しいものではありません。ただし、このライブラリを特別なものにしているのは、非常に簡単な方法で複数のマシンに配布できることです。
- 分散-SPTAG:このライブラリはすでにカバーされていますが、分散バージョンではありません。このアルゴリズムは、非常に効率的ですが、以前に単一のマシンで実行された提案にはあまり新しいものではありません。ただし、このライブラリを特別なものにしているのは、非常に簡単な方法で複数のマシンに配布できることです。
- Milvus:このライブラリは、類似性検索とAI搭載アプリケーションのための効率的なシステムとアーキテクチャの提供に焦点を当てたVectorデータベースを実装しています。 Milvusが満足させようとする必要性は、巨大な動的データセットで動作することができる完全なシステムを提供し、分散方法でもGPUで実行できるソリューションを提供することです。これを行うために、MilvusはすでにFAISSとして説明されているライブラリに基づいており、そのユースケースに必要な変更を加えました。
それがどのように構造化されているか
このプロジェクトは、ファイルの容易な組織を確保し、その中のナビゲーションを簡単にするための正確な方法で構成されています。
- アルゴリズム:このフォルダー内には、すべての実装を見つけることができます
- for-library:
- config.py:このファイルには、ライブラリの正しい操作に必要な構成が含まれています
- init.py:このファイルには、データセットの読み取り、データ構造のトレーニング、インデックスの作成のためのコードが含まれています
- Search.py:このファイルには、検索を実行して結果のアイテムを返すためのコードが含まれています
- その他のファイル:Chronometer.py、mocks.py
- データセット:メモリに保存されているデータセットとデータ構造は、このフォルダー内に挿入されます
- 圧縮:このフォルダーでは、挿入された例からわかるように、圧縮データセットを挿入することができます。また、すべてのwikimediaデータセットを含むlinks.txtというファイルに気付くかもしれません
- 減圧:このフォルダーでは、解凍データセットを挿入することができます。ここから、ライブラリの正しい機能のためにフィルター処理され、分解されます
- 画像:このフォルダー内では、データセットから抽出されたベクトルに対応する画像を見つけることができます
- ベクトル:このフォルダー内で、データセットから抽出された画像に対応するベクトルを見つけることができます
- formatdatasets.bash:このファイルは、このreadme.mdに続いて実行可能です、バクトル/フォルダー内のベクトルを移動する減圧フォルダーからすべてのデータセットを分解するコードを含み、画像/フォルダー内の対応する画像を移動します。このファイルは、formatdatasets.pyを使用して.csvファイルをバイナリ形式に変換して、すべてのプロジェクトを高速化します。
- ドキュメント:論文の執筆中に入手した文書
実行する方法
いくつかのデータセットをダウンロードしてください
- 圧縮フォルダーに移動し、
wget -i links.txtを実行してWikimedia Dataset(画像、ベクトル)をダウンロードします - wikimedia dataset case
gunzip *.gz - データセットフォルダーに移動し、readme.mdに従ってください
ライブラリをインポート /インストール /コンパイルします
最初にアルゴリズムフォルダーに移動し、 pip install -r requirements.txtを使用して一般的な要件をインストールします。
- KNN:
pip install scikit-learnまたはBrute-Forceバージョンを使用したい場合は何もインストールしないでください - イライラ:
pip install annoy - FAISS:Condaチュートリアルに従ってください
- SPTAG:ソースコードを介してこのライブラリをコンパイルするか、Dockerを使用できます。私はこれらのコマンドを実行して、後者のソリューションを個人的にお勧めします。
set GIT_LFS_SKIP_SMUDGE=1
git clone --recurse-submodules https://github.com/microsoft/SPTAG
cd SPTAG
docker build -t sptag .
- 分散フェイス:リポジトリをクローンします(PRを使用してPRを使用して
set_index_parameterまたはset_index_parametersメソッドを使用して検索フェーズを追加する場合は、このリポジトリをクローンします)、フォルダーを入力してからpip install -e . - 分散-SPTAG: SPTAGの命令に従ってください
- Milvus:
pip install pymilvus 、MilvusはDocker ComposeまたはKubernetes(テスト用のMilvus Standalone)またはヘルム + Kubernetes(Milvus Cluster for Production)でインストールできます。
ANNライブラリを実行します
ライブラリを実行する前に、さまざまなconfig.pyファイルをカスタマイズします
python init.py-
python search.py
分散型ANNライブラリを実行します
ライブラリを実行する前に、さまざまなconfig.pyファイルをカスタマイズします
- 分散フェイス:
- discovery_config.txtファイルをカスタマイズします。
- 各サーバー
python init_server.pyで実行します - クライアント
python init_client.pyで実行します - クライアント
python search.pyで実行します
- 分散撮影:
- 各サーバーに移動し、config.pyファイル(start_metadata_offsetに注意)をカスタマイズし、
python init.pyを実行します - 以前に作成されたインデックスをホストするサーバーに移動します。ライブラリのリリースフォルダーで、service.iniファイルをインポートしてカスタマイズし、コマンドを実行します
./server -m socket -c service.ini - アグリゲーターとして識別するマシンに移動します。ライブラリのリリースフォルダーで、aggregator.iniファイルをインポートしてカスタマイズし、コマンドを実行します
./aggregator - クライアントに移動し、config.pyファイルをカスタマイズし、
python search.pyを実行します
- Milvus:
-
python init.py -
python search.py
クリスチャン・スチンゴンによって作られました