Periplus อยู่ในอัลฟ่าและยังไม่พร้อมการผลิต โครงการอยู่ระหว่างการพัฒนาที่ใช้งานอยู่และยังไม่แนะนำให้ใช้ในระบบการผลิต
Periplus เป็นแคชฐานข้อมูลเวกเตอร์ในโอเพ่นซอร์สโอเพ่นซอร์สที่สร้างขึ้นบนไลบรารีการค้นหาเวกเตอร์ที่คล้ายคลึงกันของเมตา โครงการสามารถคิดได้ดีที่สุดว่า "Redis สำหรับฐานข้อมูลเวกเตอร์" มันถูกออกแบบมาเพื่อจัดเก็บชุดย่อยที่อัปเดตแบบไดนามิกของคอลเลกชันเวกเตอร์ขนาดใหญ่ทั้งหมดในหน่วยความจำในขณะที่ให้บริการแบบสอบถามโดยไม่ต้องโต้ตอบกับโหนดอื่น ๆ ในเวลาค้นหา เมื่อ Periplus ได้รับการสืบค้นก่อนจะประเมินว่ามีส่วนที่เกี่ยวข้องของดัชนีในที่พักอาศัยหรือไม่ ถ้าเป็นเช่นนั้นมันจะแก้ไขการสืบค้นด้วยการตอบกลับที่เหมาะสม หากไม่เป็นเช่นนั้นมันจะส่งคืนแคชพลาดและออกจาก querier เพื่อดึงข้อมูลจากฐานข้อมูล Periplus ไม่ได้ออกแบบมาเพื่อทำงานแยก แต่มันหมายถึงการสร้างชั้นแคชแบบแยกส่วนและยืดหยุ่นสำหรับฐานข้อมูลเวกเตอร์แยกต่างหากซึ่งเป็นชั้นการคงอยู่ จุดประสงค์ของสิ่งนี้คือเพื่อให้สามารถใช้เวลาแฝงที่ต่ำกว่าและปรับขนาดแนวนอนได้ง่ายเพื่อเพิ่มปริมาณงาน สำหรับคำอธิบายโดยละเอียดเพิ่มเติมเกี่ยวกับแรงบันดาลใจเบื้องหลัง Periplus และวิธีการทำงานคุณสามารถอ่านบล็อกประกาศ: แนะนำ Periplus: วิธีการใหม่ในการแคชฐานข้อมูล Vector
Periplus ใช้ดัชนีไฟล์แบบกลับด้าน (IVF) เป็นพื้นฐานสำหรับการจัดการแคช ดัชนีไฟล์แบบกลับด้านพาร์ติชันพื้นที่เวกเตอร์เป็นเซลล์ที่ต่อเนื่องกันที่กำหนดโดยชุดของเวกเตอร์เซนทรอยด์ที่แต่ละเซลล์ถูกกำหนดให้เป็นภูมิภาคที่อยู่ใกล้กับเซนทรอยด์มากกว่าเซนทรอยด์อื่น ๆ แบบสอบถามจะได้รับการแก้ไขโดยการคำนวณระยะทางก่อนจากเวกเตอร์แบบสอบถามไปยังชุดของเซนทรอยด์จากนั้นค้นหาเฉพาะเซลล์ที่กำหนดโดย N_PROBE (การค้นหา hyperparameter) centroids ที่ใกล้เคียงที่สุด Periplus ใช้ประโยชน์จากสิ่งนี้โดยการรักษาชุดย่อยของเซลล์เหล่านี้ในที่อยู่อาศัยในเวลาใดก็ตามและแก้ไขเฉพาะการสอบถามที่เกี่ยวข้องกับชุดย่อยนั้นในขณะที่ปฏิเสธเซลล์ที่ไม่ได้พลาดแคช Periplus โหลดและขับไล่เซลล์ IVF ทั้งหมดในเวลาเดียวกันเพื่อรักษาความสมบูรณ์ของดัชนีและตรวจสอบให้แน่ใจว่าการเรียกคืนที่เทียบเท่า (บนแคชฮิต) ไปยังดัชนี IVF มาตรฐาน เซลล์ IVF จะถูกโหลดโดยการสืบค้นฐานข้อมูลเวกเตอร์ผ่านพร็อกซีที่มีรายการ ID ของเวกเตอร์ซึ่ง Periplus เก็บรักษาไว้เพื่อติดตามว่าเวกเตอร์ใดครอบครองเซลล์ใด การดำเนินการเหล่านี้สามารถเรียกใช้โดยผู้ใช้โดยใช้คำ สั่งโหลด ค้นหา และ ขับไล่ คำสั่ง สำหรับรายละเอียดดูส่วนคำสั่ง Periplus ด้านล่าง
Periplus สามารถเรียกใช้เป็นคอนเทนเนอร์ Docker หรือสามารถสร้างได้จากแหล่งที่มาและเรียกใช้เป็นปฏิบัติการ ปัจจุบันไม่มีไบนารีอย่างเป็นทางการ การรัน Periplus เป็นคอนเทนเนอร์เป็นวิธีที่แนะนำ แต่ทั้งคู่เป็นตัวเลือกที่ทำงานได้
ปัจจุบันอิมเมจ Docker รองรับสถาปัตยกรรม AMD64 เท่านั้น ข้อ จำกัด นี้เกิดจากภาพพื้นฐาน แต่จะได้รับการสนับสนุนสถาปัตยกรรมมากขึ้นในอนาคตอันใกล้ มี 2 วิธีในการเรียกใช้ Periplus เป็นคอนเทนเนอร์: ดาวน์โหลดภาพ Docker อย่างเป็นทางการจาก DockerHub (แนะนำ) หรือสร้างภาพด้วยตัวเอง ขั้นตอนแรกในทั้งสองกรณีคือการติดตั้ง Docker หากคุณยังไม่ได้ทำ คำแนะนำในการทำเช่นนั้นสามารถพบได้ที่นี่
docker image pull qdl123/periplus:latestdocker run -p 3000:3000 qdl123/periplus:latest git clone https://github.com/QDL123/Periplus.gitcd <path-to-periplus-repo>/Periplusdocker build -t periplus-image .docker run -p 3000:3000 periplus-image .Periplus ใช้ CMAKE สำหรับระบบสร้าง คาดว่าการพึ่งพาทั้งหมดจะติดตั้งไบนารีไว้ล่วงหน้าผ่าน Homebrew Homebrew ได้รับการสนับสนุนจาก MacOS, Ubuntu และ WSL หากคุณอยู่ใน Windows Periplus ถูกสร้างขึ้นบน MacOS/ARM64 และ Ubuntu/AMD64 ระบบปฏิบัติการและสถาปัตยกรรมอื่น ๆ ทั้งหมดยังไม่ได้ทดสอบ ในการสร้าง periplus จากแหล่งที่มาให้ทำตามขั้นตอนต่อไปนี้:
brew install faiss curl cpr rapidjson libomp catch2 cmakegit clone https://github.com/QDL123/Periplus.gitcd <path-to-periplus-repo>/Peripluscmake -S . -B buildcmake --build build./build/periplus -p 3000 ระบบใด ๆ ที่ใช้ periplus จะประกอบด้วย 4 ส่วนประกอบ: ฐานข้อมูลเวกเตอร์, พร็อกซีฐานข้อมูลซึ่งอนุญาตให้ Periplus โหลดข้อมูลจากฐานข้อมูลอินสแตนซ์ periplus และแอปพลิเคชันไคลเอนต์

