usearch binary
1.0.0
このリポジトリには、Huggingfaceポータルで利用可能なウィキペディア埋め込みのバイナリベクトル検索インジケーションを構築するための例が含まれています。
結果を表示するには、 bench.ipynbをご覧ください。結果を複製するには、最初にデータをダウンロードします。
$ pip install -r requirements.txt
$ python download.py
$ ls -alh mixedbread | head -n 1
> total 15G
$ ls -alh cohere | head -n 1
> total 15Gどちらの場合も、埋め込みには1024の寸法があり、それぞれが128バイトのベクトルに詰め込まれたシングルビットで表されます。スクリプトを実行するには、32 GBのRAMが推奨されます。
埋め込みの長さを知ることは、最適化に非常に便利です。埋め込みの長さはわずか1024ビットの場合、ベクトル全体を保存するには2つのZMMレジスタのみが必要です。 -loops for必要ありません。その後、操作全体を展開してインラインしている場合があります。
inline uint64_t hamming_distance ( uint8_t const * first_vector , uint8_t const * second_vector ) {
__m512i const first_start = _mm512_loadu_si512 (( __m512i const * )( first_vector ));
__m512i const first_end = _mm512_loadu_si512 (( __m512i const * )( first_vector + 64 ));
__m512i const second_start = _mm512_loadu_si512 (( __m512i const * )( second_vector ));
__m512i const second_end = _mm512_loadu_si512 (( __m512i const * )( second_vector + 64 ));
__m512i const differences_start = _mm512_xor_epi64 ( first_start , second_start );
__m512i const differences_end = _mm512_xor_epi64 ( first_end , second_end );
__m512i const population_start = _mm512_popcnt_epi64 ( differences_start );
__m512i const population_end = _mm512_popcnt_epi64 ( differences_end );
__m512i const population = _mm512_add_epi64 ( population_start , population_end );
return _mm512_reduce_add_epi64 ( population );
}カーネルベンチマークを実行するには、次のコマンドを使用します。
$ python kernel.py実際のデータでベンチマークを実行するには:
$ python kernels.py --dir cohere --limit 1e6