חומרי עזר ל-ScaNN Index

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

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

פרמטרים של כוונון

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

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

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

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

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

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

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

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

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