ตัวอย่างสถาปัตยกรรมของแอปพลิเคชันโดยใช้ Periplus
ฐานข้อมูลเวกเตอร์ใด ๆ ที่อนุญาตให้ค้นหาข้อมูลโดยตัวระบุที่ไม่ซ้ำกัน (แทบทั้งหมด) จะทำงานได้ Periplus ได้รับการออกแบบให้มีประโยชน์มากที่สุดเมื่อทำงานกับคอลเลคชั่นเวกเตอร์ขนาดใหญ่ (พันล้านระดับ) ซึ่งดัชนีจะต้องอาศัยอยู่ในระบบไฟล์เมื่อเทียบกับ RAM แม้ว่าจะไม่ใช่ข้อกำหนดก็ตาม
จุดประสงค์ของพร็อกซีฐานข้อมูลเวกเตอร์คือการจัดเตรียมอินเทอร์เฟซที่สอดคล้องกันสำหรับ Periplus เพื่อโต้ตอบกับฐานข้อมูลเวกเตอร์ผ่าน พร็อกซีจะต้องใช้อินเทอร์เฟซ REST ซึ่งยอมรับคำขอโพสต์ของแบบฟอร์มต่อไปนี้:
URL: นี่คือความยืดหยุ่นและสามารถระบุได้โดยไคลเอนต์ Periplus
ส่วนหัว: "Content-Type": "application/json
ร่างกาย:
{
"ids" : [ " id-1 " , " id-2 " , " id-3 " ]
}การตอบสนอง:
{
"results" : [
{
"id" : " String " ,
"embedding" : [ 0.1 , 0.2 , 0.3 ],
"document" : " String " ,
"metdata" : " String "
}
]
}เพื่อให้การใช้งานจุดสิ้นสุดนี้ง่ายขึ้นคุณสามารถใช้แพ็คเกจ Periplus-Proxy Python ซึ่งใช้ fastapi เพื่อตั้งค่าทุกอย่าง ผู้ใช้ทั้งหมดต้องทำคือใช้ฟังก์ชั่นต่อไปนี้และส่งผ่านเป็นอาร์กิวเมนต์:
async def fetch_ids(request: Query) -> QueryResult
สำหรับรายละเอียดเกี่ยวกับวิธีการทำเช่นนี้คุณสามารถตรวจสอบแพ็คเกจ periplus-proxy readme.md
ทำตามคำแนะนำด้านบนเพื่อเริ่มต้นอินสแตนซ์ periplus
หากต้องการโต้ตอบกับอินสแตนซ์ Periplus ของคุณให้ใช้ไลบรารีไคลเอนต์ Periplus ปัจจุบันรองรับ Python เท่านั้น สำหรับรายละเอียดเกี่ยวกับไลบรารีไคลเอนต์คุณสามารถดู readme.md
from periplus_client import Periplus
# host, port
client = Periplus ( "localhost" , 13 )
# vector dimensionality, database proxy url, options: (nTotal)
await client . initialize ( d = d , db_url = url , options = { "nTotal" : 50000 })
training_data = [[ 0.43456 , ..., 0.38759 ], ...]
await client . train ( training_data )
ids = [ "0" , ..., "n" ]
embeddings = [[ 0.43456 , ..., 0.38759 ], ...]
await client . add ( ids = ids , embeddings = embeddings )
load_options = { "n_load" : 2 }
# query_vector, optional: options object
await client . load ([ embeddings [ 0 ]] load_options )
# k, query_vector
response = await client . search ( 5 , [ embeddings [ 0 ]])
print ( response )
'''
[ // Results for each of the n query vectors in xq
[ // K nearest neighbors to this corresponding index in the xq list
(
id="n",
embedding=[0.43456, ..., 0.38759],
document="",
metadata="{}"
),
...
],
...
]
'''
# query_vector
await client . evict ( embeddings [ 0 ])เรายินดีต้อนรับการมีส่วนร่วมใน Periplus! หากต้องการเรียนรู้วิธีเริ่มต้นดูคู่มือการบริจาค
โครงการนี้ได้รับใบอนุญาตภายใต้ใบอนุญาต MIT - ดูไฟล์ใบอนุญาตสำหรับรายละเอียด