משתמשים עם הרשאה ל-GPU ב-LiteRT (original) (raw)

שימוש ביחידות עיבוד גרפיות (GPU) להרצת מודלים של למידת מכונה (ML) יכול לשפר באופן משמעותי את ביצועי המודל ואת חוויית המשתמש של האפליקציות שלכם שתומכות בלמידת מכונה. LiteRT מאפשר להשתמש במעבדי GPU מעבדים מיוחדים אחרים באמצעות מנהל התקן חומרה שנקראנציגים. הפעלת השימוש במעבדי GPU בלמידת מכונה של LiteRT אפליקציות יכולות לספק את היתרונות הבאים:

במסמך הזה מפורטת סקירה כללית לגבי התמיכה במעבדי GPU ב-LiteRT, שימושים מתקדמים במעבדי GPU. לקבלת מידע ספציפי יותר על ביישום התמיכה ב-GPU בפלטפורמות ספציפיות, יש לעיין במדריכים הבאים:

תמיכה בפעולות של GPU ML

יש כמה מגבלות לפעולות של למידת מכונה של TensorFlow, או תפעול, מואצת על ידי נציג של LiteRT GPU. מקבל הגישה תומך את הפעולות הבאות בדיוק של 16 ביט ו-32 ביט:

כברירת מחדל, כל הפעולות נתמכות רק בגרסה 1. הפעלת הכימות support מפעילה את הגרסאות המתאימות, לדוגמה, ADD גרסה 2.

פתרון בעיות בתמיכה ב-GPU

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

WARNING: op code #42 cannot be handled by this delegate.

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

מודלים לדוגמה

המודלים הבאים לדוגמה מיועדים לנצל את האצת ה-GPU LiteRT ומסופקים לעיון ולבדיקה:

אופטימיזציה למעבדי GPU

הטכניקות הבאות יכולות לעזור לך לשפר את הביצועים במהלך הרצה של מודלים בחומרה של GPU באמצעות נציג של LiteRT GPU:

תמיכה מתקדמת ב-GPU

תוכלו להשתמש בשיטות מתקדמות נוספות כדי לעבד באמצעות GPU לביצועים טובים יותר של המודלים שלכם, כולל קוונטיזציה וסריאליזציה. בקטעים הבאים נרחיב על הטכניקות האלה.

שימוש במודלים כמותיים

בקטע הזה מוסבר איך מקבל הגישה ל-GPU מאיץ מודלים כמותיים של 8 ביט, כולל:

כדי לשפר את הביצועים, צריך להשתמש במודלים שיש להם גם קלט נקודה צפה (floating-point) וגם את img_tensors.

איך זה עובד?

מכיוון שהקצה העורפי של ה-GPU תומך רק בהפעלה בנקודה צפה (floating-point), של המודל המקורי. בשלב ברמה הכללית, התהליך הזה כולל את השלבים הבאים:

לקבלת מידע על הפעלת התכונה הזו באמצעות מקבל הגישה ל-GPU, קראו את המאמר בנושא הבאים:

צמצום זמן האתחול באמצעות סריאליזציה

התכונה 'הענקת גישה ל-GPU' מאפשרת לטעון מקוד ליבה שעבר הידור מראש נתוני מודל שעברו סריאליזציה ונשמרו בדיסק מהפעלות קודמות. הגישה הזאת מונעת של הידור מחדש, וכך לקצר את זמן ההפעלה בעד 90%. השיפור הזה באמצעות החלפת מקום בכונן לחיסכון בזמן. אפשר להפעיל את התכונה הזו באמצעות מספר אפשרויות הגדרות אישיות, כפי שמוצג בדוגמאות הקוד הבאות:

C++‎

TfLiteGpuDelegateOptionsV2 options = TfLiteGpuDelegateOptionsV2Default();
options.experimental_flags |= TFLITE_GPU_EXPERIMENTAL_FLAGS_ENABLE_SERIALIZATION;
options.serialization_dir = kTmpDir;
options.model_token = kModelToken;

auto* delegate = TfLiteGpuDelegateV2Create(options);
if (interpreter->ModifyGraphWithDelegate(delegate) != kTfLiteOk) return false;
  

Java

GpuDelegate delegate = new GpuDelegate(
  new GpuDelegate.Options().setSerializationParams(
    /* serializationDir= */ serializationDir,
    /* modelToken= */ modelToken));

Interpreter.Options options = (new Interpreter.Options()).addDelegate(delegate);
  

כאשר משתמשים בתכונת העריכה הסידורית, יש לוודא שהקוד תואם כללי יישום: