מאמרי עזרה על אינדקס ScaNN

בחירת גרסה של מאמר העזרה:

בדף הזה מופיע חומר עזר בנושא אינדקס ScaNN.

פרמטרים של התאמה

הפרמטרים הבאים של האינדקס והדגלים של מסד הנתונים משמשים יחד כדי למצוא את האיזון הנכון בין היזכרות לבין QPS.

פרמטר של התאמה תיאור סוג האפשרות
max_num_levels המספר המקסימלי של רמות מרכזיות בעץ האשכולות של K-means.
  • אינדקס של עץ דו-רמתי: מוגדר כ-1 כברירת מחדל לעץ דו-רמתי (רמה אחת של צנטרואיד + רמה תחתונה של עלה).
  • אינדקס עץ עם שלוש רמות: מוגדר כ-2 כברירת מחדל לעץ עם שלוש רמות (2 רמות של מרכזי מסה + רמת עלים תחתונה)
  • מגדירים את הערך ל-2 אם מספר השורות של הווקטור גדול מ-100 מיליון.
  • מגדירים את הערך ל-1 אם מספר השורות הווקטוריות קטן מ-10 מיליון שורות.
  • אם מספר השורות של הווקטור הוא בין 10 מיליון ל-100 מיליון, צריך להגדיר את הערך 1 או 2 כדי לבצע אופטימיזציה של משך זמן של תהליך build של האינדקס (הגדרה של 2) או אופטימיזציה של אחזור החיפוש (הגדרה של 1).
יצירת אינדקס
(אופציונלי)
num_leaves מספר המחיצות שיוחלו על האינדקס הזה. מספר המחיצות שאתם מחילים כשאתם יוצרים אינדקס משפיע על ביצועי האינדקס. הגדלת מספר המחיצות עבור מספר נתון של וקטורים יוצרת אינדקס מפורט יותר, שמשפר את השליפה ואת ביצועי השאילתות. עם זאת, זה בא על חשבון זמן יצירת אינדקס ארוך יותר.

מכיוון שעצים עם שלוש רמות נבנים מהר יותר מעצים עם שתי רמות, אפשר להגדיל את num_leaves_value כשיוצרים אינדקס של עץ עם שלוש רמות כדי לשפר את הביצועים.
  • אינדקס דו-רמתי: מגדירים את הערך הזה לכל ערך בין 1 ל-1048576.

    כדי ליצור אינדקס שמאזן בין בניית אינדקס מהירה לבין ביצועי חיפוש טובים, אפשר להשתמש בערך sqrt(ROWS) כנקודת התחלה, כאשר ROWS הוא מספר השורות של הווקטור. מספר הווקטורים שכל מחיצה מכילה מחושב לפי
    ROWS/sqrt(ROWS) = sqrt(ROWS).

    מכיוון שאפשר ליצור אינדקס של עץ דו-רמתי במערך נתונים עם פחות מ-10 מיליון שורות וקטורים, כל מחיצה תכיל פחות מ-(sqrt(10M)) וקטורים, כלומר 3200 וקטורים. כדי לקבל איכות אופטימלית של חיפוש וקטורים, מומלץ לצמצם את מספר הווקטורים בכל מחיצה. הגודל המומלץ של מחיצה הוא כ-100 וקטורים למחיצה, ולכן צריך להגדיר את num_leaves ל-ROWS/100. אם יש לכם 10 מיליון וקטורים, צריך להגדיר את num_leaves ל-100,000.
  • אינדקס תלת-רמתי: מגדירים את הערך הזה לכל ערך בין 1 ל-1048576.

    אם אתם לא בטוחים איזה ערך לבחור, אפשר להשתמש ב-power(ROWS, 2/3) כנקודת התחלה, כאשר ROWS הוא מספר השורות של הווקטור. מספר הווקטורים בכל מחיצה מחושב לפי
    ROWS/power(ROWS, 2/3) = power(ROWS, 1/3).

    מכיוון שאפשר ליצור אינדקס של עץ תלת-רמתי במערך נתונים עם יותר מ-100 מיליון שורות וקטוריות, כל מחיצה תכיל יותר מ-
    (power(100M, 1/3)) וקטורים, כלומר 465 וקטורים. כדי לקבל איכות אופטימלית של חיפוש וקטורים, מומלץ לצמצם את מספר הווקטורים בכל מחיצה. הגודל המומלץ של מחיצה הוא כ-100 וקטורים למחיצה, ולכן צריך להגדיר את num_leaves ל-ROWS/100. אם יש לכם 100 מיליון וקטורים, צריך להגדיר את num_leaves למיליון.
