FAISS เป็นห้องสมุดสำหรับการค้นหาความคล้ายคลึงกันอย่างมีประสิทธิภาพและการจัดกลุ่มของเวกเตอร์หนาแน่น มันมีอัลกอริทึมที่ค้นหาในชุดของเวกเตอร์ทุกขนาดถึงสิ่งที่อาจไม่พอดีกับ RAM นอกจากนี้ยังมีรหัสสนับสนุนสำหรับการประเมินผลและการปรับพารามิเตอร์ FAISS เขียนใน C ++ พร้อม wrappers ที่สมบูรณ์สำหรับ Python/Numpy อัลกอริทึมที่มีประโยชน์ที่สุดบางส่วนถูกนำไปใช้กับ GPU มันได้รับการพัฒนาเป็นหลักในกลุ่มวิจัย AI พื้นฐานของ Meta
ดู Changelog.md สำหรับข้อมูลโดยละเอียดเกี่ยวกับคุณสมบัติล่าสุด
FAISS มีหลายวิธีสำหรับการค้นหาความคล้ายคลึงกัน สันนิษฐานว่าอินสแตนซ์จะแสดงเป็นเวกเตอร์และถูกระบุด้วยจำนวนเต็มและสามารถเปรียบเทียบเวกเตอร์กับระยะทาง L2 (ยุคลิด) หรือผลิตภัณฑ์ DOT เวกเตอร์ที่คล้ายกับเวกเตอร์แบบสอบถามคือที่มีระยะทาง L2 ต่ำสุดหรือผลิตภัณฑ์ DOT สูงสุดพร้อมเวกเตอร์แบบสอบถาม นอกจากนี้ยังรองรับความคล้ายคลึงกันของโคไซน์เนื่องจากนี่เป็นผลิตภัณฑ์ DOT ในเวกเตอร์ปกติ
วิธีการบางอย่างเช่นวิธีการที่ใช้เวกเตอร์ไบนารีและรหัสปริมาณขนาดกะทัดรัดใช้การแสดงการบีบอัดของเวกเตอร์และไม่จำเป็นต้องเก็บเวกเตอร์ดั้งเดิม โดยทั่วไปมาจากค่าใช้จ่ายในการค้นหาที่แม่นยำน้อยกว่า แต่วิธีการเหล่านี้สามารถปรับขนาดเป็นพันล้านเวกเตอร์ในหน่วยความจำหลักบนเซิร์ฟเวอร์เดียว วิธีอื่น ๆ เช่น HNSW และ NSG เพิ่มโครงสร้างการจัดทำดัชนีที่ด้านบนของเวกเตอร์ดิบเพื่อให้การค้นหามีประสิทธิภาพมากขึ้น
การใช้งาน GPU สามารถรับอินพุตจากหน่วยความจำ CPU หรือ GPU บนเซิร์ฟเวอร์ที่มี GPU ดัชนี GPU สามารถใช้การแทนที่แบบดรอปอินสำหรับดัชนี CPU (เช่นแทนที่ IndexFlatL2
ด้วย GpuIndexFlatL2
) และสำเนาไปยัง/จากหน่วยความจำ GPU จะถูกจัดการโดยอัตโนมัติ ผลลัพธ์จะเร็วขึ้นอย่างไรก็ตามหากทั้งอินพุตและเอาต์พุตยังคงอยู่ใน GPU รองรับการใช้งานทั้งแบบเดี่ยวและหลาย GPU
FAISS มาพร้อมกับห้องสมุดที่คอมไพล์ล่วงหน้าสำหรับ Anaconda ใน Python ดู FAISS-CPU และ FAISS-GPU ห้องสมุดส่วนใหญ่จะถูกนำไปใช้ใน C ++ การพึ่งพาเพียงอย่างเดียวคือการใช้งาน BLAS การสนับสนุน GPU เสริมมีให้ผ่าน CUDA หรือ AMD ROCM และอินเทอร์เฟซ Python ก็เป็นทางเลือกเช่นกัน มันรวบรวมด้วย cmake ดู Install.MD สำหรับรายละเอียด
FAISS ถูกสร้างขึ้นรอบ ๆ ประเภทดัชนีที่เก็บชุดเวกเตอร์และให้ฟังก์ชั่นเพื่อค้นหาด้วย L2 และ/หรือการเปรียบเทียบเวกเตอร์ผลิตภัณฑ์ DOT ดัชนีบางประเภทเป็นเส้นเขตแดนที่เรียบง่ายเช่นการค้นหาที่แน่นอน โครงสร้างการจัดทำดัชนีที่มีอยู่ส่วนใหญ่สอดคล้องกับการแลกเปลี่ยนที่หลากหลายเกี่ยวกับ
การใช้งาน GPU ที่เป็นตัวเลือกให้สิ่งที่น่าจะเป็น (ณ เดือนมีนาคม 2017) การใช้งานการค้นหาเพื่อนบ้านที่ใกล้ที่สุดและโดยประมาณที่เร็วที่สุด การใช้งานมีรายละเอียดที่นี่
ต่อไปนี้เป็นจุดเริ่มต้นสำหรับเอกสาร:
ผู้เขียนหลักของ FAISS คือ:
การอ้างอิงถึงการอ้างอิงเมื่อคุณใช้ FAISS ในรายงานการวิจัย:
@article{douze2024faiss,
title={The Faiss library},
author={Matthijs Douze and Alexandr Guzhva and Chengqi Deng and Jeff Johnson and Gergely Szilvasy and Pierre-Emmanuel Mazaré and Maria Lomeli and Lucas Hosseini and Hervé Jégou},
year={2024},
eprint={2401.08281},
archivePrefix={arXiv},
primaryClass={cs.LG}
}
สำหรับ FAISS เวอร์ชัน GPU โปรดอ้างอิง:
@article{johnson2019billion,
title={Billion-scale similarity search with {GPUs}},
author={Johnson, Jeff and Douze, Matthijs and J{'e}gou, Herv{'e}},
journal={IEEE Transactions on Big Data},
volume={7},
number={3},
pages={535--547},
year={2019},
publisher={IEEE}
}
สำหรับการอภิปรายสาธารณะของ FAISS หรือสำหรับคำถามมีกลุ่ม Facebook ที่ https://www.facebook.com/groups/faissusers/
เราตรวจสอบหน้าปัญหาของที่เก็บ คุณสามารถรายงานข้อบกพร่องถามคำถาม ฯลฯ
FAISS ได้รับอนุญาตจาก MIT อ้างถึงไฟล์ใบอนุญาตในไดเรกทอรีระดับบนสุด
ลิขสิทธิ์© Meta Platforms, Inc.