XLA Architecture

למה בנינו את XLA?

היו לנו מספר מטרות עבור XLA לעבוד עם TensorFlow:

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

  • שפר את השימוש בזיכרון. נתח ותזמן שימוש בזיכרון, באופן עקרוני ביטול מאגרי אחסון ביניים רבים.

  • צמצם את ההסתמכות על אופציות מותאמות אישית. הסר את הצורך ב-Ops מותאמים אישית רבים על-ידי שיפור הביצועים של Ops ברמה נמוכה שהתמזגו אוטומטית כדי להתאים לביצועים של Ops מותאמים אישית שהתמזגו ביד.

  • צמצם את טביעת הרגל הניידת. הסר את זמן הריצה של TensorFlow על ידי קומפילציה מראש של תת-גרף ופליטת צמד קבצי אובייקט/כותרת שניתן לקשר ישירות לאפליקציה אחרת. התוצאות יכולות להפחית את טביעת הרגל להסקת מסקנות ניידות במספר סדרי גודל.

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

איך XLA עובד?

שפת הקלט ל-XLA נקראת "HLO IR", או פשוט HLO (High Level Operations). הסמנטיקה של HLO מתוארת על הסמנטיקה מבצע עמוד. זה הכי נוח לחשוב HLO כמו IR מהדר .

XLA לוקח גרפים ("חישובים") המוגדרים ב-HLO ומרכיב אותם להוראות מכונה עבור ארכיטקטורות שונות. XLA הוא מודולרי במובן שזה קל חריץ בתוך backend אלטרנטיבה למקד כמה ארכיטקטורת HW רומן . הקצה האחורי של המעבד עבור x64 ו-ARM64, כמו גם הקצה האחורי של NVIDIA GPU נמצאים בעץ המקור של TensorFlow.

התרשים הבא מציג את תהליך ההידור ב-XLA:

XLA מגיע עם כמה אופטימיזציות וכרטיסי כניסה לניתוח כי הם יעד-עצמאי, כגון CSE , פיוז'ן פעולה עצמאי-היעד, ו חוצץ ניתוח להקצאת זיכרון ריצה לחישוב.

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

השלב הבא הוא יצירת קוד ספציפי ליעד. Backends CPU ו- GPU מצורף השימוש XLA LLVM עבור IR ברמה נמוכה, אופטימיזציה, ו-דור קוד. הקצה האחורי הזה פולט את ה-LLVM IR הדרוש כדי לייצג את חישוב XLA HLO בצורה יעילה, ולאחר מכן מפעילים את LLVM כדי לפלוט קוד מקורי מ-LLVM IR זה.

הקצה האחורי של ה-GPU תומך כעת במעבדי NVIDIA דרך ה-LLVM NVPTX backend; הקצה האחורי של ה-CPU תומך במספר ISAs של CPU.