יצירת אינדקס
(חובה)
quantizer סוג הכמת שרוצים להשתמש בו בעץ K-means. ערך ברירת המחדל הוא SQ8, שמספק ביצועים טובים יותר של שאילתות עם אובדן מינימלי של אחזור (בדרך כלל פחות מ-1-2%).

מגדירים את הערך ל-FLAT אם נדרש אחזור של 99% ומעלה.
יצירת אינדקס
(אופציונלי)
scann.enable_inline_filtering התכונה מאפשרת תמיכה בסינון מוטבע ששולח שאילתות לנתונים ומחיל מסננים ישירות בתוך פעולת חיפוש של דמיון וקטורי. שאילתות הדמיון הווקטורי האלה משתמשות במסננים באותן טבלאות של מסד הנתונים, ומשלימות את הערכת המסננים תוך חישוב המרחק לזיהוי השכן הקרוב ביותר. האפשרות הזו מושבתת כברירת מחדל.

כדי להפעיל סינון מוטבע, מגדירים את הפרמטר הזה לערך true. אם אתם מבחינים בירידה בביצועים, צריך להגדיר את האפשרות ל-false.

האפשרות הזו זמינה בגרסת טרום-השקה.
זמן הריצה של השאילתה
(אופציונלי)
scann.enable_pca ההגדרה הזו מפעילה ניתוח רכיבים עיקריים (PCA), שהיא טכניקה לצמצום ממדים שמשמשת לצמצום הגודל של ההטמעה באופן אוטומטי, כשזה אפשרי. האפשרות הזו מופעלת כברירת מחדל.

מגדירים את האפשרות לערך false אם חל שיפור בשליפה.
יצירת אינדקס
(אופציונלי)
scann.num_leaves_to_search הדגל הזה במסד הנתונים קובע את המספר המוחלט של עלים או מחיצות לחיפוש, וכך מאפשר לכם לבחור בין דיוק לבין מספר שאילתות לשנייה. ערך ברירת המחדל הוא 1% מהערך שמוגדר ב-num_leaves.

ערך גבוה יותר יוביל לזיכרון טוב יותר אבל ל-QPS נמוך יותר. באופן דומה, ערך נמוך יותר יוביל לשיעור היזכרות נמוך יותר אבל ל-QPS גבוה יותר.
זמן הריצה של השאילתה
(אופציונלי)
scann.pre_reordering_num_neighbors אם הדגל של מסד הנתונים מוגדר, הוא מציין את מספר השכנים הפוטנציאליים שצריך לקחת בחשבון בשלבי הסידור מחדש אחרי שהחיפוש הראשוני מזהה קבוצה של מועמדים. מגדירים את הפרמטר הזה לערך גבוה ממספר השכנים שרוצים שהשאילתה תחזיר.

ערך גבוה יותר מוביל לזיכרון טוב יותר, אבל ל-QPS נמוך יותר. כדי להשבית את שינוי הסדר, מגדירים את הערך הזה ל-0. ברירת המחדל היא 0 אם PCA לא מופעל במהלך יצירת האינדקס. אחרת, ברירת המחדל היא 50 x K, כאשר K הוא הערך של LIMIT שצוין בשאילתה.
זמן הריצה של השאילתה
(אופציונלי)
scann.num_search_threads מספר השרשורים של החיפוש עבור חיפוש מרובה שרשורים. השימוש ביותר משרשור אחד לחיפוש ScaNN ANN באפליקציות שרגישות לזמן האחזור יכול לעזור לצמצם את זמן האחזור של שאילתה יחידה. ההגדרה הזו לא משפרת את זמן האחזור של שאילתה יחידה אם מסד הנתונים כבר מוגבל על ידי המעבד. ערך ברירת המחדל הוא 2. זמן הריצה של השאילתה
(אופציונלי)

המאמרים הבאים