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ในทั้งสองกรณี embeddings มี 1024 มิติแต่ละตัวแสดงด้วยบิตเดียวบรรจุลงในเวกเตอร์ 128 ไบต์ แนะนำให้ใช้ RAM 32 GBS เพื่อเรียกใช้สคริปต์
การรู้ถึงความยาวของการฝังตัวนั้นมีประโยชน์มากสำหรับการปรับให้เหมาะสม หาก embeddings มีความยาวเพียง 1024 บิตเราต้องการเพียง 2 ZMM ลงทะเบียนเพื่อจัดเก็บเวกเตอร์ทั้งหมด เราไม่จำเป็นต้องมี for -loops จากนั้นการดำเนินการทั้งหมดสามารถคลี่ออกและ inlined
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